-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathTExprLexer.g4
89 lines (74 loc) · 1.33 KB
/
TExprLexer.g4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
lexer grammar TExprLexer;
Integer
: '-' ? INT
;
Float
: '-' ? INT '.' INT
;
Boolean
: TRUE
| FALSE
;
Varchar
: STRING
;
fragment STRING
: '\'' ( STRING_ESCAPE_SEQ | ~[\\\r\n'] )* '\''
| '"' ( STRING_ESCAPE_SEQ | ~[\\\r\n"] )* '"'
;
fragment STRING_ESCAPE_SEQ
: '\\' .
;
fragment ESC
: '\\' (["\\/bfnrt])
;
fragment NAME
: [a-zA-Z][a-zA-Z0-9_\\.]+
;
AND : '&&' ;
OR : '||' ;
NOT : 'not';
IS : 'is';
IN : 'in';
TRUE : 'true' ;
FALSE : 'false' ;
GT : '>' ;
GE : '>=' ;
LT : '<' ;
LE : '<=' ;
EQ : '==' ;
NE : '!=' ;
MATCH : '=~' -> pushMode(REG);
LPAREN : '(' ;
RPAREN : ')' ;
INT : '-'? [0-9]+ ;
FLOAT : '-'? [0-9]+ ( '.' [0-9]+ )? ;
IDENTIFIER : [a-zA-Z_] [a-zA-Z_0-9]* ;
VARIABLE
: '$'[a-zA-Z_] [.a-zA-Z_0-9]*
| '@'[a-zA-Z_] [.a-zA-Z_0-9]*
;
PLUS : '+';
MINUS: '-';
MUL : '*';
DIV : '/';
MOD : '%';
POINT: '.';
E : 'e' | 'E';
LSHIFT : '<<' ;
RSHIFT : '>>' ;
BAND : '&'; //位与
BEOR : '^'; //异或
BIOR : '|'; //位或
NL : '\n';
DIGIT: ('0' .. '9');
COMMA: ',';
LBRACKET: '[';
RBRACKET: ']';
WS: [ \r\t\u000C\n]+ -> skip;
// $var =~ /../
mode REG;
SLASH: '/';
REGEX
: [ ]* SLASH ( STRING_ESCAPE_SEQ | ~[\\\r\n/'] )+ SLASH -> popMode
;