diff options
| author | Patrick Schönberger | 2021-08-04 21:44:26 +0200 |
|---|---|---|
| committer | Patrick Schönberger | 2021-08-04 21:44:26 +0200 |
| commit | b9322dfb8efe37f6f88a899269bdf21015f4db9a (patch) | |
| tree | 837a9aadd80723f6c3d672fe0c9ae04f4f0864c8 /Toc.g4 | |
| parent | c2ba7425955ae538e220cec79d9124756d1b4c8b (diff) | |
| download | toc-b9322dfb8efe37f6f88a899269bdf21015f4db9a.tar.gz toc-b9322dfb8efe37f6f88a899269bdf21015f4db9a.zip | |
generic functions and structs
Diffstat (limited to 'Toc.g4')
| -rw-r--r-- | Toc.g4 | 28 |
1 files changed, 16 insertions, 12 deletions
@@ -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;
|
