abouttreesummaryrefslogcommitdiff
path: root/Toc.g4
diff options
context:
space:
mode:
authorPatrick Schönberger2021-08-04 21:44:26 +0200
committerPatrick Schönberger2021-08-04 21:44:26 +0200
commitb9322dfb8efe37f6f88a899269bdf21015f4db9a (patch)
tree837a9aadd80723f6c3d672fe0c9ae04f4f0864c8 /Toc.g4
parentc2ba7425955ae538e220cec79d9124756d1b4c8b (diff)
downloadtoc-b9322dfb8efe37f6f88a899269bdf21015f4db9a.tar.gz
toc-b9322dfb8efe37f6f88a899269bdf21015f4db9a.zip
generic functions and structs
Diffstat (limited to 'Toc.g4')
-rw-r--r--Toc.g428
1 files changed, 16 insertions, 12 deletions
diff --git a/Toc.g4 b/Toc.g4
index 4309e00..36e96e4 100644
--- a/Toc.g4
+++ b/Toc.g4
@@ -14,7 +14,7 @@ varDecl: 'var' var;
var: varName (':' type) ('=' expr)?;
varInit: varName (':' type) ('=' expr);
-type: namespaceSpecifier* typeName (typeModifier)*;
+type: namespaceSpecifier* typeName genericInstantiation? (typeModifier)*;
typeModifier: '*' | ('[' (INT_LIT)? ']');
namespaceSpecifier: typeName '::';
@@ -33,6 +33,7 @@ structMethod: func;
privateDecl: 'private';
genericDecl: '<' typeName (',' typeName)* '>';
+genericInstantiation: '<' type (',' type)* '>';
stmt: varDecl ';'
| ifStmt
@@ -59,19 +60,22 @@ assignStmt: expr '=' expr;
returnStmt: 'return' expr;
-expr: namespaceSpecifier* funcName '(' (expr (',' expr)*)? ')' #funcExpr
- | expr '.' funcName '(' (expr (',' expr)*)? ')' #methodExpr
- | literal #litExpr
- | '(' expr ')' #parenExpr
- | expr '.' varName #dotExpr
- | prefix_op expr #prefixOpExpr
- | expr postfix_op #postfixOpExpr
- | expr binary_op expr #binaryOpExpr
- | expr '?' expr ':' expr #ternaryOpExpr
- | expr '[' expr ']' #bracketExpr
- | namespaceSpecifier* varName #identifierExpr
+expr: namespaceSpecifier* funcName genericInstantiation? '(' (expr (',' expr)*)? ')' #funcExpr
+ | expr '.' funcName genericInstantiation? '(' (expr (',' expr)*)? ')' #methodExpr
+ | literal #litExpr
+ | '(' expr ')' #parenExpr
+ | expr (dot | arrow) varName #dotExpr
+ | prefix_op expr #prefixOpExpr
+ | expr postfix_op #postfixOpExpr
+ | expr binary_op expr #binaryOpExpr
+ | expr '?' expr ':' expr #ternaryOpExpr
+ | expr '[' expr ']' #bracketExpr
+ | namespaceSpecifier* varName #identifierExpr
;
+dot: '.';
+arrow: '->';
+
literal: INT_LIT | DECIMAL_LIT | StringLit | BOOL_LIT;
funcName: NAME;