刘光辉
4 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
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
grammar ElnFormula;
 
parse          : expression EOF ;
expression     : logicalOr ;
logicalOr      : logicalAnd (OR logicalAnd)* ;
logicalAnd     : equality (AND equality)* ;
equality       : comparison ((EQ | NE) comparison)* ;
comparison     : additive ((GT | GE | LT | LE) additive)* ;
additive       : multiplicative ((PLUS | MINUS) multiplicative)* ;
multiplicative : unary ((STAR | SLASH | PERCENT) unary)* ;
unary          : (PLUS | MINUS | NOT) unary | power ;
power          : primary (CARET unary)? ;
primary        : DECIMAL
               | STRING
               | TRUE
               | FALSE
               | NULL
               | FUNCTION LPAREN arguments? RPAREN
               | IDENTIFIER
               | LPAREN expression RPAREN
               ;
arguments      : expression (COMMA expression)* ;
 
TRUE       : 'true';
FALSE      : 'false';
NULL       : 'null';
OR         : '||';
AND        : '&&';
EQ         : '==';
NE         : '!=';
GE         : '>=';
LE         : '<=';
GT         : '>';
LT         : '<';
PLUS       : '+';
MINUS      : '-';
STAR       : '*';
SLASH      : '/';
PERCENT    : '%';
CARET      : '^';
NOT        : '!';
LPAREN     : '(';
RPAREN     : ')';
COMMA      : ',';
DECIMAL    : [0-9]+ ('.' [0-9]+)?;
STRING     : '"' ('\\' ["\\nrt] | ~["\\\r\n])* '"';
FUNCTION   : [A-Z] [A-Z0-9_]*;
IDENTIFIER : [a-z] [a-z0-9_]*;
WS         : [ \t\r\n]+ -> skip;