BNF for LTermParser.jj

NON-TERMINALS

parse ::= ( ClauseSeq <EOF> )
ClauseBlock ::= ( ( ( ForallQuantifier )? <AT> StructTerm )? SimpleClauseBlock )
SimpleClauseBlock ::= ( "{" ClauseSeq "}" )
ClauseSeq ::= ( Clause ( ClauseSeq )? )
Clause ::= ( ClauseBlock | ( ( ForallQuantifier )? Term <EOC> ) )
ForallQuantifier ::= ( <FORALL> IdTermSeq )
Term ::= Op1200Term
Op1200Term ::= ( ( ( Unop1200 )? Op1100Term ) ( Binop1200 Op1200Term )? )
Op1100Term ::= ( Op1000Term ( Binop1100 Op1100Term )? )
Op1000Term ::= ( Op900Term ( Binop1000 Op1000Term )? )
Op900Term ::= ( ( Unop900 Op900Term ) | ( Quantop900 IdTermSeq Op900Term ) | Binop900Term )
Binop900Term ::= ( Op700Term ( Binop900 Binop900Term )? )
Op700Term ::= ( Op680Term ( Binop700 Op700Term )? )
Op680Term ::= ( Op661Term ( Binop680 Op680Term )? )
Op661Term ::= ( Op500Term ( Binop661 Op661Term )? )
Op500Term ::= ( ( ( Unop500 )? Op400Term ) ( Binop500 Op500Term )? )
Op400Term ::= ( StructTerm ( Binop400 Op400Term )? )
StructTerm ::= ( UnitTerm ( ArgList | SBArgList )* )
UnitTerm ::= ( IdTerm | Integer | "(" Term ")" | "<" Term ">" | SimpleClauseBlock )
IdTerm ::= ( ( Variable | Symbol ) ( <COLON> IdTerm )? )
Variable ::= ( "?" <SYMBOL> )
Symbol ::= ( <SYMBOL> | <Q_SYMBOL> | <DQ_SYMBOL> )
Integer ::= ( <INTEGER_LITERAL> )
ArgList ::= ( "(" TermSeq ")" )
SBArgList ::= ( "[" TermSeq "]" )
TermSeq ::= ( Op900Term ( ( <COMMA> | <SEMICOLON> ) Op900Term )* )
IdTermSeq ::= ( IdTerm ( <COMMA> IdTerm )* )
Unop1200 ::= ( <IMPLIEDBY> )
Binop1200 ::= ( <IMPLIEDBY> | <EQUIV> | <ASSIGN> )
Binop1100 ::= ( <SEMICOLON> | <OR> )
Binop1000 ::= ( <COMMA> | <AND> )
Quantop900 ::= ( <FORALL> | <EXISTS> )
Unop900 ::= ( <NOT> | <NEG> )
Binop900 ::= ( <IMPLIES> )
Binop700 ::= ( <EQUALS> | <IS> )
Binop680 ::= ( <AT> )
Binop661 ::= ( <DOT> )
Unop500 ::= ( <PLUS> | <MINUS> )
Binop500 ::= ( <PLUS> | <MINUS> )
Binop400 ::= ( <TIMES> | <BY> | <INTERSECT> | <UNION> | <DIFF> )