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) ;