BNF for TermWare1.jj

NON-TERMINALS

readStatement ::= ( readTerm ";" | readTerm <EOF> | <EOF> )
readTerm ::= readLetTerm
| readTermExpression0
readLetTerm ::= "let" readTerm
readTermExpression0 ::= readTermExpression1 ( ( "[" readTermExpression1 "]" )? <LEFT_ARROW> readTermExpression1 ( "[" readTermExpression1 "]" )? ( ( <BIT_OR> "[" readTermExpression1 "]" <LEFT_ARROW> readTermExpression1 ( "[" readTermExpression1 "]" )? ) )* ( "!->" readTermExpression1 ( "[" readTermExpression1 "]" )? )? )?
readTermExpression1 ::= readTermExpression2 ( ( <QUESTION> readTermExpression1 <TWO_DOTS> readTermExpression1 ) )?
readTermExpression2 ::= readTermExpression3 ( ( <LOGICAL_OR> readTermExpression2 ) )?
readTermExpression3 ::= readTermExpression4 ( <LOGICAL_AND> readTermExpression3 )?
readTermExpression4 ::= readTermExpression5
readTermExpression5 ::= readTermExpression6 ( <BIT_AND> readTermExpression5 )?
readTermExpression6 ::= readTermExpression7 ( ( <EQ> | <NEQ> ) readTermExpression7 )?
readTermExpression7 ::= readTermExpression8 ( ( <LESS> | <GREATER> | <LESS_EQ> | <GREATER_EQ> | <EQ_GREATER> | <IN> ) readTermExpression8 )?
readTermExpression8 ::= readTermExpression9 ( ( ( <LEFT_SHIFT> | <RIGHT_SHIFT> ) readTermExpression9 ) )*
readTermExpression9 ::= readTermExpression10 ( ( ( <PLUS> | <MINUS> ) readTermExpression10 ) )*
readTermExpression10 ::= readTermExpression11 ( ( ( <MULTIPLY> | <DIVIDE> | <MOD> ) readTermExpression11 ) )*
readTermExpression11 ::= ( <PLUS> | <MINUS> | <LOGICAL_NOT> | <BIT_NEGATE> ) readTermExpression10
| readTermExpression12
readTermExpression12 ::= ( <DOT> )? readTermExpression13 ( ( <DOT> ( readTermExpression13 ) ) )*
readTermExpression13 ::= readTermExpressionLast
readTermExpressionLast ::= readScopedName ( readTermArgs )?
| readPrimitive
| readX
| "(" readTerm ( <COMMA> readTerm )* ")"
| "{" readTerm ( readPatternTail )? "}"
| "{" "}"
| "[" readTerm ( readPatternTail )? "]"
| "[" "]"
readScopedName ::= <IDENT> ( ( <TWO_TWO_DOTS> <IDENT> ) )*
readPatternTail ::= <TWO_DOTS> readTerm
| <COMMA> readTermCommaList
readX ::= <X_LITERAL>
readTermArgs ::= "(" readTermCommaList ")"
readTermCommaList ::= ( readTerm ( <COMMA> readTerm )* )?
readPrimitive ::= readString
| readInteger
| readDouble
| readBoolean
| readNIL
readString ::= <STRING_LITERAL>
readInteger ::= <INTEGER_LITERAL>
readDouble ::= <DOUBLE_LITERAL>
readBoolean ::= <TRUE>
| <FALSE>
readNIL ::= <NIL>