LMCExp == ( Action | deadlock | lmc_true | lmc_false | ag(LMCExp) | eg(LMCExp) | ax(LMCExp) | ex(LMCExp) | af(LMCExp) | ef(LMCExp) | all(UntilPlus) | some(Until) | implies(LMCExp, LMCExp) | lmc_or(LMCExp, LMCExp) | lmc_and(LMCExp, LMCExp) | lmc_not(LMCExp) ) Until == until(LMCExp, LMCExp) UntilPlus == ( Until | before(LMCExp, LMCExp) | after(LMCExp, LMCExp) ) Action = action(ActGate, EventL, GuardL) GuardL = [Guard, Guard, ...] Guard = ADT ActGate = _ /* Meaning any gate */ exit /* Exits are actions on gate exit... */ Gate EventL = [~] /* Meaning any list of events */ [Event, Event, ...] [Event, Event, ..., ~] Event = out(ADT) in(SymVal) ADT = op(ADT, ADT, ...) /* Where op is an internal operator. */ SymVal SymVal = sym(*) /* Will match any value without binding anything. */ sym(Name) /* Unspecified sort. */ sym(of(Name, Sort)) Name = A string without () and other funny things such as []. Sort = The internal sort.