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