blob: 476f54187f753251e9a3eec12439b2319ae025b5 [file] [log] [blame]
condition
: orExpression ( '?' orExpression ':' orExpression )?
;
orExpression : andExpression ( '||' andExpression )* ;
andExpression : binaryExpression ( '&&' binaryExpression )* ;
binaryExpression : notExpression ( op notExpression )?;
op : '=' | '!=' | '>' | '>=' | '<' | '<=' | '~=' ;
notExpression
: '!' notExpression
| collectionExpression
;
collectionExpression
: memberExpression ( '.' collectionFunction )*
;
memberExpression : constructor ( ( '.' ID ) | ( '[' memberExpression ']' ) )* ;
constructor
: ( filter | version | range | class ) '(' unaryExpression ')'
| set '(' ( collectionExpression ( ',' collectionExpression )* )? ')'
| unaryExpression
;
collectionFunction
: ( select | reject | exists | all | traverse ) '(' lambdaDefinition ')'
| limit '(' memberExpression ')'
| unique '(' memberExpression? ')'
| latest '(' lambdaDefinition? ')'
;
lambdaDefinition
: initializer ( ',' initializer )* ( ',' '{' lambda '}' )?
| '{' lambda '}'
| lambda
;
initializer
: '_'
| condition
;
lambda
: ( ID ( ',' ID )* )? '|' condition
;
unaryExpression
: '(' condition ')'
| '[' condition ( ',' condition )* ']' // #array construct
| '/' regexpPattern '/'
| STRING
| INT
| parameter
| 'null'
| 'true'
| 'false'
| ID
;
parameter
: '$' INT | ID
;