typecons:
NonTerminal
Builds TypeExp;
for typecons.a ← interval
Build TypeExp.subrange[Subrange.unnamed[interval]];
for typecons.b ← Id interval
Build TypeExp.subrange[Subrange.named[TypeId.id[Id], interval]];
for typecons.c ← typeid interval
Build TypeExp.subrange[Subrange.named[typeid, interval]];
for typecons.enum ← dependent "{" elementlist "}"
Build TypeExp.enum[dependent, elementlist];
for typecons.record ← dependent monitored "
RECORD" reclist
Build TypeExp.record[dependent, monitored, reclist];
for typecons.pointer ← ordered base pointertype
Build TypeExp.pointer[ordered, base, pointertype];
for typecons.var ← "
VAR" typeexp
Build TypeExp.var[typeexp];
for typecons.ref ← "
REF" readonly typeexp
Build TypeExp.ref[readonly, typeexp];
for typecons.refany ← "
REF" readonly "
ANY"
Build TypeExp.refany[readonly];
for typecons.refunspecified ← "
REF"
Build TypeExp.refunspecified[];
for typecons.list ← "
LIST" "
OF" readonly typeexp
Build TypeExp.list[readonly, typeexp];
for typecons.array ← packed "
ARRAY" indextype "
OF" typeexp
Build TypeExp.array[packed, indextype, typeexp];
for typecons.descriptor ← "
DESCRIPTOR" "
FOR" readonly typeexp
Build TypeExp.descriptor[readonly, typeexp];
for typecons.transfer ← safe transfermode arguments
Build TypeExp.transfer[safe, transfermode, arguments];
for typecons.o ← Id "
RELATIVE" typeexp
Build TypeExp.relative[TypeId.id[Id], typeexp];
for typecons.p ← typeid "
RELATIVE" typeexp
Build TypeExp.relative[typeid, typeexp];
for typecons.zone ← heap "
ZONE"
Build TypeExp.zone[heap];
for typecons.long ← "
LONG" typeexp
Build TypeExp.long[typeexp];
for typecons.frame ← "
FRAME" "[" Id "]"
Build TypeExp.frame[Id];
for typecons.t ← Id "
PAINTED" typeexp
Build TypeExp.painted[TypeId.id[Id], typeexp];
for typecons.u ← typeid "
PAINTED" typeexp
Build TypeExp.painted[typeid, typeexp];
for typecons.typeapply ← typeappl
Build TypeExp.typeapply[typeappl];
transfermode:
NonTerminal
Builds TransferMode;
for transfermode.a ← "
PROCEDURE"
Build TransferMode.proc[];
for transfermode.b ← "
PROC"
Build TransferMode.proc[];
for transfermode.port ← "
PORT"
Build TransferMode.port[];
for transfermode.signal ← "
SIGNAL"
Build TransferMode.signal[];
for transfermode.error ← "
ERROR"
Build TransferMode.error[];
for transfermode.process ← "
PROCESS"
Build TransferMode.process[];
for transfermode.program ← "
PROGRAM"
Build TransferMode.program[];
elementlistP:
NonTerminal
Builds ElementList;
for elementlistP.a ← element
Build ElementList.more[ElementList.empty[[element, element)], element];
for elementlistP.b ← elementlistP "," element
Build ElementList.more[elementlistP, element];
typeappl:
NonTerminal
Builds TypeApply;
for typeappl.a ← typeappl "." Id
Build TypeApply.moreids[typeappl, Id];
for typeappl.b ← Id lengthP
Build TypeApply.one[TypeId.id[Id], lengthP];
for typeappl.c ← typeid lengthP
Build TypeApply.one[typeid, lengthP];
for typeappl.d ← typeappl lengthP
Build TypeApply.morelengths[typeappl, lengthP];
reclist:
NonTerminal
Builds RecList;
for reclist.a ← "[" "]"
Build RecList.empty[];
for reclist.b ← "
NULL"
Build RecList.empty[];
for reclist.c ← "[" pairlist "]"
Build RecList.pairlist[pairlist];
for reclist.d ← "[" typelist "]"
Build RecList.typelist[typelist];
for reclist.e ← "[" pairlist "," variantpair "]"
Build RecList.pairlist[PairList.many[pairlist, PairList.one[variantpair]]];
for reclist.f ← "[" variantpart default "]"
Build RecList.typelist[TypeList.one[TypeItem[variantpart, default]]];
for reclist.g ← "[" variantpair "]"
Build RecList.pairlist[PairList.one[variantpair]];
vcasehead:
NonTerminal
Builds Tag;
for vcasehead.ident ← ident public tagtype
Build Tag.ident[ident, public, tagtype];
for vcasehead.computed ← "
COMPUTED" tagtype
Build Tag.computed[tagtype];
for vcasehead.overlaid ← "
OVERLAID" tagtype
Build Tag.overlaid[tagtype];