NON-TERMINALS
expression ::= orCondition <EOF>
orCondition ::= andCondition ( "or" andCondition )*
andCondition ::= notCondition ( "and" notCondition )*
notCondition ::= ( "not" | "!" ) simpleCondition
| simpleCondition
simpleCondition ::= scalarExpression ( simpleNotCondition |
( "=" | "==" ) scalarExpression |
( "!=" | "<>" ) scalarExpression |
"<=" scalarExpression |
"<" scalarExpression |
">" scalarExpression |
">=" scalarExpression |
"like" scalarExpression |
"likeIgnoreCase" scalarExpression |
"in" ( namedParameter | "(" scalarCommaList ")" )
| "between" scalarExpression "and" scalarExpression )?
simpleNotCondition ::= ( "not" | "!" ) ( "like" scalarExpression |
"likeIgnoreCase" scalarExpression |
"in" ( namedParameter | "(" scalarCommaList ")" ) |
"between" scalarExpression "and" scalarExpression )
scalarCommaList ::= ( scalarConstExpression ( "," scalarConstExpression )* )
scalarExpression ::= scalarNumericExpression
| <SINGLE_QUOTED_STRING>
| <DOUBLE_QUOTED_STRING>
| <NULL>
scalarConstExpression ::= <SINGLE_QUOTED_STRING>
| <DOUBLE_QUOTED_STRING>
| namedParameter
| <INT_LITERAL>
| <FLOAT_LITERAL>
scalarNumericExpression ::= multiplySubtractExp ( "+" multiplySubtractExp | "-" multiplySubtractExp )*
multiplySubtractExp ::= numericTerm ( "*" numericTerm | "/" numericTerm )*
numericTerm ::= ( "+" )? numericPrimary
| "-" numericPrimary
numericPrimary ::= "(" orCondition ")"
| pathExpression
| namedParameter
| <INT_LITERAL>
| <FLOAT_LITERAL>
namedParameter ::= "$" <PROPERTY_PATH>
pathExpression ::= ( <PROPERTY_PATH> | "obj:" <PROPERTY_PATH> | "db:" <PROPERTY_PATH> )