Files
orx/orx-expression-evaluator/src/commonMain/antlr/KeyLangLexer.g4
2024-08-08 10:01:15 +02:00

72 lines
1.5 KiB
ANTLR

lexer grammar KeyLangLexer;
channels { WHITESPACE }
// Whitespace
NEWLINE : '\r\n' | '\r' | '\n' ;
WS : [\t ]+ -> channel(WHITESPACE) ;
RANGE_INCLUSIVE : '..' ;
RANGE_EXCLUSIVE_UNTIL : 'until' ;
RANGE_EXCLUSIVE : '..<' ;
RANGE_DOWNTO : 'downTo' ;
STEP : 'step' ;
// Identifiers
ID : [$_]*[a-zA-Z][A-Za-z0-9_]* | '`'[$_]*[A-Za-z0-9_-]*'`';
FUNCTION_ID : [$_]*[a-z][A-Za-z0-9_]* ;
// Literals
DECLIT : [0-9][0-9]* '.' [0-9]+ ;
INTLIT : '0'|[0-9][0-9]* ;
// Operators
PLUS : '+' ;
PERCENTAGE : '%' ;
MINUS : '-' ;
ASTERISK : '*' ;
DIVISION : '/' ;
ASSIGN : '=' ;
LPAREN : '(' ;
RPAREN : ')' ;
LBRACKET : '[' ;
RBRACKET : ']' ;
LCURLY : '{' ;
RCURLY : '}' ;
QUESTION_MARK : '?' ;
COLON : ':' ;
ARROW : '->' ;
COMMA : ',' ;
DOT : '.' ;
EQ : '==' ;
LT : '<' ;
LTEQ : '<=' ;
GT : '>' ;
GTEQ : '>=' ;
AND : '&&' ;
OR : '||' ;
NOT : '!' ;
STRING_OPEN : '"' -> pushMode(MODE_IN_STRING);
UNMATCHED : . ;
mode MODE_IN_STRING;
ESCAPE_STRING_DELIMITER : '\\"' ;
ESCAPE_SLASH : '\\\\' ;
ESCAPE_NEWLINE : '\\n' ;
ESCAPE_SHARP : '\\#' ;
STRING_CLOSE : '"' -> popMode ;
STRING_CONTENT : ~["\n\r\t\\#]+ ;