process ::=decl+
decl ::=event_declprotocol_declvariable_declproperty_declrule_decl
event_decl ::=event(event_name(,event_name);)+
protocol_decl ::=protocol(protocol;;)+
protocol ::=anyevent_nameprotocol;protocol
protocol+protocolprotocol*protocol?(protocol)
variable_decl ::=variable(var_name(,var_name)(:type)?;)+
type ::=propnat(nat_num)
property_decl ::=property(ldl_formula;)+
rule_decl ::=rulerule+
rule ::=except?onevent_name(,event_name)({code})?
  (whencontext({code})?)?
  action+
context ::=proposition<ldl_path>context
action ::=ensureldl_formula({code})?
raiseevent_name(+event_name)({code})?
do{code}
preserveproposition