grist/dsl/ReportLexer.g4
2025-07-16 12:13:39 +08:00

136 lines
1.7 KiB
ANTLR

lexer grammar ReportLexer;
@header {
package com.torchdb.spreadsheet.dsl;
}
Cell : LETTER DIGIT+ ;
Operator : '+'
| '-'
| '*'
| '/'
| '%'
;
OP : '>'
| '<'
| '=='
| '!='
| '>='
| '<='
| 'in'
| 'notin'
| 'like'
;
ORDER : 'desc' | 'asc' ;
BOOLEAN : 'true' | 'false' ;
COLON : ':';
COMMA : ',' ;
NULL : 'null';
LeftParen : '(' ;
RightParen : ')' ;
STRING : '"' STRING_CONTENT '"'
| '\'' STRING_CONTENT '\''
| '`' STRING_CONTENT '`'
;
AND : '&&' ;
OR : '||' ;
INTEGER : DIGIT+;
NUMBER
:
DIGIT+ '.' DIGIT+ EXP? // ('-'? INT '.' INT EXP?)1.35, 1.35E-9, 0.3, -4.5
| DIGIT+ EXP // 1e10 -3e4
| DIGIT+ // -3, 45
;
EXCLAMATION : '!';
OFFSET : '~';
EXP
:
[Ee] [+\-]? DIGIT+
;
Identifier : StartChar Char* ;
LETTER : [A-Z]+ ;
Char : StartChar
| '_' | DIGIT
| '\u00B7'
| '\u0300'..'\u036F'
| '\u203F'..'\u2040'
;
DIGIT : [0-9];
fragment
STRING_CONTENT :
( EscapeSequence | ~('"'|'\'') | BLOCK_STRING)*
;
// 段落文本
fragment
BLOCK_STRING
: '\'\'\'' ~[+] .*? '\'\'\''
;
fragment
EscapeSequence
: '\\' ('b'|'t'|'n'|'f'|'r'|'\''|'\\')
| UnicodeEscape
| OctalEscape
;
fragment
OctalEscape
: '\\' ('0'..'3') ('0'..'7') ('0'..'7')
| '\\' ('0'..'7') ('0'..'7')
| '\\' ('0'..'7')
;
fragment
UnicodeEscape
:
'\\' 'u' HEX HEX HEX HEX
;
fragment
HEX
:
[0-9a-fA-F]
;
fragment
StartChar
: [a-zA-Z]
| '\u2070'..'\u218F'
| '\u2C00'..'\u2FEF'
| '\u3001'..'\uD7FF'
| '\uF900'..'\uFDCF'
| '\uFDF0'..'\uFFFD'
;
WS
:
[ \t\r\n]+ -> channel(HIDDEN)
;
NL
:
'\r'? '\n' ->channel(HIDDEN)
;