diff options
| author | Patrick Schönberger | 2021-08-02 14:43:11 +0200 |
|---|---|---|
| committer | Patrick Schönberger | 2021-08-02 14:43:11 +0200 |
| commit | 8aeae09e74b46ca52866f22b48f55fecdf27b849 (patch) | |
| tree | c129a883278585a2fdfbab6bea7d47d9df1bcee2 /Toc.g4 | |
| parent | 9f5457a18f551d261e4bd380ea16a52dc5b04cf9 (diff) | |
| download | toc-8aeae09e74b46ca52866f22b48f55fecdf27b849.tar.gz toc-8aeae09e74b46ca52866f22b48f55fecdf27b849.zip | |
type modifiers, parenthesized expressions, chained access expressions
Diffstat (limited to 'Toc.g4')
| -rw-r--r-- | Toc.g4 | 15 |
1 files changed, 7 insertions, 8 deletions
@@ -2,7 +2,7 @@ grammar Toc; prog: (decl)+ EOF;
-decl: varDecl
+decl: varDecl ';'
| funcDecl
| structDecl
;
@@ -12,7 +12,7 @@ var: varName (':' type) ('=' expr)?; varInit: varName (':' type) ('=' expr);
type: typeName (typeModifier)*;
-typeModifier: '*' | '[' NUMBER? ']';
+typeModifier: '*' | ('[' (INT_LIT)? ']');
funcDecl: 'func' func;
@@ -24,18 +24,18 @@ body: '{' stmt* '}'; structDecl: 'struct' structName '{' structMember* '}';
structMember: structVar | structMethod;
-structVar: var;
+structVar: var ';';
structMethod: func;
-stmt: varDecl
+stmt: varDecl ';'
| ifStmt
| switchStmt
| forStmt
| whileStmt
- | assignStmt
- | returnStmt
- | expr;
+ | assignStmt ';'
+ | returnStmt ';'
+ | expr ';';
ifStmt: 'if' expr body elseIfStmt* elseStmt?;
elseIfStmt: 'else' 'if' expr body;
@@ -115,4 +115,3 @@ BOOL_LIT: 'true' | 'false'; NAME: ([a-z] | [A-Z] | [0-9])+;
WS: [ \t\r\n]+ -> skip;
NEWLINE: [\r\n]+;
-NUMBER: [0-9]+;
|
