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