40 lines
1.0 KiB
ANTLR
40 lines
1.0 KiB
ANTLR
lexer grammar HooLexer;
|
|
|
|
IDENTIFIER: Letter LetterOrDigit*;
|
|
|
|
DECIMAL_LITERAL : '0' | [1-9] [0-9]*;
|
|
// HEX_LITERAL : '0' [xX] [0-9a-fA-F] ([0-9a-fA-F_]* [0-9a-fA-F])? [lL]?;
|
|
// OCT_LITERAL : '0' '_'* [0-7] ([0-7_]* [0-7])? [lL]?;
|
|
// BINARY_LITERAL : '0' [bB] [01] ([01_]* [01])? [lL]?;
|
|
|
|
FLOAT_LITERAL: (Digits '.' Digits? | '.' Digits);
|
|
|
|
BOOL_LITERAL: 'true' | 'false';
|
|
|
|
CHAR_LITERAL: '\'' (~['\\\r\n] | EscapeSequence) '\'';
|
|
|
|
STRING_LITERAL: '"' (~["\\\r\n] | EscapeSequence)* '"';
|
|
|
|
TEXT_BLOCK: '"""' [ \t]* [\r\n] (. | EscapeSequence)*? '"""';
|
|
|
|
NULL_LITERAL: 'null';
|
|
|
|
WS: [ \t\r\n\u000C]+ -> channel(HIDDEN);
|
|
COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
|
|
LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN);
|
|
|
|
fragment EscapeSequence:
|
|
'\\' 'u005c'? [btnfr"'\\]
|
|
| '\\' 'u005c'? ([0-3]? [0-7])? [0-7]
|
|
| '\\' 'u'+ HexDigit HexDigit HexDigit HexDigit;
|
|
|
|
fragment HexDigit: [0-9a-fA-F];
|
|
|
|
fragment Digits: [0-9];
|
|
|
|
fragment LetterOrDigit: Letter | [0-9];
|
|
|
|
fragment Letter:
|
|
[a-zA-Z$_]
|
|
| ~[\u0000-\u007F\uD800-\uDBFF]
|
|
| [\uD800-\uDBFF] [\uDC00-\uDFFF]; |