Files
MXCompiler/grammar/MXLexer.g4
2024-10-10 15:53:16 +00:00

80 lines
1.4 KiB
ANTLR

lexer grammar MXLexer;
// Keywords
VOID: 'void';
BOOL: 'bool';
INT: 'int';
STRING: 'string';
NEW: 'new';
CLASS: 'class';
NULL: 'null';
TRUE: 'true';
FALSE: 'false';
THIS: 'this';
IF: 'if';
ELSE: 'else';
FOR: 'for';
WHILE: 'while';
BREAK: 'break';
CONTINUE: 'continue';
RETURN: 'return';
// Operators
PLUS: '+';
MINUS: '-';
MULTIPLY: '*';
DIVIDE: '/';
MOD: '%';
GN: '>=';
GE: '>';
LN: '<=';
LE: '<';
NE: '!=';
EQ: '==';
LAND: '&&';
LOR: '||';
LNOT: '!';
ARS: '>>';
ALS: '<<';
BAND: '&';
BOR: '|';
BXOR: '^';
BNOT: '~';
ASSIGN: '=';
SELF_PLUS: '++';
SELF_MINUS: '--';
DOT: '.';
QUESTION_MARK: '?';
COLON: ':';
// Punctuation
LPAREN: '(';
RPAREN: ')';
LBRACKET: '[';
RBRACKET: ']';
LBRACE: '{';
RBRACE: '}';
SEMICOLON: ';';
COMMA: ',';
FORMAT_STRING_WHOLE: 'f"' FORMAT_STR_INTERNAL '"';
FORMAT_STRING_HEAD: 'f"' FORMAT_STR_INTERNAL '$';
FORMAT_STRING_TAIL: '$' FORMAT_STR_INTERNAL '"';
FORMAT_STRING_BODY: '$' FORMAT_STR_INTERNAL '$';
fragment FORMAT_STR_INTERNAL : (DOLLAR_IN_FORMAT_STR | ESC | ~[$"\\])*;
fragment FORMAT_STR_BEG: 'f"';
fragment FORMAT_STR_END: '"';
fragment DOLLAR_IN_FORMAT_STR: '$$';
fragment DOLLAR: '$';
// Identifiers
ID: [a-zA-Z][a-zA-Z_0-9]*;
// Literals
INT_LITERAL: [0-9]+;
STRING_LITERAL: '"' (ESC|~["\\])*? '"';
fragment ESC : '\\n'| '\\"' | '\\\\';
// Whitespace and comments
WS: [ \t\r\n]+ -> skip;
LINE_COMMENT : '//' .*? ('\r\n'|'\r'|'\n'|EOF) -> skip;
BLOCK_COMMENT: '/*' .*? '*/' -> skip;