X-Git-Url: https://gitweb.ps.run/toc/blobdiff_plain/9f5457a18f551d261e4bd380ea16a52dc5b04cf9..8aeae09e74b46ca52866f22b48f55fecdf27b849:/Toc.g4 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]+;