Newer
Older
Program -> GDecl ';' Program // 'const', 'var'
GDecl -> 'const' identifier '=' GDecl_ // 'const'
GDecl -> 'var' identifier '=' GDecl_ // 'var'
GDecl_ -> identifier // 'identifier'
GDecl_ -> number_literal // 'number_literal'
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' | '}'
Decl -> 'var' identifier '=' Expr // 'var'
TopExpr -> identifier TopExpr_ ';' // identifier
TopExpr -> number_literal Expr_ ';' // number_literal
TopExpr_ -> epsilon // _ | ';'
TopExpr_ -> '=' Expr // '='
TopExpr_ -> FuncCall // '('
Expr -> identifier idExpr Expr_ // identifier | Operator, ')', '{', ';'
Expr -> number_literal Expr_ // number_literal | Operator, ')', '{', ';'
Expr -> '(' Expr ')' // '('
Expr_ -> Operator Expr // Operator
idExpr -> epsilon // _ | Operator, ')', '{', ';'
idExpr -> FuncCall // '(' | Operator ')', '{', ';'
Stmt -> For // 'for'
Stmt -> While // 'while'
Stmt -> If // 'if'
FuncCall -> epsilon // _ | Operator, ')', '{', ';'
FuncCall -> '(' Args ')' // '('
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_ // ','
Range -> Expr Range_ // identifier, number_literal, '('
Range_ -> '..' Expr // '..'
Range_ -> '...' Expr // '...'