DIRECTORY ThreeC4CSyntax1Def USING[], ThreeC4BaseDecl1Def, ThreeC4RecFcnImplAbGramDef, ThreeC4MiscAbGramDef, ThreeC4Support, ThreeC4RootAbGramDef, ThreeC4CProdAbGramDef, ThreeC4BasicAbTypesDef, ThreeC4OtherModItemsAbGramDef, ThreeC4ModItemAbGramDef; ThreeC4CSyntax1Impl: CEDAR PROGRAM IMPORTS ThreeC4RecFcnImplAbGramDef, ThreeC4MiscAbGramDef, ThreeC4RootAbGramDef, ThreeC4CProdAbGramDef, ThreeC4OtherModItemsAbGramDef, ThreeC4ModItemAbGramDef EXPORTS ThreeC4CSyntax1Def= BEGIN OPEN ThreeC4BaseDecl1Def, ThreeC4RecFcnImplAbGramDef, ThreeC4MiscAbGramDef, ThreeC4Support, ThreeC4RootAbGramDef, ThreeC4CProdAbGramDef, ThreeC4BasicAbTypesDef, ThreeC4OtherModItemsAbGramDef, ThreeC4ModItemAbGramDef; ThreeC4CSyntax1LinkProc: PUBLIC PROC[prodLinkArray: SeeProdLinkArray, tknLinkArray: TokenLinkArray] = BEGIN prodLinkArray[0] _ SeeMainGoal; prodLinkArray[1] _ SeeWholeFile; prodLinkArray[2] _ SeeOptionalIncludeClauseempty; prodLinkArray[3] _ SeeOptionalIncludeClausenonEmpty; prodLinkArray[4] _ SeeModuleListone; prodLinkArray[5] _ SeeModuleListmany; prodLinkArray[6] _ SeeModuleBodycontrol; prodLinkArray[7] _ SeeModuleBodynormal; prodLinkArray[8] _ SeeModuleItemListone; prodLinkArray[9] _ SeeModuleItemListmany; prodLinkArray[10] _ SeeModuleItemcedarItems; prodLinkArray[11] _ SeeModuleItembaseItems; prodLinkArray[12] _ SeeModuleItemabGramItems; prodLinkArray[13] _ SeeModuleItemcGramItems; prodLinkArray[14] _ SeeModuleItemgenTkn; prodLinkArray[15] _ SeeCedarItemscedarTypesFromOne; prodLinkArray[16] _ SeeCedarItemscedarTypesFromMany; prodLinkArray[17] _ SeeCedarItemscedarTypesOne; prodLinkArray[18] _ SeeCedarItemscedarTypesMany; prodLinkArray[19] _ SeeCedarItemscedarEnumTypeFrom; prodLinkArray[20] _ SeeCedarItemscedarFnFrom; prodLinkArray[21] _ SeeCGramItemssimpleTokens; prodLinkArray[22] _ SeeCGramItemsnonTerminal; prodLinkArray[23] _ SeeCGramItemsconcreteProduction; prodLinkArray[24] _ SeeBaseItemsoneBaseType; prodLinkArray[25] _ SeeBaseItemsmanyBaseTypes; prodLinkArray[26] _ SeeBaseItemsenumBaseType; prodLinkArray[27] _ SeeBaseItemsbaseFcn; prodLinkArray[28] _ SeeBaseItemstreeRecFcn; prodLinkArray[29] _ SeeOptionalArgModIdListempty; prodLinkArray[30] _ SeeOptionalArgModIdListpresent; prodLinkArray[31] _ SeeAbGramItemsabType; prodLinkArray[32] _ SeeAbGramItemsabProdTwoIds; prodLinkArray[33] _ SeeAbGramItemsabProdOneId; prodLinkArray[34] _ SeeAbGramItemsabProdFcnImpl; prodLinkArray[35] _ SeeAbProductionFcnImploneId; prodLinkArray[36] _ SeeAbProductionFcnImpltwoIds; prodLinkArray[37] _ SeeRecFcnImplListone; prodLinkArray[38] _ SeeRecFcnImplListmany; END; SeeMainGoal: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; WholeFile: WholeFileNode; WholeFile _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildMainGoalProdNode[position, length, WholeFile], stack]; RETURN[stack] END; SeeWholeFile: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; OptionalIncludeClause: IncludeClauseNode; ModuleList: ModuleListNode; ModuleList _ NARROW[stack.first]; stack _ stack.rest; OptionalIncludeClause _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildWholeFileProdNode[position, length, OptionalIncludeClause, ModuleList], stack]; RETURN[stack] END; SeeOptionalIncludeClauseempty: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildIncludeClauseProdNode[position, length, BuildIdListEmptyProdNode[position, length]], stack]; RETURN[stack] END; SeeOptionalIncludeClausenonEmpty: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; IdList: IdListNode; IdList _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildIncludeClauseProdNode[position, length, IdList], stack]; RETURN[stack] END; SeeModuleListone: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; ModuleBody: ModuleBodyNode; ModuleBody _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleListOneProdNode[position, length, ModuleBody], stack]; RETURN[stack] END; SeeModuleListmany: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; ModuleList: ModuleListNode; ModuleBody: ModuleBodyNode; ModuleBody _ NARROW[stack.first]; stack _ stack.rest; ModuleList _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleListManyProdNode[position, length, ModuleList, ModuleBody], stack]; RETURN[stack] END; SeeModuleBodycontrol: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleBodycontrolProdNode[position, length, Identifier], stack]; RETURN[stack] END; SeeModuleBodynormal: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; ModuleItemList: ModuleItemListNode; ModuleItemList _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleBodynormalProdNode[position, length, Identifier, ModuleItemList], stack]; RETURN[stack] END; SeeModuleItemListone: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; ModuleItem: ModuleItemNode; ModuleItem _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleItemListOneProdNode[position, length, ModuleItem], stack]; RETURN[stack] END; SeeModuleItemListmany: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; ModuleItemList: ModuleItemListNode; ModuleItem: ModuleItemNode; ModuleItem _ NARROW[stack.first]; stack _ stack.rest; ModuleItemList _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleItemListManyProdNode[position, length, ModuleItemList, ModuleItem], stack]; RETURN[stack] END; SeeModuleItemcedarItems: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; CedarItems: CedarItemsNode; CedarItems _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleItemcedarItemsProdNode[position, length, CedarItems], stack]; RETURN[stack] END; SeeModuleItembaseItems: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; BaseItems: BaseItemsNode; BaseItems _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleItembaseItemsProdNode[position, length, BaseItems], stack]; RETURN[stack] END; SeeModuleItemabGramItems: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; AbGramItems: AbGramItemsNode; AbGramItems _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleItemabGramItemsProdNode[position, length, AbGramItems], stack]; RETURN[stack] END; SeeModuleItemcGramItems: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; CGramItems: CGramItemsNode; CGramItems _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleItemcGramItemsProdNode[position, length, CGramItems], stack]; RETURN[stack] END; SeeModuleItemgenTkn: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; Rope: RopeNode; Rope _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildModuleItemgenTknProdNode[position, length, Identifier, Rope], stack]; RETURN[stack] END; SeeCedarItemscedarTypesFromOne: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; IdentifiertName: IdentifierNode; IdentifierfName: IdentifierNode; IdentifierfName _ NARROW[stack.first]; stack _ stack.rest; IdentifiertName _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildCedarItemscedarTypesFromProdNode[position, length, BuildIdListnonEmptyProdNode[IdentifiertName.position, IdentifiertName.position + IdentifiertName.length + IdentifiertName.position + IdentifiertName.length - IdentifiertName.position - IdentifiertName.length - IdentifiertName.position, IdentifiertName, BuildIdListEmptyProdNode[IdentifiertName.position + IdentifiertName.length, IdentifiertName.position + IdentifiertName.length - IdentifiertName.position - IdentifiertName.length]], IdentifierfName], stack]; RETURN[stack] END; SeeCedarItemscedarTypesFromMany: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; IdentifiertName: IdentifierNode; IdList: IdListNode; IdentifierfName: IdentifierNode; IdentifierfName _ NARROW[stack.first]; stack _ stack.rest; IdList _ NARROW[stack.first]; stack _ stack.rest; IdentifiertName _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildCedarItemscedarTypesFromProdNode[position, length, BuildIdListnonEmptyProdNode[IdentifiertName.position, IdList.position + IdList.length - IdentifiertName.position, IdentifiertName, IdList], IdentifierfName], stack]; RETURN[stack] END; SeeCedarItemscedarTypesOne: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; IdentifiertName: IdentifierNode; IdentifiertName _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildCedarItemscedarTypesProdNode[position, length, BuildIdListnonEmptyProdNode[IdentifiertName.position, IdentifiertName.position + IdentifiertName.length + IdentifiertName.position + IdentifiertName.length - IdentifiertName.position - IdentifiertName.length - IdentifiertName.position, IdentifiertName, BuildIdListEmptyProdNode[IdentifiertName.position + IdentifiertName.length, IdentifiertName.position + IdentifiertName.length - IdentifiertName.position - IdentifiertName.length]]], stack]; RETURN[stack] END; SeeCedarItemscedarTypesMany: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; IdentifiertName: IdentifierNode; IdList: IdListNode; IdList _ NARROW[stack.first]; stack _ stack.rest; IdentifiertName _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildCedarItemscedarTypesProdNode[position, length, BuildIdListnonEmptyProdNode[IdentifiertName.position, IdList.position + IdList.length - IdentifiertName.position, IdentifiertName, IdList]], stack]; RETURN[stack] END; SeeCedarItemscedarEnumTypeFrom: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; IdentifiertName: IdentifierNode; IdList: IdListNode; IdentifierfName: IdentifierNode; IdentifierfName _ NARROW[stack.first]; stack _ stack.rest; IdList _ NARROW[stack.first]; stack _ stack.rest; IdentifiertName _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildCedarItemscedarEnumTypeFromProdNode[position, length, IdentifiertName, IdList, IdentifierfName], stack]; RETURN[stack] END; SeeCedarItemscedarFnFrom: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; IdentifierfnName: IdentifierNode; OptionalArgModIdList: ModIdListNode; ModIdList: ModIdListNode; IdentifierfName: IdentifierNode; DamageShareAssertionList: DamageShareAssertionsNode; DamageShareAssertionList _ NARROW[stack.first]; stack _ stack.rest; IdentifierfName _ NARROW[stack.first]; stack _ stack.rest; ModIdList _ NARROW[stack.first]; stack _ stack.rest; OptionalArgModIdList _ NARROW[stack.first]; stack _ stack.rest; IdentifierfnName _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildCedarItemscedarFunctionFromProdNode[position, length, IdentifierfnName, OptionalArgModIdList, ModIdList, IdentifierfName, DamageShareAssertionList], stack]; RETURN[stack] END; SeeCGramItemssimpleTokens: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; RopeList: RopeListNode; RopeList _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildCGramItemssimpleTokensProdNode[position, length, RopeList], stack]; RETURN[stack] END; SeeCGramItemsnonTerminal: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; IdentifierntName: IdentifierNode; IdentifierfName: IdentifierNode; IdentifierfName _ NARROW[stack.first]; stack _ stack.rest; IdentifierntName _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildCGramItemsnonTerminalProdNode[position, length, IdentifierntName, IdentifierfName], stack]; RETURN[stack] END; SeeCGramItemsconcreteProduction: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; ModId: ModIdNode; OptionalConcreteRightSideList: ConcreteRightSideListNode; BuildExp: BuildExpNode; BuildExp _ NARROW[stack.first]; stack _ stack.rest; OptionalConcreteRightSideList _ NARROW[stack.first]; stack _ stack.rest; ModId _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildCGramItemsconcreteProductionProdNode[position, length, BuildConcreteProductionProdNode[ModId.position, BuildExp.position + BuildExp.length - ModId.position, ModId, OptionalConcreteRightSideList, BuildExp]], stack]; RETURN[stack] END; SeeBaseItemsoneBaseType: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildBaseItemsbaseTypesProdNode[position, length, BuildIdListnonEmptyProdNode[Identifier.position, Identifier.position + Identifier.length + Identifier.position + Identifier.length - Identifier.position - Identifier.length - Identifier.position, Identifier, BuildIdListEmptyProdNode[Identifier.position + Identifier.length, Identifier.position + Identifier.length - Identifier.position - Identifier.length]]], stack]; RETURN[stack] END; SeeBaseItemsmanyBaseTypes: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; IdList: IdListNode; IdList _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildBaseItemsbaseTypesProdNode[position, length, BuildIdListnonEmptyProdNode[Identifier.position, IdList.position + IdList.length - Identifier.position, Identifier, IdList]], stack]; RETURN[stack] END; SeeBaseItemsenumBaseType: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; IdList: IdListNode; IdList _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildBaseItemsenumBaseTypeProdNode[position, length, Identifier, IdList], stack]; RETURN[stack] END; SeeBaseItemsbaseFcn: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; OptionalArgModIdList: ModIdListNode; ModIdList: ModIdListNode; DamageShareAssertionList: DamageShareAssertionsNode; DamageShareAssertionList _ NARROW[stack.first]; stack _ stack.rest; ModIdList _ NARROW[stack.first]; stack _ stack.rest; OptionalArgModIdList _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildBaseItemsbaseFcnProdNode[position, length, Identifier, OptionalArgModIdList, ModIdList, DamageShareAssertionList], stack]; RETURN[stack] END; SeeBaseItemstreeRecFcn: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; ModIdListargs: ModIdListNode; ModIdListresults: ModIdListNode; DamageShareAssertionList: DamageShareAssertionsNode; DamageShareAssertionList _ NARROW[stack.first]; stack _ stack.rest; ModIdListresults _ NARROW[stack.first]; stack _ stack.rest; ModIdListargs _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildBaseItemstreeRecFcnProdNode[position, length, Identifier, ModIdListargs, ModIdListresults, DamageShareAssertionList], stack]; RETURN[stack] END; SeeOptionalArgModIdListempty: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildModIdListEmptyProdNode[position, length], stack]; RETURN[stack] END; SeeOptionalArgModIdListpresent: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; ModIdList: ModIdListNode; ModIdList _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[ModIdList, stack]; RETURN[stack] END; SeeAbGramItemsabType: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; IdList: IdListNode; IdList _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildAbGramItemsabTypeProdNode[position, length, Identifier, IdList], stack]; RETURN[stack] END; SeeAbGramItemsabProdTwoIds: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifiera: IdentifierNode; Identifierb: IdentifierNode; OptionalModIdList: ModIdListNode; OptionalModIdList _ NARROW[stack.first]; stack _ stack.rest; Identifierb _ NARROW[stack.first]; stack _ stack.rest; Identifiera _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildAbGramItemsabProdProdNode[position, length, BuildModIdtwoIdsProdNode[Identifiera.position, Identifierb.position + Identifierb.length - Identifiera.position, Identifiera, Identifierb], OptionalModIdList], stack]; RETURN[stack] END; SeeAbGramItemsabProdOneId: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; OptionalModIdList: ModIdListNode; OptionalModIdList _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildAbGramItemsabProdProdNode[position, length, BuildModIdoneIdProdNode[Identifier.position, Identifier.length, Identifier], OptionalModIdList], stack]; RETURN[stack] END; SeeAbGramItemsabProdFcnImpl: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; AbProductionFcnImpl: AbProductionFcnImplNode; AbProductionFcnImpl _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildAbGramItemsabProdFcnImplProdNode[position, length, AbProductionFcnImpl], stack]; RETURN[stack] END; SeeAbProductionFcnImploneId: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; OptionalModIdList: ModIdListNode; RecFcnImplList: RecFcnImplListNode; RecFcnImplList _ NARROW[stack.first]; stack _ stack.rest; OptionalModIdList _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildAbProductionFcnImplProdNode[position, length, BuildModIdoneIdProdNode[Identifier.position, Identifier.length, Identifier], OptionalModIdList, RecFcnImplList], stack]; RETURN[stack] END; SeeAbProductionFcnImpltwoIds: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifiera: IdentifierNode; Identifierb: IdentifierNode; OptionalModIdList: ModIdListNode; RecFcnImplList: RecFcnImplListNode; RecFcnImplList _ NARROW[stack.first]; stack _ stack.rest; OptionalModIdList _ NARROW[stack.first]; stack _ stack.rest; Identifierb _ NARROW[stack.first]; stack _ stack.rest; Identifiera _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildAbProductionFcnImplProdNode[position, length, BuildModIdtwoIdsProdNode[Identifiera.position, Identifierb.position + Identifierb.length - Identifiera.position, Identifiera, Identifierb], OptionalModIdList, RecFcnImplList], stack]; RETURN[stack] END; SeeRecFcnImplListone: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; Identifier: IdentifierNode; IdList: IdListNode; RecExpression: RecExpressionNode; RecExpression _ NARROW[stack.first]; stack _ stack.rest; IdList _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildRecFcnImplListoneProdNode[position, length, Identifier, IdList, RecExpression], stack]; RETURN[stack] END; SeeRecFcnImplListmany: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; RecFcnImplList: RecFcnImplListNode; Identifier: IdentifierNode; IdList: IdListNode; RecExpression: RecExpressionNode; RecExpression _ NARROW[stack.first]; stack _ stack.rest; IdList _ NARROW[stack.first]; stack _ stack.rest; Identifier _ NARROW[stack.first]; stack _ stack.rest; RecFcnImplList _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildRecFcnImplListmanyProdNode[position, length, RecFcnImplList, BuildRecFcnImplListoneProdNode[Identifier.position, RecExpression.position + RecExpression.length - Identifier.position, Identifier, IdList, RecExpression]], stack]; RETURN[stack] END; END..