# BNF for ExpressionParser.jj

## 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> )