11 var: varName (':' type) ('=' expr)?;
\r
16 funcDecl: 'func' func;
\r
17 func: funcName '(' parameter ')' (':' type) body;
\r
18 parameter: (firstParameter (additionalParameter)*)?;
\r
19 firstParameter: var;
\r
20 additionalParameter: ',' var;
\r
22 body: '{' stmt* '}';
\r
25 structDecl: 'struct' structName '{' structMember* '}';
\r
26 structMember: structVar | structMethod;
\r
38 conditional: ifCond;
\r
39 ifCond: 'if' expr body;
\r
42 whileLoop: 'while' expr body;
\r
44 assignment: identifier '=' expr;
\r
46 returnStmt: 'return' expr;
\r
63 nonSubscriptExpr: funcCall
\r
68 funcCall: funcName '(' (expr (',' expr)*)? ')';
\r
70 operatorExpr: binaryOperator;
\r
71 binaryOperator: nonOpExpr BINARY_OPERATOR nonOpExpr (BINARY_OPERATOR nonOpExpr)*;
\r
73 identifier: varName;
\r
77 subscript: nonSubscriptExpr '[' expr ']';
\r
79 memberAccess: identifier '.' identifier;
\r
81 parenExpr: '(' expr ')';
\r
90 '+' | '-' | '*' | '/'
\r
93 INTLIT: ('+' | '-')? [0-9]+;
\r
94 NAME: ([a-z] | [A-Z] | [0-9])+;
\r
95 WS: [ \t\r\n]+ -> skip;
\r