27 lines
626 B
ANTLR
27 lines
626 B
ANTLR
grammar Yql;
|
|
|
|
query: expr;
|
|
|
|
expr: booleanExpr #boolExpr
|
|
| expr 'and' expr #andExpr
|
|
| expr 'or' expr #orExpr
|
|
| '(' expr ')' #embbedExpr
|
|
;
|
|
|
|
booleanExpr: leftexpr op=('='|'!='|'>'|'<'|'>='|'<=') value
|
|
| leftexpr op=('in'|'!in'|'∩'|'!∩') '(' value (',' value)* ')'
|
|
;
|
|
leftexpr: FIELDNAME (('.' FUNC '()')+)?
|
|
;
|
|
value: STRING | INT | FLOAT | TRUE | FALSE;
|
|
|
|
TRUE: 'true';
|
|
FALSE: 'false';
|
|
FUNC: 'count'|'sum'|'avg'|'max'|'min';
|
|
FIELDNAME: ([a-zA-Z]|'_')+;
|
|
STRING: '\'' .*? '\'';
|
|
fragment DIGIT: [0-9];
|
|
INT: ('+'|'-')? DIGIT+;
|
|
FLOAT: ('+'|'-')? DIGIT+ '.' DIGIT*;
|
|
WS: [ \t\r\n]+ -> skip;
|