# BNF for EC.jj

## NON-TERMINALS

expression | ::= | conditional ( <EOF> )
conditional | ::= | lor ( "?" conditional ":" conditional )?
lor | ::= | land ( <LOR> land )*
land | ::= | bor ( <LAND> bor )*
bor | ::= | bxor ( <OR> bxor )*
bxor | ::= | band ( <XOR> band )*
band | ::= | equality ( <AND> equality )*
equality | ::= | relation ( ( <EQ> | <NE> ) relation )*
relation | ::= | shift ( ( <LT> | <GE> | <GT> | <LE> ) shift )*
shift | ::= | sum ( ( <LS> | <RS> | <RUS> ) sum )*
sum | ::= | term ( ( <PLUS> | <MINUS> ) term )*
term | ::= | unary ( ( <MULTIPLY> | <DIVIDE> | <REMAINDER> ) unary )*
unary | ::= | ( <BWCOMPL> | <LOGCOMPL> | <MINUS> ) unary
| | | "(" <ID> ( "." <ID> )* ")" element
| | | element
element | ::= | <TRUE>
| | | <FALSE>
| | | ( ( literal | "(" conditional ")" | invocation ) ( <DOT> invocation )* )
invocation | ::= | <ID> ( "(" ( conditional ( "," conditional )* )? ")" )? ( "[" conditional "]" )*
literal | ::= | <INTEGER_LITERAL>
| | | <FLOATING_POINT_LITERAL>
| | | <CHARACTER_LITERAL>
| | | <STRING_LITERAL>