namespaceSpecifier: typeName '::';\r
\r
funcDecl: 'func' func;\r
-func: funcName genericDecl? '(' parameter ')' (':' type) body;\r
+func: funcName genericDecl? '(' parameter ')' (':' type) (body | ';');\r
parameter: (var (',' var)*)?;\r
\r
body: '{' stmt* '}';\r
| namespaceSpecifier* varName #identifierExpr\r
;\r
\r
-literal: INT_LIT | DECIMAL_LIT | STRING_LIT | BOOL_LIT;\r
+literal: INT_LIT | DECIMAL_LIT | StringLit | BOOL_LIT;\r
\r
funcName: NAME;\r
varName: NAME;\r
\r
INT_LIT: ('+' | '-')? [0-9]+;\r
DECIMAL_LIT: ('+' | '-')* [0-9]+ '.' [0-9]+;\r
-STRING_LIT: '"' [^"]* '"';\r
BOOL_LIT: 'true' | 'false';\r
+StringLit: '"' CharSeq '"';\r
+\r
+fragment CharSeq: Char+;\r
+fragment Char: ~["\\\r\n]\r
+ | '\\' ['"?abfnrtv\\]\r
+ | '\\\n'\r
+ | '\\\r\n'\r
+ ;\r
\r
NAME: ([a-z] | [A-Z] | [0-9])+;\r
WS: [ \t\r\n]+ -> skip;\r