Program = *l "" + Expression_List - *l "" EOF.
Expression : LetExp
| CNF .
LetExp = *l "" + "" Literal "" + Expression - *l "" -extends Expression.
CNF = *l "" + Clause_List - *l [*l "" ClauseCount ""] [*l "" ClauseCount ""] "" extends Expression.
Clause = *l "" Weight Literals "".
Literals = *l "" + Literal_List - *l "".
Literal : Pos
| Neg .
Pos = "" Variable "" extends Literal.
Neg = "" Variable "" extends Literal.
Variable = Ident.
Weight = "" int "".
ClauseCount = "" int "".
Main = String.
notparsed visitor PrintVisitor = int boolean extends UniversalVisitor.
notparsed visitor CopyVisitor = derived Object extends UniversalVisitor.
notparsed visitor SubgraphVisitor = boolean init {{ true }} extends UniversalVisitor.
notparsed visitor EqualVisitor = boolean init {{ true }} extends UniversalVisitor.
notparsed visitor DisplayVisitor = int extends UniversalVisitor.
notparsed visitor TraceVisitor = int extends UniversalVisitor.
notparsed visitor UniversalVisitor : .
Expression_List = [ Nonempty_Expression_List].
Clause_List = [ Nonempty_Clause_List].
Literal_List = [ Nonempty_Literal_List].
Nonempty_Expression_List = Expression [ Nonempty_Expression_List].
Nonempty_Clause_List = Clause [ Nonempty_Clause_List].
Nonempty_Literal_List = Literal [ Nonempty_Literal_List].