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