diff --git a/grammar.txt b/grammar.txt index f54287ce2d4ffa07dd190abd64685d32b0ca9ad2..9be88bb9f1cb0346cca4ddfdcd03c503294ebfb2 100644 --- a/grammar.txt +++ b/grammar.txt @@ -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,30 @@ Range_ -> '..' Expr // '..' Range_ -> '...' Expr // '...' + + + + + +Expr -> LogExpr // + +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 -> identifier // identifier +PrimaryExpr -> number_literal // number_literal +PrimaryExpr -> '-' PrimaryExpr // '-' +PrimaryExpr -> '-' PrimaryExpr // '!' + + +