initial-values ::= initial-value ... initial-value ::= object-name type-name desired-values ::= desired-value ... desired-value ::= variable type-name initial-state ::= pattern-assignment ... desired-state ::= pattern-assignment ... pattern-assignment ::= pattern = value pattern ::= pattern-element ... pattern-element ::= name | number | io-variable value ::= pattern-element io-variable ::= a variable that appears as the variable in an input, output, or desired-value variable ::= ?name type-name ::= name name = a letter followed by a possibly empty sequence of letters and digits with _ as a separator service-descriptions ::= service-description ... service-description ::= name-clause service-clause... name-clause ::= :name name service-clause ::= :in input, ... | :out output, ... | :conditions pattern-assignment, ... | :effects pattern-assignment, ... input ::= variable type-name output ::= variable type-name (The comma separators in a service-clause are optional.) (Service-clauses for a given service can appear in any order but at most once per service.)