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].