Newer
Older
Program -> Decl ';' Program // 'const', 'var'
Program -> Expr ';' Program // 'const', 'var'
Decl -> 'var' identifier DeclVal ';' // 'var'
Decl -> 'const' identifier DeclVal ';' // 'cons'
DeclVal -> '=' Expr // '='
// Decl_ -> '[' DeclArray // '['
// DeclArray -> Expr // '(', identifier, number_literal, '-'
// DeclArray -> ']' '=' ArrayLiteral // ']'
Func -> 'func' identifier '(' Args ')' Block // 'func'
Block -> '{' Block_ '}' // '{'
Block_ -> epsilon // _ | '}'
Block_ -> Decl ';' Block_ // 'var' | '}'
Block_ -> Expr ';' Block_ // identifier, number_literal, '(' | '}'
Block_ -> Stmt Block_ // 'for', 'while', 'if' | '}'
Expr -> AssignExpr // '(', identifier, number_literal, '-'
AssignExpr -> LogExpr AssignExpr_ // '(', identifier, number_literal, '-'
AssignExpr_ -> epsilon // _ | '..', '...', ')', '{', ']', ',', ';'
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 ']' // '['
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Stmt -> For // 'for'
Stmt -> While // 'while'
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'
If -> 'if' Expr Block Else // 'if'
Else -> epsilon // _ | 'var', identifier, number_literal, '(', 'for', 'while', 'if', '}'
Else -> 'else' Block // 'else'
Args -> epsilon // _ | ')'
Args -> identifier Args_ // identifier
Args_ -> epsilon // _ | ')'
Args_ -> ',' identifier Args_ // ','
ArrayLiteral -> '[' ArrayBody ']' //
ArrayBody -> epsilon //
ArrayBody -> Expr ',' ArrayBody //
Range -> Expr Range_ // identifier, number_literal, '('
Range_ -> '..' Expr // '..'
Range_ -> '...' Expr // '...'