<<Operator TypeSpec> ::= <Prototype Operator TypeSpec>|<Meta Operator TypeSpec><Prototype Operator TypeSpec> ::= Cop:Proto::Struct:n<MP TypeSpec>n| Cop:Proto::RecStruct:n<MP TypeSpec>n| Cop:Proto::Union:n<MP TypeSpec>n| Cop:Proto::RecUnion:n<MP TypeSpec>n<Meta Operator TypeSpec> ::= Mop:Any::Any<Prototype AP>| Cmop:Any::Any<Prototype AP>where the index n to <MP TypeSpec> specifies n arguments, each a prototype tree. The structuring operators
MP_CopProtoStruct
,
MP_CopProtoRecStruct
, MP_CopProtoUnion
, and
MP_CopProtoRecUnion
used in Prototype Operator TypeSpecs are
defined in the prototype dictionary (MP_ProtoDict
).
These are the only operators which may appear
in a syntactically valid prototype tree. That is,
a valid prototype may only consist of (common)
meta operators, (common) meta types, and these four common operators
(in addition to annotation packets attached to these nodes). In
particular, other operators defined in the prototype dictionary,
such as Cop:Proto::Array (MP_CopProtoArray
) or
Cop:Proto::Pointer (MP_CopProtoPointer
), are
only provided as convenient means for mapping data structures to
prototyped data trees and play no special
role within prototype trees.