BNF for ExpressionParser.jj

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