]> gitweb.ps.run Git - toc/blobdiff - Toc.g4
pre change
[toc] / Toc.g4
diff --git a/Toc.g4 b/Toc.g4
index 0f2f613a130d3a778edf03683e31c0ad1736cad4..336b7b03a0a0e8b15bf5745e0099d529b0a3e3a4 100644 (file)
--- a/Toc.g4
+++ b/Toc.g4
@@ -14,9 +14,10 @@ varDecl:  'var' var;
 var:  varName (':' type) ('=' expr)?;\r
 varInit:  varName (':' type) ('=' expr);\r
 \r
-type: typeName (typeModifier)*;\r
+type: namespaceSpecifier* typeName (typeModifier)*;\r
 typeModifier: '*' | ('[' (INT_LIT)? ']');\r
 \r
+namespaceSpecifier: typeName '::';\r
 \r
 funcDecl: 'func' func;\r
 func: funcName genericDecl? '(' parameter ')' (':' type) body;\r
@@ -46,55 +47,32 @@ ifStmt: 'if' expr body elseIfStmt* elseStmt?;
 elseIfStmt: 'else' 'if' expr body;\r
 elseStmt: 'else' body;\r
 \r
-switchStmt: 'switch' identifierExpr switchBody;\r
+switchStmt: 'switch' expr switchBody;\r
 switchBody: '{' switchCase* '}';\r
 switchCase: 'case' expr body;\r
 \r
-forStmt: 'for' (varInit | assignStmt) ',' expr ',' expr body;\r
+forStmt: 'for' varInit ',' expr ',' expr body;\r
 \r
 whileStmt: 'while' expr body;\r
 \r
-assignStmt: identifierExpr '=' expr;\r
+assignStmt: expr '=' expr;\r
 \r
 returnStmt: 'return' expr;\r
 \r
-expr: funcExpr\r
-    | litExpr\r
-    | identifierExpr\r
-    | parenExpr\r
-    | accessExpr\r
-    | opExpr;\r
-\r
-/* op */\r
-nonOpExpr: funcExpr\r
-         | litExpr\r
-         | identifierExpr\r
-         | parenExpr\r
-         | accessExpr;\r
-\r
-/* lit access op */\r
-nonAccessExpr: funcExpr\r
-             | identifierExpr\r
-             | parenExpr;\r
-\r
-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
-ternaryOp: nonOpExpr '?' expr ':' expr;\r
-\r
-identifierExpr: varName;\r
-\r
-litExpr: INT_LIT | DECIMAL_LIT | STRING_LIT | BOOL_LIT;\r
-\r
-accessExpr: nonAccessExpr (accessSubExpr)+;\r
-accessSubExpr: accessMember | accessBrackets;\r
-accessMember: ('.' | '->') identifierExpr;\r
-accessBrackets: '[' expr ']';\r
+expr: namespaceSpecifier* funcName '(' (expr (',' expr)*)? ')' #funcExpr\r
+    | expr '.' funcName '(' (expr (',' expr)*)? ')'            #methodExpr\r
+    | literal                                                  #litExpr\r
+    | '(' expr ')'                                             #parenExpr\r
+    | expr '.' varName                                         #dotExpr\r
+    | prefix_op expr                                           #prefixOpExpr\r
+    | expr postfix_op                                          #postfixOpExpr\r
+    | expr binary_op expr                                      #binaryOpExpr\r
+    | expr '?' expr ':' expr                                   #ternaryOpExpr\r
+    | expr '[' expr ']'                                        #bracketExpr\r
+    | namespaceSpecifier* varName                              #identifierExpr\r
+    ;\r
 \r
-parenExpr: '(' expr ')';\r
+literal: INT_LIT | DECIMAL_LIT | STRING_LIT | BOOL_LIT;\r
 \r
 funcName: NAME;\r
 varName: NAME;\r