abouttreesummaryrefslogcommitdiff
path: root/Toc.g4
diff options
context:
space:
mode:
authorPatrick Schönberger2021-08-02 14:43:11 +0200
committerPatrick Schönberger2021-08-02 14:43:11 +0200
commit8aeae09e74b46ca52866f22b48f55fecdf27b849 (patch)
treec129a883278585a2fdfbab6bea7d47d9df1bcee2 /Toc.g4
parent9f5457a18f551d261e4bd380ea16a52dc5b04cf9 (diff)
downloadtoc-8aeae09e74b46ca52866f22b48f55fecdf27b849.tar.gz
toc-8aeae09e74b46ca52866f22b48f55fecdf27b849.zip
type modifiers, parenthesized expressions, chained access expressions
Diffstat (limited to 'Toc.g4')
-rw-r--r--Toc.g415
1 files changed, 7 insertions, 8 deletions
diff --git a/Toc.g4 b/Toc.g4
index 2170321..afe4209 100644
--- a/Toc.g4
+++ b/Toc.g4
@@ -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]+;