]> gitweb.ps.run Git - toc/blobdiff - Toc.g4
compile again
[toc] / Toc.g4
diff --git a/Toc.g4 b/Toc.g4
index 631e2c3d2123e69fa2c124969b43d1c8e48ee9a4..21703211d5db185d7b0f7c0bb1e5b7275e88b25f 100644 (file)
--- a/Toc.g4
+++ b/Toc.g4
@@ -37,10 +37,13 @@ stmt: varDecl
     | returnStmt\r
     | expr;\r
 \r
-ifStmt: 'if' expr body ('else' 'if' expr body)* ('else' body)?;\r
+ifStmt: 'if' expr body elseIfStmt* elseStmt?;\r
+elseIfStmt: 'else' 'if' expr body;\r
+elseStmt: 'else' body;\r
 \r
 switchStmt: 'switch' identifierExpr switchBody;\r
-switchBody: '{' ('case' expr body)* '}';\r
+switchBody: '{' switchCase* '}';\r
+switchCase: 'case' expr body;\r
 \r
 forStmt: 'for' (varInit | assignStmt) ',' expr ',' expr body;\r
 \r
@@ -72,16 +75,19 @@ nonAccessExpr: funcExpr
 funcExpr: funcName '(' (expr (',' expr)*)? ')';\r
 \r
 opExpr: binaryOp | prefixOp | postfixOp | ternaryOp;\r
-binaryOp: nonOpExpr BINARY_OP nonOpExpr (BINARY_OP nonOpExpr)*;\r
-prefixOp: PREFIX_OP nonOpExpr;\r
-postfixOp: nonOpExpr POSTFIX_OP;\r
+binaryOp: nonOpExpr binary_op nonOpExpr (binary_op nonOpExpr)*;\r
+prefixOp: prefix_op nonOpExpr;\r
+postfixOp: nonOpExpr postfix_op;\r
 ternaryOp: nonOpExpr '?' expr ':' expr;\r
 \r
 identifierExpr: varName;\r
 \r
 litExpr: INT_LIT | DECIMAL_LIT | STRING_LIT | BOOL_LIT;\r
 \r
-accessExpr: nonAccessExpr ((('.' | '->') identifierExpr) | ('[' expr ']'))+;\r
+accessExpr: nonAccessExpr (accessSubExpr)+;\r
+accessSubExpr: accessMember | accessBrackets;\r
+accessMember: ('.' | '->') identifierExpr;\r
+accessBrackets: '[' expr ']';\r
 \r
 parenExpr: '(' expr ')';\r
 \r
@@ -91,12 +97,12 @@ typeName: NAME;
 structName: NAME;\r
 \r
 \r
-POSTFIX_OP:\r
+postfix_op:\r
     '++' | '--';\r
-PREFIX_OP:\r
-    [+!~&*-] | POSTFIX_OP;\r
-BINARY_OP:\r
-    [+*/%&<|^>-] |\r
+prefix_op:\r
+    '+' | '-' | '!' | '~' | '&' | '*' | postfix_op;\r
+binary_op:\r
+    '+' | '-' | '*' | '/' | '%' | '&' | '<' | '|' | '^' | '>' |\r
     '==' | '!=' | '<=' | '>=' | '<'  | '>' |\r
     '<<' | '>>' | '||' | '&&' | '&=' | '|=' | '^=' |\r
     '<<=' | '>>=' | '+=' | '-=' | '*=' | '/=' | '%=';\r