import edu.neu.ccs.demeter.dj.*; import java.util.*; Exps = CommaList(Exp) [*l "equations" CommaList(Equation)]. Exp : Simple | Compound | QuantifierCompound. Simple : SourceEdgeStepsTarget | Sequential. SourceEdgeStepsTarget : Forward | Backward | Later | UpOverDown common ClassName ["edge" EdgeName] [ Steps] ClassName. Forward = "->". Backward = "<-". Later = "->X<-". UpOverDown = "=>X<=". Sequential = "seq" ClassName CommaList(ClassName). Exists = "exists" CommaList(ClassName) *l Exp. Steps: Unlimited | Limited. // if steps is absent, the default meaning is unlimited Unlimited = "*". Limited = Integer. Compound = Op CommaList(Exp). Op : Join | Union. Join = "join". Union = "union". QuantifierCompound : Exists. Equation = *l Exp "=" *l Exp. ClassName = Ident. EdgeName = Ident. CommaList(S) ~ "(" *l + S {"," *l S *s} - *l ")" . Main = String.