-- SaffronCentral.OneCasaba -- Copyright Ó 1987 by Xerox Corporation. All rights reserved. -- Generated by hederman.pa at August 17, 1987 3:57:32 pm PDT -- using ThreeCasabaFour [1.2] of June 1, 1987 6:00:00 pm PDT Begin { "ABS" "ALL" "AND" "ANY" "APPLY" "ARRAY" "BASE" "BEGIN" "BITS" "BROADCAST" "BYTES" "CEDAR" "CHECKED" "CODE" "COMPUTED" "CONS" "CONTINUE" "DECREASING" "DEFINITIONS" "DEPENDENT" "DESCRIPTOR" "DIRECTORY" "DO" "ELSE" "ENABLE" "END" "ENDCASE" "ENDLOOP" "ENTRY" "ERROR" "EXIT" "EXITS" "EXPORTS" "FINISHED" "FIRST" "FOR" "FORK" "FRAME" "FREE" "FROM" "GO" "GOTO" "IF" "IMPORTS" "IN" "INLINE" "INTERNAL" "ISTYPE" "JOIN" "LAST" "LENGTH" "LIST" "LOCKS" "LONG" "LOOP" "LOOPHOLE" "MACHINE" "MAX" "MIN" "MOD" "MONITOR" "MONITORED" "NARROW" "NEW" "NIL" "NOT" "NOTIFY" "NULL" "OF" "OPEN" "OR" "ORD" "ORDERED" "OVERLAID" "PACKED" "PAINTED" "POINTER" "PORT" "PRED" "PRIVATE" "PROC" "PROCEDURE" "PROCESS" "PROGRAM" "PUBLIC" "READONLY" "RECORD" "REF" "REJECT" "RELATIVE" "REPEAT" "RESTART" "RESUME" "RETRY" "RETURN" "RETURNS" "SAFE" "SELECT" "SEQUENCE" "SHARES" "SIGNAL" "SIZE" "START" "STATE" "STOP" "SUCC" "THEN" "THROUGH" "TO" "TRANSFER" "TRASH" "TRUSTED" "TYPE" "UNCHECKED" "UNCOUNTED" "UNITS" "UNSAFE" "UNTIL" "USING" "VAL" "VAR" "WAIT" "WHILE" "WITH" "WORDS" "ZONE" "!" "#" "(" ")" "*" "+" "," "-" "." ".." "/" ":" ";" "<" "<=" "=" "=>" ">" ">=" "@" "[" "]" "^" "_" "{" "|" "}" "~" }: SimpleTokens; maingoal: NonTerminal; top: NonTerminal; goal: NonTerminal; module: NonTerminal; directory: NonTerminal; includelist: NonTerminal; includeitem: NonTerminal; using: NonTerminal; defbody: NonTerminal; defhead: NonTerminal; definitions: NonTerminal; cedar: NonTerminal; proghead: NonTerminal; resident: NonTerminal; class: NonTerminal; interface: NonTerminal; exports: NonTerminal; binditem: NonTerminal; caselabel: NonTerminal; caselabelP: NonTerminal; casetest: NonTerminal; block: NonTerminal; exits: NonTerminal; public: NonTerminal; bounds: NonTerminal; checked: NonTerminal; default: NonTerminal; positionP: NonTerminal; optbits: NonTerminal; sum: NonTerminal; product: NonTerminal; multop: NonTerminal; factor: NonTerminal; addop: NonTerminal; readonly: NonTerminal; catchany: NonTerminal; interval: NonTerminal; exp: NonTerminal; caseexplist: NonTerminal; caseexplistP: NonTerminal; caseexpitem: NonTerminal; transferop: NonTerminal; disjunct: NonTerminal; conjunct: NonTerminal; negation: NonTerminal; relation: NonTerminal; catchlist: NonTerminal; catchhead: NonTerminal; ident: NonTerminal; typeop: NonTerminal; idlist: NonTerminal; idlistP: NonTerminal; arguments: NonTerminal; arglist: NonTerminal; returnlist: NonTerminal; fieldlist: NonTerminal; typeexp: NonTerminal; num: NonTerminal; lhs: NonTerminal; qualifier: NonTerminal; exitlist: NonTerminal; exitlistP: NonTerminal; exititem: NonTerminal; optexp: NonTerminal; catchcase: NonTerminal; lhslist: NonTerminal; initialization: NonTerminal; initvalue: NonTerminal; procaccess: NonTerminal; inline: NonTerminal; codelist: NonTerminal; range: NonTerminal; trash: NonTerminal; defaultopt: NonTerminal; orderlist: NonTerminal; trusted: NonTerminal; optrelation: NonTerminal; relationtail: NonTerminal; relop: NonTerminal; shares: NonTerminal; statement: NonTerminal; balstmt: NonTerminal; basicstmt: NonTerminal; forclause: NonTerminal; controlid: NonTerminal; direction: NonTerminal; doexit: NonTerminal; transfer: NonTerminal; dotest: NonTerminal; optargs: NonTerminal; free: NonTerminal; casestmtlist: NonTerminal; casestmtlistP: NonTerminal; casestmtitem: NonTerminal; declist: NonTerminal; declaration: NonTerminal; entry: NonTerminal; optsize: NonTerminal; primary: NonTerminal; new: NonTerminal; cons: NonTerminal; listcons: NonTerminal; desclist: NonTerminal; optcatch: NonTerminal; identlist: NonTerminal; identlistP: NonTerminal; prefixop: NonTerminal; typecons: NonTerminal; dependent: NonTerminal; monitored: NonTerminal; ordered: NonTerminal; base: NonTerminal; pointertype: NonTerminal; pointerprefix: NonTerminal; indextype: NonTerminal; transfermode: NonTerminal; elementlist: NonTerminal; elementlistP: NonTerminal; element: NonTerminal; heap: NonTerminal; typeappl: NonTerminal; lengthP: NonTerminal; reclist: NonTerminal; variantpair: NonTerminal; variantpart: NonTerminal; vcasehead: NonTerminal; tagtype: NonTerminal; variantlist: NonTerminal; variantitem: NonTerminal; packed: NonTerminal; imports: NonTerminal; opttype: NonTerminal; typelist: NonTerminal; modulelist: NonTerminal; moduleitem: NonTerminal; tilde: NonTerminal; pairlist: NonTerminal; pairitem: NonTerminal; typeid: NonTerminal; typeidP: NonTerminal; explist: NonTerminal; keylist: NonTerminal; keyitem: NonTerminal; locks: NonTerminal; lambda: NonTerminal; open: NonTerminal; bindlist: NonTerminal; casehead: NonTerminal; scope: NonTerminal; enables: NonTerminal; statementlist: NonTerminal; statementlistP: NonTerminal; safe: NonTerminal; Decimalnum: GenericToken = "tokenDECIMAL" ; Octalnum: GenericToken = "tokenOCTAL" ; Hexnum: GenericToken = "tokenHEX" ; Id: GenericToken = "tokenID" ; String: GenericToken = "tokenROPE" ; Flnum: GenericToken = "tokenREAL" ; Char: GenericToken = "tokenCHAR" ; Atom: GenericToken = "tokenATOM" ; maingoal _ top ; top.modulep _ goal ; goal.a _ module "." ; goal.b _ module ".." ; module.impl _ directory identlist cedar proghead trusted checked block ; module.def _ directory identlist cedar defhead defbody ; directory.a _ "DIRECTORY" ";" ; directory.b _ "DIRECTORY" includelist ";" ; directory.c _ ; includelist.a _ includeitem ; includelist.b _ includelist "," includeitem ; includeitem.a _ Id ":" "FROM" String using ; includeitem.b _ Id ":" "TYPE" using ; includeitem.c _ Id using ; includeitem.d _ Id ":" "TYPE" Id using ; using.nothing _ "USING" "[" "]" ; using.restricted _ "USING" "[" idlist "]" ; using.unrestricted _ ; defbody.a _ "BEGIN" open declist "END" ; defbody.b _ "BEGIN" open declist ";" "END" ; defbody.c _ "{" open declist "}" ; defbody.d _ "{" open declist ";" "}" ; defhead _ definitions locks imports shares tilde public ; definitions _ "DEFINITIONS" ; cedar.yes _ "CEDAR" ; cedar.no _ ; proghead _ resident safe class arguments locks interface tilde public ; resident _ ; class.program _ "PROGRAM" ; class.monitor _ "MONITOR" ; interface _ imports exports shares ; exports.a _ "EXPORTS" ; exports.b _ "EXPORTS" modulelist ; exports.c _ ; binditem.a _ exp ; binditem.b _ Id ":" exp ; binditem.c _ Id "~" "~" exp ; caselabel.type _ ident typeexp ; caselabel.test _ caselabelP ; caselabelP.one _ casetest ; caselabelP.more _ caselabelP "," casetest ; casetest.a _ optrelation ; casetest.b _ exp ; block.a _ "BEGIN" scope exits "END" ; block.b _ "{" scope exits "}" ; exits.list _ "EXITS" exitlist ; exits.empty _ ; public.public _ "PUBLIC" ; public.private _ "PRIVATE" ; public.empty _ ; bounds _ exp ".." exp ; checked.empty _ ; checked.checked _ "CHECKED" ; checked.trusted _ "TRUSTED" ; checked.unchecked _ "UNCHECKED" ; default.a _ "_" defaultopt ; default.empty _ ; positionP _ "(" exp optbits ")" ; optbits.present _ ":" bounds ; optbits.absent _ ; sum.sum _ sum addop product ; sum.product _ product ; product.product _ product multop factor ; product.factor _ factor ; multop.times _ "*" ; multop.divide _ "/" ; multop.mod _ "MOD" ; factor.unarysum _ addop primary ; factor.primary _ primary ; addop.plus _ "+" ; addop.minus _ "-" ; readonly.yes _ "READONLY" ; readonly.no _ ; catchany _ "ANY" "=>" statement ; interval.cc _ "[" bounds "]" ; interval.oc _ "(" bounds "]" ; interval.co _ "[" bounds ")" ; interval.oo _ "(" bounds ")" ; exp.ifthenelse _ "IF" exp "THEN" exp "ELSE" exp ; exp.select _ casehead caseexplist "ENDCASE" "=>" exp ; exp.assign _ lhs "_" exp ; exp.multiassign _ "[" explist "]" "_" exp ; exp.error _ "ERROR" ; exp.transfer _ transferop lhs ; exp.disjunct _ disjunct ; caseexplist.empty _ ; caseexplist.b _ caseexplistP ; caseexplist.c _ caseexplistP "," ; caseexplistP.a _ caseexpitem ; caseexplistP.b _ caseexplistP "," caseexpitem ; caseexpitem _ caselabel "=>" exp ; transferop.signal _ "SIGNAL" ; transferop.error _ "ERROR" ; transferop.start _ "START" ; transferop.join _ "JOIN" ; transferop.new _ "NEW" ; transferop.fork _ "FORK" ; disjunct.or _ disjunct "OR" conjunct ; disjunct.conjunct _ conjunct ; conjunct.and _ conjunct "AND" negation ; conjunct.negation _ negation ; negation.a _ "~" relation ; negation.b _ "NOT" relation ; negation.relation _ relation ; relation.relation _ sum optrelation ; relation.sum _ sum ; catchlist.a _ catchhead catchcase ; catchlist.b _ catchhead ; catchlist.c _ catchhead catchany ; catchlist.d _ catchhead catchany ";" ; catchhead.empty _ ; catchhead.more _ catchhead catchcase ";" ; ident.idposition _ Id positionP ":" ; ident.id _ Id ":" ; typeop.code _ "CODE" ; typeop.first _ "FIRST" ; typeop.last _ "LAST" ; typeop.nil _ "NIL" ; idlist _ idlistP ; idlistP.one _ Id ; idlistP.more _ Id "," idlistP ; arguments _ arglist returnlist ; arglist.any _ "ANY" ; arglist.fieldlist _ fieldlist ; arglist.empty _ ; returnlist.any _ "RETURNS" "ANY" ; returnlist.fieldlist _ "RETURNS" fieldlist ; returnlist.empty _ ; fieldlist.empty _ "[" "]" ; fieldlist.pairlist _ "[" pairlist "]" ; fieldlist.typelist _ "[" typelist "]" ; typeexp.a _ Id ; typeexp.b _ typeid ; typeexp.c _ typecons ; num.decimal _ Decimalnum ; num.octal _ Octalnum ; num.hex _ Hexnum ; lhs.id _ Id ; lhs.num _ num ; lhs.string _ String ; lhs.flnum _ Flnum ; lhs.char _ Char ; lhs.atom _ Atom ; lhs.narrow _ "NARROW" "[" exp opttype optcatch "]" ; lhs.loophole _ "LOOPHOLE" "[" exp opttype "]" ; lhs.apply _ "APPLY" "[" exp "," exp optcatch "]" ; lhs.exp _ "(" exp ")" ; lhs.qualifier _ lhs qualifier ; qualifier.prefixop _ "." prefixop ; qualifier.typeop _ "." typeop ; qualifier.size _ "." "SIZE" ; qualifier.bits _ "." "BITS" ; qualifier.bytes _ "." "BYTES" ; qualifier.units _ "." "UNITS" ; qualifier.words _ "." "WORDS" ; qualifier.apply _ "[" explist optcatch "]" ; qualifier.select _ "." Id ; qualifier.indirect _ "^" ; exitlist.empty _ ; exitlist.b _ exitlistP ; exitlist.c _ exitlistP ";" ; exitlistP.a _ exititem ; exitlistP.b _ exitlistP ";" exititem ; exititem _ idlist "=>" statement ; optexp.trash _ trash ; optexp.exp _ exp ; optexp.empty _ ; catchcase _ lhslist "=>" statement ; lhslist.one _ lhs ; lhslist.more _ lhslist "," lhs ; initialization.empty _ ; initialization.assignment _ "_" initvalue ; initialization.binding _ tilde initvalue ; initvalue.block _ procaccess trusted checked inline block ; initvalue.code _ "CODE" ; initvalue.c _ procaccess trusted checked "MACHINE" "CODE" "BEGIN" codelist "END" ; initvalue.d _ procaccess trusted checked "MACHINE" "CODE" "{" codelist "}" ; initvalue.trash _ trash ; initvalue.exp _ exp ; procaccess _ ; inline.yes _ "INLINE" ; inline.no _ ; codelist.one _ orderlist ; codelist.more _ codelist ";" orderlist ; range.a _ Id ; range.b _ Id interval ; range.c _ typeid interval ; range.d _ interval ; range.e _ typeid ; trash.trash _ "TRASH" ; trash.null _ "NULL" ; defaultopt.getstrash _ trash ; defaultopt.getsexportrash _ exp "|" trash ; defaultopt.gets _ ; defaultopt.getsexp _ exp ; orderlist.one _ optexp ; orderlist.more _ orderlist "," optexp ; trusted _ ; optrelation.negative _ "NOT" relationtail ; optrelation.positive _ relationtail ; relationtail.range _ "IN" range ; relationtail.relop _ relop sum ; relop.eq _ "=" ; relop.ne _ "#" ; relop.lt _ "<" ; relop.le _ "<=" ; relop.gt _ ">" ; relop.ge _ ">=" ; shares.present _ "SHARES" idlist ; shares.absent _ ; statement.ifthen _ "IF" exp "THEN" statement ; statement.ifthenelse _ "IF" exp "THEN" balstmt "ELSE" statement ; statement.select _ casehead casestmtlist "ENDCASE" "=>" statement ; statement.basicstmt _ basicstmt ; balstmt.ifthenelse _ "IF" exp "THEN" balstmt "ELSE" balstmt ; balstmt.select _ casehead casestmtlist "ENDCASE" "=>" balstmt ; balstmt.basicstmt _ basicstmt ; basicstmt.exp _ lhs ; basicstmt.assign _ lhs "_" exp ; basicstmt.multiassign _ "[" explist "]" "_" exp ; basicstmt.block _ trusted checked block ; basicstmt.select _ casehead casestmtlist "ENDCASE" ; basicstmt.loopcontrol _ forclause dotest "DO" scope doexit "ENDLOOP" ; basicstmt.exit _ "EXIT" ; basicstmt.loop _ "LOOP" ; basicstmt.i _ "GOTO" Id ; basicstmt.j _ "GO" "TO" Id ; basicstmt.return _ "RETURN" optargs ; basicstmt.transfer _ transfer lhs ; basicstmt.free _ free "[" exp optcatch "]" ; basicstmt.wait _ "WAIT" lhs ; basicstmt.error _ "ERROR" ; basicstmt.stop _ "STOP" ; basicstmt.null _ "NULL" ; basicstmt.resume _ "RESUME" optargs ; basicstmt.reject _ "REJECT" ; basicstmt.continue _ "CONTINUE" ; basicstmt.retry _ "RETRY" ; basicstmt.getstate _ lhs "_" "STATE" ; basicstmt.setstate _ "STATE" "_" exp ; forclause.assignation _ "FOR" controlid "_" exp "," exp ; forclause.iteration _ "FOR" controlid direction "IN" range ; forclause.repetition _ "THROUGH" range ; forclause.empty _ ; controlid.new _ ident typeexp ; controlid.old _ Id ; direction.yes _ "DECREASING" ; direction.no _ ; doexit.a _ ; doexit.b _ "REPEAT" exitlist ; doexit.c _ "REPEAT" exitlist "FINISHED" "=>" statement ; doexit.d _ "REPEAT" exitlist "FINISHED" "=>" statement ";" ; transfer.signal _ "SIGNAL" ; transfer.error _ "ERROR" ; transfer.returnwitherror _ "RETURN" "WITH" "ERROR" ; transfer.start _ "START" ; transfer.restart _ "RESTART" ; transfer.join _ "JOIN" ; transfer.notify _ "NOTIFY" ; transfer.broadcast _ "BROADCAST" ; transfer.transferwith _ "TRANSFER" "WITH" ; transfer.returnwith _ "RETURN" "WITH" ; dotest.until _ "UNTIL" exp ; dotest.while _ "WHILE" exp ; dotest.empty _ ; optargs.explist _ "[" explist "]" ; optargs.empty _ ; optargs.exp _ lhs ; free.plain _ "FREE" ; free.zoned _ lhs "." "FREE" ; casestmtlist.empty _ ; casestmtlist.b _ casestmtlistP ; casestmtlist.c _ casestmtlistP ";" ; casestmtlistP.a _ casestmtitem ; casestmtlistP.b _ casestmtlistP ";" casestmtitem ; casestmtitem _ caselabel "=>" statement ; declist.one _ declaration ; declist.many _ declist ";" declaration ; declaration.value _ identlist public entry readonly typeexp initialization ; declaration.type _ identlist public "TYPE" tilde public typeexp default ; declaration.opaquetype _ identlist public "TYPE" optsize ; entry.entry _ "ENTRY" ; entry.internal _ "INTERNAL" ; entry.empty _ ; optsize.present _ "[" exp "]" ; optsize.absent _ ; primary.explist _ "[" explist "]" ; primary.prefixop _ prefixop "[" orderlist "]" ; primary.val _ "VAL" "[" orderlist "]" ; primary.all _ "ALL" "[" orderlist "]" ; primary.new _ new "[" typeexp initialization optcatch "]" ; primary.cons _ cons "[" explist optcatch "]" ; primary.listcons _ listcons "[" explist "]" ; primary.nil _ "NIL" ; primary.typeop _ typeop "[" typeexp "]" ; primary.size _ "SIZE" "[" typeexp "]" ; primary.size2 _ "SIZE" "[" typeexp "," exp "]" ; primary.bits _ "BITS" "[" typeexp "]" ; primary.bits2 _ "BITS" "[" typeexp "," exp "]" ; primary.bytes _ "BYTES" "[" typeexp "]" ; primary.bytes2 _ "BYTES" "[" typeexp "," exp "]" ; primary.units _ "UNITS" "[" typeexp "]" ; primary.units2 _ "UNITS" "[" typeexp "," exp "]" ; primary.words _ "WORDS" "[" typeexp "]" ; primary.words2 _ "WORDS" "[" typeexp "," exp "]" ; primary.istype _ "ISTYPE" "[" exp "," typeexp "]" ; primary.address _ "@" lhs ; primary.descriptor _ "DESCRIPTOR" "[" desclist "]" ; primary.lhs _ lhs ; new.plain _ "NEW" ; new.zoned _ lhs "." "NEW" ; cons.plain _ "CONS" ; cons.zoned _ lhs "." "CONS" ; listcons.plain _ "LIST" ; listcons.zoned _ lhs "." "LIST" ; desclist.explicit _ exp "," exp opttype ; desclist.default _ exp ; optcatch.catchlist _ "!" catchlist ; optcatch.empty _ ; identlist _ identlistP ; identlistP.a _ Id ":" ; identlistP.b _ Id positionP ":" ; identlistP.c _ Id "," identlistP ; identlistP.d _ Id positionP "," identlistP ; prefixop.long _ "LONG" ; prefixop.abs _ "ABS" ; prefixop.pred _ "PRED" ; prefixop.succ _ "SUCC" ; prefixop.ord _ "ORD" ; prefixop.min _ "MIN" ; prefixop.max _ "MAX" ; prefixop.base _ "BASE" ; prefixop.length _ "LENGTH" ; typecons.a _ interval ; typecons.b _ Id interval ; typecons.c _ typeid interval ; typecons.enum _ dependent "{" elementlist "}" ; typecons.record _ dependent monitored "RECORD" reclist ; typecons.pointer _ ordered base pointertype ; typecons.var _ "VAR" typeexp ; typecons.ref _ "REF" readonly typeexp ; typecons.refany _ "REF" readonly "ANY" ; typecons.refunspecified _ "REF" ; typecons.list _ "LIST" "OF" readonly typeexp ; typecons.array _ packed "ARRAY" indextype "OF" typeexp ; typecons.descriptor _ "DESCRIPTOR" "FOR" readonly typeexp ; typecons.transfer _ safe transfermode arguments ; typecons.o _ Id "RELATIVE" typeexp ; typecons.p _ typeid "RELATIVE" typeexp ; typecons.zone _ heap "ZONE" ; typecons.long _ "LONG" typeexp ; typecons.frame _ "FRAME" "[" Id "]" ; typecons.t _ Id "PAINTED" typeexp ; typecons.u _ typeid "PAINTED" typeexp ; typecons.typeapply _ typeappl ; dependent.yes _ "MACHINE" "DEPENDENT" ; dependent.no _ ; monitored.yes _ "MONITORED" ; monitored.no _ ; ordered.yes _ "ORDERED" ; ordered.no _ ; base.yes _ "BASE" ; base.no _ ; pointertype.unspecified _ pointerprefix ; pointertype.specified _ pointerprefix "TO" readonly typeexp ; pointerprefix.absent _ "POINTER" ; pointerprefix.present _ "POINTER" interval ; indextype.present _ typeexp ; indextype.absent _ ; transfermode.a _ "PROCEDURE" ; transfermode.b _ "PROC" ; transfermode.port _ "PORT" ; transfermode.signal _ "SIGNAL" ; transfermode.error _ "ERROR" ; transfermode.process _ "PROCESS" ; transfermode.program _ "PROGRAM" ; elementlist.empty _ ; elementlist.b _ elementlistP ; elementlistP.a _ element ; elementlistP.b _ elementlistP "," element ; element.idwithrep _ Id "(" exp ")" ; element.anon _ "(" exp ")" ; element.id _ Id ; heap.yes _ "UNCOUNTED" ; heap.no _ ; typeappl.a _ typeappl "." Id ; typeappl.b _ Id lengthP ; typeappl.c _ typeid lengthP ; typeappl.d _ typeappl lengthP ; lengthP _ "[" exp "]" ; reclist.a _ "[" "]" ; reclist.b _ "NULL" ; reclist.c _ "[" pairlist "]" ; reclist.d _ "[" typelist "]" ; reclist.e _ "[" pairlist "," variantpair "]" ; reclist.f _ "[" variantpart default "]" ; reclist.g _ "[" variantpair "]" ; variantpair _ identlist public variantpart default ; variantpart.a _ "SELECT" vcasehead "FROM" variantlist "ENDCASE" ; variantpart.b _ "SELECT" vcasehead "FROM" variantlist "," "ENDCASE" ; variantpart.c _ packed "SEQUENCE" vcasehead "OF" typeexp ; vcasehead.ident _ ident public tagtype ; vcasehead.computed _ "COMPUTED" tagtype ; vcasehead.overlaid _ "OVERLAID" tagtype ; tagtype.star _ "*" ; tagtype.typeexp _ typeexp ; variantlist.one _ variantitem ; variantlist.more _ variantlist "," variantitem ; variantitem _ idlist "=>" reclist ; packed.yes _ "PACKED" ; packed.no _ ; imports.a _ "IMPORTS" ; imports.b _ "IMPORTS" modulelist ; imports.c _ ; opttype.present _ "," typeexp ; opttype.absent _ ; typelist.a _ typecons default ; typelist.b _ typeid default ; typelist.c _ Id ; typelist.d _ Id "_" defaultopt ; typelist.e _ typecons default "," typelist ; typelist.f _ typeid default "," typelist ; typelist.g _ Id "," typelist ; typelist.h _ Id "_" defaultopt "," typelist ; modulelist.a _ moduleitem ; modulelist.b _ modulelist "," moduleitem ; moduleitem.one _ Id ; moduleitem.two _ Id ":" Id ; tilde.a _ "~" ; tilde.b _ "=" ; pairlist.one _ pairitem ; pairlist.many _ pairlist "," pairitem ; pairitem _ identlist public typeexp default ; typeid.a _ Id Id ; typeid.b _ Id typeid ; typeid.c _ typeidP ; typeidP.a _ Id "." Id ; typeidP.b _ typeidP "." Id ; explist.orderlist _ orderlist ; explist.keylist _ keylist ; keylist.one _ keyitem ; keylist.more _ keylist "," keyitem ; keyitem.a _ Id "~" optexp ; keyitem.b _ Id ":" optexp ; locks.present _ "LOCKS" primary lambda ; locks.absent _ ; lambda.present _ "USING" ident typeexp ; lambda.absent _ ; open.bindlist _ "OPEN" bindlist ";" ; open.empty _ ; bindlist.item _ binditem ; bindlist.list _ bindlist "," binditem ; casehead.plain _ "SELECT" exp "FROM" ; casehead.discrim _ "WITH" binditem "SELECT" optexp "FROM" ; scope.a _ open enables statementlist ; scope.b _ open enables declist ";" statementlist ; enables.a _ "ENABLE" catchcase ";" ; enables.b _ "ENABLE" catchany ";" ; enables.c _ "ENABLE" "BEGIN" catchlist "END" ";" ; enables.d _ "ENABLE" "{" catchlist "}" ";" ; enables.e _ ; statementlist.empty _ ; statementlist.b _ statementlistP ; statementlist.c _ statementlistP ";" ; statementlistP.a _ statement ; statementlistP.b _ statementlistP ";" statement ; safe.empty _ ; safe.no _ "UNSAFE" ; safe.yes _ "SAFE" ; End.