72 lines
1.5 KiB
ANTLR
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\\#]+ ;
|
|
|