For unit testing, we want to create GrammarMixin objects that are not schema components.
For unit testing, we want to create GrammarMixin objects that are not schema components. So we can't use a self-type here. Instead we define this abstract grammarContext.
Establish the invariant is that if a direct child member is an array element, the child will have been encapsulated as a sequence, so that arrays always live within sequences.
Establish the invariant is that if a direct child member is an array element, the child will have been encapsulated as a sequence, so that arrays always live within sequences.
Use when production has no guard, but you want to name the production anyway (for debug visibility perhaps).
Use when production has no guard, but you want to name the production anyway (for debug visibility perhaps).
Use when production has a guard predicate
Use when production has a guard predicate