# BNF for ELParser.jj

## NON-TERMINALS

CompositeExpression | ::= | ( DeferredExpression | DynamicExpression | LiteralExpression )* <EOF>
LiteralExpression | ::= | <LITERAL_EXPRESSION>
DeferredExpression | ::= | <START_DEFERRED_EXPRESSION> Expression <END_EXPRESSION>
DynamicExpression | ::= | <START_DYNAMIC_EXPRESSION> Expression <END_EXPRESSION>
Expression | ::= | Choice
Choice | ::= | Or ( <QUESTIONMARK> Choice <COLON> Choice )*
Or | ::= | And ( ( <OR0> | <OR1> ) And )*
And | ::= | Equality ( ( <AND0> | <AND1> ) Equality )*
Equality | ::= | Compare ( ( ( <EQ0> | <EQ1> ) Compare ) | ( ( <NE0> | <NE1> ) Compare ) )*
Compare | ::= | Math ( ( ( <LT0> | <LT1> ) Math ) | ( ( <GT0> | <GT1> ) Math ) | ( ( <LE0> | <LE1> ) Math ) | ( ( <GE0> | <GE1> ) Math ) )*
Math | ::= | Multiplication ( ( <PLUS> Multiplication ) | ( <MINUS> Multiplication ) )*
Multiplication | ::= | Unary ( ( <MULT> Unary ) | ( <DIV> Unary ) | ( ( <MOD0> | <MOD1> ) Unary ) )*
Unary | ::= | <MINUS> Unary
| | | ( <NOT0> | <NOT1> ) Unary
| | | <EMPTY> Unary
| | | Value
Value | ::= | ( ValuePrefix ( ValueSuffix )* )
ValuePrefix | ::= | Literal
| | | NonLiteral
ValueSuffix | ::= | DotSuffix
| | | BracketSuffix
DotSuffix | ::= | <DOT> <IDENTIFIER>
BracketSuffix | ::= | <LBRACK> Expression <RBRACK>
NonLiteral | ::= | <LPAREN> Expression <RPAREN>
| | | Function
| | | Identifier
Identifier | ::= | <IDENTIFIER>
Function | ::= | <IDENTIFIER> ( <FUNCTIONSUFFIX> )? <LPAREN> ( Expression ( <COMMA> Expression )* )? <RPAREN>
Literal | ::= | Boolean
| | | FloatingPoint
| | | Integer
| | | String
| | | Null
Boolean | ::= | <TRUE>
| | | <FALSE>
FloatingPoint | ::= | <FLOATING_POINT_LITERAL>
Integer | ::= | <INTEGER_LITERAL>
String | ::= | <STRING_LITERAL>
Null | ::= | <NULL>