import java.util.*; *public* CSP = List(Comment) Preamble List(Constraint) . *public* Comment = "c" Line . *public* Preamble = "p" int int . *public* Constraint = Relation [Weight] ":" List(Variable) *s "0" . // relation is 0 to 255 inclusive *public* Relation = int . // weight is 1 if not specified *public* Weight = int . // variable is between 1 and numVaraibles inclusive *public* Variable = int . *public* List(S) ~ {S}. *public* Main = . // Assignment of true/false values to variables *public* Assignment = List(Literal). *public* Literal : T | F common Variable *s. *public* T = . *public* F = "!". // state transition history *public* History = State *l List(TState). *public* TState = *s "=>" *s Transition State *l. *public* Transition : UnitPropagation | Restart | Decide | Finale | Update | SSR *s. *public* State = Assignment "||" CSP "||" List(Literal) "||" double "||" Assignment. *public* UnitPropagation = "UP". *public* Restart = "R". *public* Decide = "D" Literal. *public* Finale = "F". *public* Update = "U". *public* SSR = "SSR". // container for unit testing functions *public* Tests = .