X-Git-Url: https://gitweb.ps.run/toc/blobdiff_plain/7f83e1b208e87e3808b268303bb633a8fda203f5..c2ba7425955ae538e220cec79d9124756d1b4c8b:/Toc.g4 diff --git a/Toc.g4 b/Toc.g4 index 336b7b0..4309e00 100644 --- a/Toc.g4 +++ b/Toc.g4 @@ -20,7 +20,7 @@ typeModifier: '*' | ('[' (INT_LIT)? ']'); namespaceSpecifier: typeName '::'; funcDecl: 'func' func; -func: funcName genericDecl? '(' parameter ')' (':' type) body; +func: funcName genericDecl? '(' parameter ')' (':' type) (body | ';'); parameter: (var (',' var)*)?; body: '{' stmt* '}'; @@ -72,7 +72,7 @@ expr: namespaceSpecifier* funcName '(' (expr (',' expr)*)? ')' #funcExpr | namespaceSpecifier* varName #identifierExpr ; -literal: INT_LIT | DECIMAL_LIT | STRING_LIT | BOOL_LIT; +literal: INT_LIT | DECIMAL_LIT | StringLit | BOOL_LIT; funcName: NAME; varName: NAME; @@ -92,8 +92,15 @@ binary_op: INT_LIT: ('+' | '-')? [0-9]+; DECIMAL_LIT: ('+' | '-')* [0-9]+ '.' [0-9]+; -STRING_LIT: '"' [^"]* '"'; BOOL_LIT: 'true' | 'false'; +StringLit: '"' CharSeq '"'; + +fragment CharSeq: Char+; +fragment Char: ~["\\\r\n] + | '\\' ['"?abfnrtv\\] + | '\\\n' + | '\\\r\n' + ; NAME: ([a-z] | [A-Z] | [0-9])+; WS: [ \t\r\n]+ -> skip;