DIRECTORY
	ThreeC4BaseDecl1Def,
	ThreeC4BasicAbTypesDef,
	ThreeC4ModItemAbGramDef;

ThreeC4ModItemAbGramImpl: CEDAR PROGRAM IMPORTS ThreeC4ModItemAbGramDef EXPORTS ThreeC4ModItemAbGramDef= 
BEGIN
OPEN ThreeC4BaseDecl1Def, ThreeC4BasicAbTypesDef, ThreeC4ModItemAbGramDef;

-- ModuleItemcedarItemsProd

ModuleItemcedarItemsProdProcs: PUBLIC ModuleItemNodeProcs ←
	NEW[ModuleItemNodeProcsBody ← [ModuleItemcedarItemsProdCollectModuleValueTypes, ModuleItemcedarItemsProdCollectModuleFunctionTypes, ModuleItemcedarItemsProdCollectProductions, ModuleItemcedarItemsProdCollectRightSideSymbols, ModuleItemcedarItemsProdDefFileCode, ModuleItemcedarItemsProdImplFileCode, ModuleItemcedarItemsProdLinkFileCode, ModuleItemcedarItemsProdSyntaxFileCodes, ModuleItemcedarItemsProdTestLinkPresent]];

BuildModuleItemcedarItemsProdNode: PUBLIC PROC[position: INT, length: INT, CedarItems: CedarItemsNode]
	RETURNS[ModuleItemNode] =
		BEGIN
		data: ModuleItemcedarItemsProdData ←
			NEW[ModuleItemcedarItemsProdDataBody←[
			CedarItems]];
		RETURN[NEW[ModuleItemNodeBody←[position, length, ModuleItemcedarItemsProdProcs, data]]];
		END;


-- ModuleItembaseItemsProd

ModuleItembaseItemsProdProcs: PUBLIC ModuleItemNodeProcs ←
	NEW[ModuleItemNodeProcsBody ← [ModuleItembaseItemsProdCollectModuleValueTypes, ModuleItembaseItemsProdCollectModuleFunctionTypes, ModuleItembaseItemsProdCollectProductions, ModuleItembaseItemsProdCollectRightSideSymbols, ModuleItembaseItemsProdDefFileCode, ModuleItembaseItemsProdImplFileCode, ModuleItembaseItemsProdLinkFileCode, ModuleItembaseItemsProdSyntaxFileCodes, ModuleItembaseItemsProdTestLinkPresent]];

BuildModuleItembaseItemsProdNode: PUBLIC PROC[position: INT, length: INT, BaseItems: BaseItemsNode]
	RETURNS[ModuleItemNode] =
		BEGIN
		data: ModuleItembaseItemsProdData ←
			NEW[ModuleItembaseItemsProdDataBody←[
			BaseItems]];
		RETURN[NEW[ModuleItemNodeBody←[position, length, ModuleItembaseItemsProdProcs, data]]];
		END;


-- ModuleItemabGramItemsProd

ModuleItemabGramItemsProdProcs: PUBLIC ModuleItemNodeProcs ←
	NEW[ModuleItemNodeProcsBody ← [ModuleItemabGramItemsProdCollectModuleValueTypes, ModuleItemabGramItemsProdCollectModuleFunctionTypes, ModuleItemabGramItemsProdCollectProductions, ModuleItemabGramItemsProdCollectRightSideSymbols, ModuleItemabGramItemsProdDefFileCode, ModuleItemabGramItemsProdImplFileCode, ModuleItemabGramItemsProdLinkFileCode, ModuleItemabGramItemsProdSyntaxFileCodes, ModuleItemabGramItemsProdTestLinkPresent]];

BuildModuleItemabGramItemsProdNode: PUBLIC PROC[position: INT, length: INT, AbGramItems: AbGramItemsNode]
	RETURNS[ModuleItemNode] =
		BEGIN
		data: ModuleItemabGramItemsProdData ←
			NEW[ModuleItemabGramItemsProdDataBody←[
			AbGramItems]];
		RETURN[NEW[ModuleItemNodeBody←[position, length, ModuleItemabGramItemsProdProcs, data]]];
		END;


-- ModuleItemcGramItemsProd

ModuleItemcGramItemsProdProcs: PUBLIC ModuleItemNodeProcs ←
	NEW[ModuleItemNodeProcsBody ← [ModuleItemcGramItemsProdCollectModuleValueTypes, ModuleItemcGramItemsProdCollectModuleFunctionTypes, ModuleItemcGramItemsProdCollectProductions, ModuleItemcGramItemsProdCollectRightSideSymbols, ModuleItemcGramItemsProdDefFileCode, ModuleItemcGramItemsProdImplFileCode, ModuleItemcGramItemsProdLinkFileCode, ModuleItemcGramItemsProdSyntaxFileCodes, ModuleItemcGramItemsProdTestLinkPresent]];

BuildModuleItemcGramItemsProdNode: PUBLIC PROC[position: INT, length: INT, CGramItems: CGramItemsNode]
	RETURNS[ModuleItemNode] =
		BEGIN
		data: ModuleItemcGramItemsProdData ←
			NEW[ModuleItemcGramItemsProdDataBody←[
			CGramItems]];
		RETURN[NEW[ModuleItemNodeBody←[position, length, ModuleItemcGramItemsProdProcs, data]]];
		END;


-- ModuleItemgenTknProd

ModuleItemgenTknProdProcs: PUBLIC ModuleItemNodeProcs ←
	NEW[ModuleItemNodeProcsBody ← [ModuleItemgenTknProdCollectModuleValueTypes, ModuleItemgenTknProdCollectModuleFunctionTypes, ModuleItemgenTknProdCollectProductions, ModuleItemgenTknProdCollectRightSideSymbols, ModuleItemgenTknProdDefFileCode, ModuleItemgenTknProdImplFileCode, ModuleItemgenTknProdLinkFileCode, ModuleItemgenTknProdSyntaxFileCodes, ModuleItemgenTknProdTestLinkPresent]];

BuildModuleItemgenTknProdNode: PUBLIC PROC[position: INT, length: INT, Identifier: IdentifierNode, RopetknName: RopeNode]
	RETURNS[ModuleItemNode] =
		BEGIN
		data: ModuleItemgenTknProdData ←
			NEW[ModuleItemgenTknProdDataBody←[
			Identifier, RopetknName]];
		RETURN[NEW[ModuleItemNodeBody←[position, length, ModuleItemgenTknProdProcs, data]]];
		END;


-- CedarItemscedarTypesProd

CedarItemscedarTypesProdProcs: PUBLIC CedarItemsNodeProcs ←
	NEW[CedarItemsNodeProcsBody ← [CedarItemscedarTypesProdCollectModuleValueTypes, CedarItemscedarTypesProdCollectModuleFunctionTypes]];

BuildCedarItemscedarTypesProdNode: PUBLIC PROC[position: INT, length: INT, IdList: IdListNode]
	RETURNS[CedarItemsNode] =
		BEGIN
		data: CedarItemscedarTypesProdData ←
			NEW[CedarItemscedarTypesProdDataBody←[
			IdList]];
		RETURN[NEW[CedarItemsNodeBody←[position, length, CedarItemscedarTypesProdProcs, data]]];
		END;


-- CedarItemscedarTypesFromProd

CedarItemscedarTypesFromProdProcs: PUBLIC CedarItemsNodeProcs ←
	NEW[CedarItemsNodeProcsBody ← [CedarItemscedarTypesFromProdCollectModuleValueTypes, CedarItemscedarTypesFromProdCollectModuleFunctionTypes]];

BuildCedarItemscedarTypesFromProdNode: PUBLIC PROC[position: INT, length: INT, IdList: IdListNode, Identifier: IdentifierNode]
	RETURNS[CedarItemsNode] =
		BEGIN
		data: CedarItemscedarTypesFromProdData ←
			NEW[CedarItemscedarTypesFromProdDataBody←[
			IdList, Identifier]];
		RETURN[NEW[CedarItemsNodeBody←[position, length, CedarItemscedarTypesFromProdProcs, data]]];
		END;


-- CedarItemscedarEnumTypeFromProd

CedarItemscedarEnumTypeFromProdProcs: PUBLIC CedarItemsNodeProcs ←
	NEW[CedarItemsNodeProcsBody ← [CedarItemscedarEnumTypeFromProdCollectModuleValueTypes, CedarItemscedarEnumTypeFromProdCollectModuleFunctionTypes]];

BuildCedarItemscedarEnumTypeFromProdNode: PUBLIC PROC[position: INT, length: INT, IdentifiertypeName: IdentifierNode, IdListvalues: IdListNode, IdentifierfileName: IdentifierNode]
	RETURNS[CedarItemsNode] =
		BEGIN
		data: CedarItemscedarEnumTypeFromProdData ←
			NEW[CedarItemscedarEnumTypeFromProdDataBody←[
			IdentifiertypeName, IdListvalues, IdentifierfileName]];
		RETURN[NEW[CedarItemsNodeBody←[position, length, CedarItemscedarEnumTypeFromProdProcs, data]]];
		END;


-- CedarItemscedarFunctionFromProd

CedarItemscedarFunctionFromProdProcs: PUBLIC CedarItemsNodeProcs ←
	NEW[CedarItemsNodeProcsBody ← [CedarItemscedarFunctionFromProdCollectModuleValueTypes, CedarItemscedarFunctionFromProdCollectModuleFunctionTypes]];

BuildCedarItemscedarFunctionFromProdNode: PUBLIC PROC[position: INT, length: INT, IdentifierfunName: IdentifierNode, ModIdListargs: ModIdListNode, ModIdListresults: ModIdListNode, IdentifierfileName: IdentifierNode, DamageShareAssertions: DamageShareAssertionsNode]
	RETURNS[CedarItemsNode] =
		BEGIN
		data: CedarItemscedarFunctionFromProdData ←
			NEW[CedarItemscedarFunctionFromProdDataBody←[
			IdentifierfunName, ModIdListargs, ModIdListresults, IdentifierfileName, DamageShareAssertions]];
		RETURN[NEW[CedarItemsNodeBody←[position, length, CedarItemscedarFunctionFromProdProcs, data]]];
		END;


-- CGramItemssimpleTokensProd

CGramItemssimpleTokensProdProcs: PUBLIC CGramItemsNodeProcs ←
	NEW[CGramItemsNodeProcsBody ← [CGramItemssimpleTokensProdCollectProductions, CGramItemssimpleTokensProdCollectRightSideSymbols, CGramItemssimpleTokensProdDefFileCode, CGramItemssimpleTokensProdImplFileCode, CGramItemssimpleTokensProdLinkFileCode, CGramItemssimpleTokensProdSyntaxFileCodes, CGramItemssimpleTokensProdTestLinkPresent]];

BuildCGramItemssimpleTokensProdNode: PUBLIC PROC[position: INT, length: INT, RopeList: RopeListNode]
	RETURNS[CGramItemsNode] =
		BEGIN
		data: CGramItemssimpleTokensProdData ←
			NEW[CGramItemssimpleTokensProdDataBody←[
			RopeList]];
		RETURN[NEW[CGramItemsNodeBody←[position, length, CGramItemssimpleTokensProdProcs, data]]];
		END;


-- CGramItemsnonTerminalProd

CGramItemsnonTerminalProdProcs: PUBLIC CGramItemsNodeProcs ←
	NEW[CGramItemsNodeProcsBody ← [CGramItemsnonTerminalProdCollectProductions, CGramItemsnonTerminalProdCollectRightSideSymbols, CGramItemsnonTerminalProdDefFileCode, CGramItemsnonTerminalProdImplFileCode, CGramItemsnonTerminalProdLinkFileCode, CGramItemsnonTerminalProdSyntaxFileCodes, CGramItemsnonTerminalProdTestLinkPresent]];

BuildCGramItemsnonTerminalProdNode: PUBLIC PROC[position: INT, length: INT, Identifiername: IdentifierNode, Identifierbuilds: IdentifierNode]
	RETURNS[CGramItemsNode] =
		BEGIN
		data: CGramItemsnonTerminalProdData ←
			NEW[CGramItemsnonTerminalProdDataBody←[
			Identifiername, Identifierbuilds]];
		RETURN[NEW[CGramItemsNodeBody←[position, length, CGramItemsnonTerminalProdProcs, data]]];
		END;


-- CGramItemsconcreteProductionProd

CGramItemsconcreteProductionProdProcs: PUBLIC CGramItemsNodeProcs ←
	NEW[CGramItemsNodeProcsBody ← [CGramItemsconcreteProductionProdCollectProductions, CGramItemsconcreteProductionProdCollectRightSideSymbols, CGramItemsconcreteProductionProdDefFileCode, CGramItemsconcreteProductionProdImplFileCode, CGramItemsconcreteProductionProdLinkFileCode, CGramItemsconcreteProductionProdSyntaxFileCodes, CGramItemsconcreteProductionProdTestLinkPresent]];

BuildCGramItemsconcreteProductionProdNode: PUBLIC PROC[position: INT, length: INT, ConcreteProduction: ConcreteProductionNode]
	RETURNS[CGramItemsNode] =
		BEGIN
		data: CGramItemsconcreteProductionProdData ←
			NEW[CGramItemsconcreteProductionProdDataBody←[
			ConcreteProduction]];
		RETURN[NEW[CGramItemsNodeBody←[position, length, CGramItemsconcreteProductionProdProcs, data]]];
		END;

END..