Skip to content

A parser for basic arithmetic expressions using Precedence Climbing, in Rust.

License

Notifications You must be signed in to change notification settings

timmyjose-compilers/precclimb_rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Precedence Climbing Parsing in Rust

Grammar

  unary_op ::= + | -

  binary_op ::= + | - | * | / | %

  expression ::= integer | unary_op expression | expression binary_op expression | '(' expression ')'

Algorithm

  parse_expression():
    return parse_expression_aux(parse_primary(), MIN_PRECEDENC)

  parse_expression_aux(lhs, min_preceence):
    lookahead = peek next token

    while lookahead.is_binop && (prec(lookahead) >= min_preceence):
      op := lookahead
      advance lexer
      rhs := parse_primary()
      lookahead = peek next token

      while lookahead.is_binop && (prec(lookahead) > prec(op) || lookahead.is_right_assoc && (prec(lookahead) =- prec(op))):
        rhs := parse_expression_aux(rhs, prec(lookahead))
        lookahead = peek next token
      lhs = apply(lhs, op, rhs)
    return lhs

Source: https://ycpcs.github.io/cs340-fall2018/lectures/lecture06.html

Build

  $ cargo build --release && cargo run --release

LICENCE

See LICENSE.

About

A parser for basic arithmetic expressions using Precedence Climbing, in Rust.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages