import edu.neu.ccs.demeter.dj.* ; import java.util.*; CSP = List(ConstraintSatisfactionProblem) EOF. ConstraintSatisfactionProblem = "preamble" Preamble List(Constraint). Constraint : Satisfied | Unsatisfied | ProperConstraint common [Weight]. Preamble = "numVariables" int "numConstraints" int "relations" List(RelationName) "end". // Meaning of relations is predefined ProperConstraint = RelationName "(" List(Literal) ")". Literal : Pos | Neg common Variable. Pos = . Neg = "!". Satisfied = "sat". Unsatisfied = "unsat". Variable = Ident. RelationName = Ident. Weight = int. List(S) ~ {S}. Main = . // semantic checks: // cg.gather(csp, "from CSP to Variable") viewed as set . size() = numVariables // length of constraints = numConstraints // cg.gather(csp, "from CSP via Preamble to RelationName") viewed as set same set as // cg.gather(csp, "from CSP via Constraint to RelationName") viewed as set