Binder = List(Clause) EOF. Clause = Atom [":-" CList(Atom)] ".". Atom = ["says" Term ":"] Constant [ PCList(Term) ]. Term : Constant | Variable. Constant : IdentConstant | StringConstant. IdentConstant = "#" Ident. // start with lower case StringConstant = String. Variable : VariableName | UIdent. VariableName = Ident. // start with upper case UIdent = "_" Ident. List(S) ~ {S}. PCList(S) ~ "(" S {"," S} ")". CList(S) ~ S {"," S} .