11 var: varName (':' type) ('=' expr)?;
\r
16 funcDecl: 'func' func;
\r
17 func: funcName '(' parameter ')' (':' type) body;
\r
18 parameter: (var (',' var)*)?;
\r
20 body: '{' stmt* '}';
\r
23 structDecl: 'struct' structName '{' structMember* '}';
\r
24 structMember: structVar | structMethod;
\r
36 conditional: ifCond;
\r
37 ifCond: 'if' expr body;
\r
40 whileLoop: 'while' expr body;
\r
42 assignment: identifier '=' expr;
\r
44 returnStmt: 'return' expr;
\r
61 nonSubscriptExpr: funcCall
\r
67 nonAccessExpr: funcCall
\r
74 funcCall: funcName '(' (expr (',' expr)*)? ')';
\r
76 operatorExpr: binaryOperator;
\r
77 binaryOperator: nonOpExpr BINARY_OPERATOR nonOpExpr (BINARY_OPERATOR nonOpExpr)*;
\r
79 identifier: varName;
\r
83 subscript: nonSubscriptExpr '[' expr ']';
\r
85 memberAccess: identifier '.' identifier;
\r
87 parenExpr: '(' expr ')';
\r
96 '+' | '-' | '*' | '/'
\r
99 INTLIT: ('+' | '-')? [0-9]+;
\r
100 NAME: ([a-z] | [A-Z] | [0-9])+;
\r
101 WS: [ \t\r\n]+ -> skip;
\r