\r
prog: (decl)+ EOF;\r
\r
-decl: varDecl\r
+decl: varDecl ';'\r
| funcDecl\r
| structDecl\r
;\r
varInit: varName (':' type) ('=' expr);\r
\r
type: typeName (typeModifier)*;\r
-typeModifier: '*' | '[' NUMBER? ']';\r
+typeModifier: '*' | ('[' (INT_LIT)? ']');\r
\r
\r
funcDecl: 'func' func;\r
\r
structDecl: 'struct' structName '{' structMember* '}';\r
structMember: structVar | structMethod;\r
-structVar: var;\r
+structVar: var ';';\r
structMethod: func;\r
\r
\r
-stmt: varDecl\r
+stmt: varDecl ';'\r
| ifStmt\r
| switchStmt\r
| forStmt\r
| whileStmt\r
- | assignStmt\r
- | returnStmt\r
- | expr;\r
+ | assignStmt ';'\r
+ | returnStmt ';'\r
+ | expr ';';\r
\r
ifStmt: 'if' expr body elseIfStmt* elseStmt?;\r
elseIfStmt: 'else' 'if' expr body;\r
NAME: ([a-z] | [A-Z] | [0-9])+;\r
WS: [ \t\r\n]+ -> skip;\r
NEWLINE: [\r\n]+;\r
-NUMBER: [0-9]+;\r