Skip to content
Snippets Groups Projects
Commit a77dd842 authored by Peter Matta's avatar Peter Matta
Browse files

Expression grammar with operator precedence

parent 800cd9b9
No related branches found
No related tags found
No related merge requests found
......@@ -39,6 +39,19 @@ Stmt -> If // 'if'
FuncCall -> epsilon // _ | Operator, ')', '{', ';'
FuncCall -> '(' Args ')' // '('
 
ExprPattern -> '(' ExprPattern_ ')' // '('
ExprPattern_ -> epsilon // _ | ')'
ExprPattern_ -> Expr ExprPattern__ // identifier, number_literal, '('
ExprPattern__ -> epsilon // ')'
ExprPattern__ -> ',' Expr ExprPattern__ // ','
VarPattern -> '(' VarPattern_ ')' // '('
VarPattern_ -> epsilon // ')'
VarPattern_ -> identifier VarPattern__ // identifier
VarPattern__ -> epsilon // ')'
VarPattern__ -> ',' identifier // ','
VarPattern__
 
For -> 'for' identifier 'in' Range Block // 'for'
While -> 'while' Expr Block // 'while'
......@@ -56,3 +69,36 @@ Range_ -> '..' Expr // '..'
Range_ -> '...' Expr // '...'
 
 
TopExpr -> Expr ';' // '(', identifier, number_literal, '-'
Expr -> AssignExpr // '(', identifier, number_literal, '-'
AssignExpr -> LogExpr AssignExpr_ // '(', identifier, number_literal, '-'
AssignExpr_ -> epsilon // _ | ')', ';'
AssignExpr_ -> '=' Expr // '='
LogExpr -> ArithAddExpr LogExpr_ // '(', identifier, number_literal, '-'
LogExpr_ -> epsilon // _ | '=', ')', ';'
LogExpr_ -> LogOp ArithAddExpr // '==', '!=', '<', '>', '<=', '>='
ArithAddExpr -> ArithMulExpr ArithAddExpr_ // '(', identifier, number_literal, '-'
ArithAddExpr_ -> epsilon // _ | '==', '!=', '<', '>', '<=', '>=', '=', ')', ';'
ArithAddExpr_ -> AddOp ArithMulExpr // '+', '-'
ArithMulExpr -> PrimaryExpr ArithMulExpr_ // '(', identifier, number_literal, '-'
ArithMulExpr_ -> epsilon // _ | '+', '-', '==', '!=', '<', '>', '<=', '>=', '=', ')', ';'
ArithMulExpr_ -> MulOp PrimaryExpr // '*', '/'
PrimaryExpr -> '(' Expr ')' // '('
PrimaryExpr -> identiier IdExpr // identifier
PrimaryExpr -> number_literal // number_literal
PrimaryExpr -> '-' PrimaryExpr // '-'
PrimaryExpr -> '!' PrimaryExpr // '!'
IdExpr -> epsilon // _ | '*', '/', '+', '-', '==', '!=', '<', '>', '<=', '>=', '=', ')', ';'
IdExpr -> '(' Args ')' // '('
IdExpr -> '[' Expr ']' // '['
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment