]> gitweb.ps.run Git - toc/blobdiff - Toc.g4
add comments, fix struct/function lookup
[toc] / Toc.g4
diff --git a/Toc.g4 b/Toc.g4
index 4309e007d5d048e15b5b729da03fbe08050f7016..a5d5dd83f7d4d94f7cf98438e5cae71fd05f3b43 100644 (file)
--- a/Toc.g4
+++ b/Toc.g4
@@ -14,7 +14,7 @@ varDecl:  'var' var;
 var:  varName (':' type) ('=' expr)?;\r
 varInit:  varName (':' type) ('=' expr);\r
 \r
-type: namespaceSpecifier* typeName (typeModifier)*;\r
+type: namespaceSpecifier* typeName genericInstantiation? (typeModifier)*;\r
 typeModifier: '*' | ('[' (INT_LIT)? ']');\r
 \r
 namespaceSpecifier: typeName '::';\r
@@ -33,6 +33,7 @@ structMethod: func;
 privateDecl: 'private';\r
 \r
 genericDecl: '<' typeName (',' typeName)* '>';\r
+genericInstantiation: '<' type (',' type)* '>';\r
 \r
 stmt: varDecl ';'\r
     | ifStmt\r
@@ -59,19 +60,22 @@ assignStmt: expr '=' expr;
 \r
 returnStmt: 'return' expr;\r
 \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
+expr: namespaceSpecifier* funcName genericInstantiation? '(' (expr (',' expr)*)? ')' #funcExpr\r
+    | expr '.' funcName genericInstantiation? '(' (expr (',' expr)*)? ')'            #methodExpr\r
+    | literal                          #litExpr\r
+    | '(' expr ')'                     #parenExpr\r
+    | expr (dot | arrow) 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
+dot: '.';\r
+arrow: '->';\r
+\r
 literal: INT_LIT | DECIMAL_LIT | StringLit | BOOL_LIT;\r
 \r
 funcName: NAME;\r
@@ -105,3 +109,4 @@ fragment Char: ~["\\\r\n]
 NAME: ([a-z] | [A-Z] | [0-9])+;\r
 WS: [ \t\r\n]+ -> skip;\r
 NEWLINE: [\r\n]+;\r
+COMMENT: '//' .*? '\n' -> skip;\r