11 namespaceDecl: 'namespace' typeName '{' decl* '}';
\r
14 var: varName (':' type) ('=' expr)?;
\r
15 varInit: varName (':' type) ('=' expr);
\r
17 type: namespaceSpecifier* typeName (typeModifier)*;
\r
18 typeModifier: '*' | ('[' (INT_LIT)? ']');
\r
20 namespaceSpecifier: typeName '::';
\r
22 funcDecl: 'func' func;
\r
23 func: funcName genericDecl? '(' parameter ')' (':' type) body;
\r
24 parameter: (var (',' var)*)?;
\r
26 body: '{' stmt* '}';
\r
29 structDecl: 'struct' structName genericDecl? '{' structMember* '}';
\r
30 structMember: privateDecl? structVar | structMethod;
\r
33 privateDecl: 'private';
\r
35 genericDecl: '<' typeName (',' typeName)* '>';
\r
46 ifStmt: 'if' expr body elseIfStmt* elseStmt?;
\r
47 elseIfStmt: 'else' 'if' expr body;
\r
48 elseStmt: 'else' body;
\r
50 switchStmt: 'switch' expr switchBody;
\r
51 switchBody: '{' switchCase* '}';
\r
52 switchCase: 'case' expr body;
\r
54 forStmt: 'for' varInit ',' expr ',' expr body;
\r
56 whileStmt: 'while' expr body;
\r
58 assignStmt: expr '=' expr;
\r
60 returnStmt: 'return' expr;
\r
62 expr: namespaceSpecifier* funcName '(' (expr (',' expr)*)? ')' #funcExpr
\r
63 | expr '.' funcName '(' (expr (',' expr)*)? ')' #methodExpr
\r
65 | '(' expr ')' #parenExpr
\r
66 | expr '.' varName #dotExpr
\r
67 | prefix_op expr #prefixOpExpr
\r
68 | expr postfix_op #postfixOpExpr
\r
69 | expr binary_op expr #binaryOpExpr
\r
70 | expr '?' expr ':' expr #ternaryOpExpr
\r
71 | expr '[' expr ']' #bracketExpr
\r
72 | namespaceSpecifier* varName #identifierExpr
\r
75 literal: INT_LIT | DECIMAL_LIT | STRING_LIT | BOOL_LIT;
\r
86 '+' | '-' | '!' | '~' | '&' | '*' | postfix_op;
\r
88 '+' | '-' | '*' | '/' | '%' | '&' | '<' | '|' | '^' | '>' |
\r
89 '==' | '!=' | '<=' | '>=' | '<' | '>' |
\r
90 '<<' | '>>' | '||' | '&&' | '&=' | '|=' | '^=' |
\r
91 '<<=' | '>>=' | '+=' | '-=' | '*=' | '/=' | '%=';
\r
93 INT_LIT: ('+' | '-')? [0-9]+;
\r
94 DECIMAL_LIT: ('+' | '-')* [0-9]+ '.' [0-9]+;
\r
95 STRING_LIT: '"' [^"]* '"';
\r
96 BOOL_LIT: 'true' | 'false';
\r
98 NAME: ([a-z] | [A-Z] | [0-9])+;
\r
99 WS: [ \t\r\n]+ -> skip;
\r