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..