DIRECTORY
	ThreeC4BaseDecl1Def,
	ThreeC4RecFcnDeclDef,
	ThreeC4BasicAbTypesDef;

ThreeC4ModItemAbGramDef: CEDAR DEFINITIONS = 
BEGIN
OPEN ThreeC4BaseDecl1Def, ThreeC4RecFcnDeclDef, ThreeC4BasicAbTypesDef;

-- ModuleItemcedarItemsProd

ModuleItemcedarItemsProdData: TYPE = REF ModuleItemcedarItemsProdDataBody;
ModuleItemcedarItemsProdDataBody: TYPE = RECORD[
CedarItems: CedarItemsNode];

ModuleItemcedarItemsProdProcs: ModuleItemNodeProcs;

BuildModuleItemcedarItemsProdNode: PROC[position: INT, length: INT, CedarItems: CedarItemsNode]
	RETURNS[ModuleItemNode];

ModuleItemcedarItemsProdCollectModuleValueTypes: CollectModuleValueTypesProcType;
ModuleItemcedarItemsProdCollectModuleFunctionTypes: CollectModuleFunctionTypesProcType;
ModuleItemcedarItemsProdCollectProductions: CollectProductionsProcType;
ModuleItemcedarItemsProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
ModuleItemcedarItemsProdDefFileCode: DefFileCodeProcType;
ModuleItemcedarItemsProdImplFileCode: ImplFileCodeProcType;
ModuleItemcedarItemsProdLinkFileCode: LinkFileCodeProcType;
ModuleItemcedarItemsProdSyntaxFileCodes: SyntaxFileCodesProcType;
ModuleItemcedarItemsProdTestLinkPresent: TestLinkPresentProcType;

-- ModuleItembaseItemsProd

ModuleItembaseItemsProdData: TYPE = REF ModuleItembaseItemsProdDataBody;
ModuleItembaseItemsProdDataBody: TYPE = RECORD[
BaseItems: BaseItemsNode];

ModuleItembaseItemsProdProcs: ModuleItemNodeProcs;

BuildModuleItembaseItemsProdNode: PROC[position: INT, length: INT, BaseItems: BaseItemsNode]
	RETURNS[ModuleItemNode];

ModuleItembaseItemsProdCollectModuleValueTypes: CollectModuleValueTypesProcType;
ModuleItembaseItemsProdCollectModuleFunctionTypes: CollectModuleFunctionTypesProcType;
ModuleItembaseItemsProdCollectProductions: CollectProductionsProcType;
ModuleItembaseItemsProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
ModuleItembaseItemsProdDefFileCode: DefFileCodeProcType;
ModuleItembaseItemsProdImplFileCode: ImplFileCodeProcType;
ModuleItembaseItemsProdLinkFileCode: LinkFileCodeProcType;
ModuleItembaseItemsProdSyntaxFileCodes: SyntaxFileCodesProcType;
ModuleItembaseItemsProdTestLinkPresent: TestLinkPresentProcType;

-- ModuleItemabGramItemsProd

ModuleItemabGramItemsProdData: TYPE = REF ModuleItemabGramItemsProdDataBody;
ModuleItemabGramItemsProdDataBody: TYPE = RECORD[
AbGramItems: AbGramItemsNode];

ModuleItemabGramItemsProdProcs: ModuleItemNodeProcs;

BuildModuleItemabGramItemsProdNode: PROC[position: INT, length: INT, AbGramItems: AbGramItemsNode]
	RETURNS[ModuleItemNode];

ModuleItemabGramItemsProdCollectModuleValueTypes: CollectModuleValueTypesProcType;
ModuleItemabGramItemsProdCollectModuleFunctionTypes: CollectModuleFunctionTypesProcType;
ModuleItemabGramItemsProdCollectProductions: CollectProductionsProcType;
ModuleItemabGramItemsProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
ModuleItemabGramItemsProdDefFileCode: DefFileCodeProcType;
ModuleItemabGramItemsProdImplFileCode: ImplFileCodeProcType;
ModuleItemabGramItemsProdLinkFileCode: LinkFileCodeProcType;
ModuleItemabGramItemsProdSyntaxFileCodes: SyntaxFileCodesProcType;
ModuleItemabGramItemsProdTestLinkPresent: TestLinkPresentProcType;

-- ModuleItemcGramItemsProd

ModuleItemcGramItemsProdData: TYPE = REF ModuleItemcGramItemsProdDataBody;
ModuleItemcGramItemsProdDataBody: TYPE = RECORD[
CGramItems: CGramItemsNode];

ModuleItemcGramItemsProdProcs: ModuleItemNodeProcs;

BuildModuleItemcGramItemsProdNode: PROC[position: INT, length: INT, CGramItems: CGramItemsNode]
	RETURNS[ModuleItemNode];

ModuleItemcGramItemsProdCollectModuleValueTypes: CollectModuleValueTypesProcType;
ModuleItemcGramItemsProdCollectModuleFunctionTypes: CollectModuleFunctionTypesProcType;
ModuleItemcGramItemsProdCollectProductions: CollectProductionsProcType;
ModuleItemcGramItemsProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
ModuleItemcGramItemsProdDefFileCode: DefFileCodeProcType;
ModuleItemcGramItemsProdImplFileCode: ImplFileCodeProcType;
ModuleItemcGramItemsProdLinkFileCode: LinkFileCodeProcType;
ModuleItemcGramItemsProdSyntaxFileCodes: SyntaxFileCodesProcType;
ModuleItemcGramItemsProdTestLinkPresent: TestLinkPresentProcType;

-- ModuleItemgenTknProd

ModuleItemgenTknProdData: TYPE = REF ModuleItemgenTknProdDataBody;
ModuleItemgenTknProdDataBody: TYPE = RECORD[
Identifier: IdentifierNode, RopetknName: RopeNode];

ModuleItemgenTknProdProcs: ModuleItemNodeProcs;

BuildModuleItemgenTknProdNode: PROC[position: INT, length: INT, Identifier: IdentifierNode, RopetknName: RopeNode]
	RETURNS[ModuleItemNode];

ModuleItemgenTknProdCollectModuleValueTypes: CollectModuleValueTypesProcType;
ModuleItemgenTknProdCollectModuleFunctionTypes: CollectModuleFunctionTypesProcType;
ModuleItemgenTknProdCollectProductions: CollectProductionsProcType;
ModuleItemgenTknProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
ModuleItemgenTknProdDefFileCode: DefFileCodeProcType;
ModuleItemgenTknProdImplFileCode: ImplFileCodeProcType;
ModuleItemgenTknProdLinkFileCode: LinkFileCodeProcType;
ModuleItemgenTknProdSyntaxFileCodes: SyntaxFileCodesProcType;
ModuleItemgenTknProdTestLinkPresent: TestLinkPresentProcType;

-- CedarItemscedarTypesProd

CedarItemscedarTypesProdData: TYPE = REF CedarItemscedarTypesProdDataBody;
CedarItemscedarTypesProdDataBody: TYPE = RECORD[
IdList: IdListNode];

CedarItemscedarTypesProdProcs: CedarItemsNodeProcs;

BuildCedarItemscedarTypesProdNode: PROC[position: INT, length: INT, IdList: IdListNode]
	RETURNS[CedarItemsNode];

CedarItemscedarTypesProdCollectModuleValueTypes: CollectModuleValueTypesProcType;
CedarItemscedarTypesProdCollectModuleFunctionTypes: CollectModuleFunctionTypesProcType;

-- CedarItemscedarTypesFromProd

CedarItemscedarTypesFromProdData: TYPE = REF CedarItemscedarTypesFromProdDataBody;
CedarItemscedarTypesFromProdDataBody: TYPE = RECORD[
IdList: IdListNode, Identifier: IdentifierNode];

CedarItemscedarTypesFromProdProcs: CedarItemsNodeProcs;

BuildCedarItemscedarTypesFromProdNode: PROC[position: INT, length: INT, IdList: IdListNode, Identifier: IdentifierNode]
	RETURNS[CedarItemsNode];

CedarItemscedarTypesFromProdCollectModuleValueTypes: CollectModuleValueTypesProcType;
CedarItemscedarTypesFromProdCollectModuleFunctionTypes: CollectModuleFunctionTypesProcType;

-- CedarItemscedarEnumTypeFromProd

CedarItemscedarEnumTypeFromProdData: TYPE = REF CedarItemscedarEnumTypeFromProdDataBody;
CedarItemscedarEnumTypeFromProdDataBody: TYPE = RECORD[
IdentifiertypeName: IdentifierNode, IdListvalues: IdListNode, IdentifierfileName: IdentifierNode];

CedarItemscedarEnumTypeFromProdProcs: CedarItemsNodeProcs;

BuildCedarItemscedarEnumTypeFromProdNode: PROC[position: INT, length: INT, IdentifiertypeName: IdentifierNode, IdListvalues: IdListNode, IdentifierfileName: IdentifierNode]
	RETURNS[CedarItemsNode];

CedarItemscedarEnumTypeFromProdCollectModuleValueTypes: CollectModuleValueTypesProcType;
CedarItemscedarEnumTypeFromProdCollectModuleFunctionTypes: CollectModuleFunctionTypesProcType;

-- CedarItemscedarFunctionFromProd

CedarItemscedarFunctionFromProdData: TYPE = REF CedarItemscedarFunctionFromProdDataBody;
CedarItemscedarFunctionFromProdDataBody: TYPE = RECORD[
IdentifierfunName: IdentifierNode, ModIdListargs: ModIdListNode, ModIdListresults: ModIdListNode, IdentifierfileName: IdentifierNode, DamageShareAssertions: DamageShareAssertionsNode];

CedarItemscedarFunctionFromProdProcs: CedarItemsNodeProcs;

BuildCedarItemscedarFunctionFromProdNode: PROC[position: INT, length: INT, IdentifierfunName: IdentifierNode, ModIdListargs: ModIdListNode, ModIdListresults: ModIdListNode, IdentifierfileName: IdentifierNode, DamageShareAssertions: DamageShareAssertionsNode]
	RETURNS[CedarItemsNode];

CedarItemscedarFunctionFromProdCollectModuleValueTypes: CollectModuleValueTypesProcType;
CedarItemscedarFunctionFromProdCollectModuleFunctionTypes: CollectModuleFunctionTypesProcType;

-- CGramItemssimpleTokensProd

CGramItemssimpleTokensProdData: TYPE = REF CGramItemssimpleTokensProdDataBody;
CGramItemssimpleTokensProdDataBody: TYPE = RECORD[
RopeList: RopeListNode];

CGramItemssimpleTokensProdProcs: CGramItemsNodeProcs;

BuildCGramItemssimpleTokensProdNode: PROC[position: INT, length: INT, RopeList: RopeListNode]
	RETURNS[CGramItemsNode];

CGramItemssimpleTokensProdCollectProductions: CollectProductionsProcType;
CGramItemssimpleTokensProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
CGramItemssimpleTokensProdDefFileCode: DefFileCodeProcType;
CGramItemssimpleTokensProdImplFileCode: ImplFileCodeProcType;
CGramItemssimpleTokensProdLinkFileCode: LinkFileCodeProcType;
CGramItemssimpleTokensProdSyntaxFileCodes: SyntaxFileCodesProcType;
CGramItemssimpleTokensProdTestLinkPresent: TestLinkPresentProcType;

-- CGramItemsnonTerminalProd

CGramItemsnonTerminalProdData: TYPE = REF CGramItemsnonTerminalProdDataBody;
CGramItemsnonTerminalProdDataBody: TYPE = RECORD[
Identifiername: IdentifierNode, Identifierbuilds: IdentifierNode];

CGramItemsnonTerminalProdProcs: CGramItemsNodeProcs;

BuildCGramItemsnonTerminalProdNode: PROC[position: INT, length: INT, Identifiername: IdentifierNode, Identifierbuilds: IdentifierNode]
	RETURNS[CGramItemsNode];

CGramItemsnonTerminalProdCollectProductions: CollectProductionsProcType;
CGramItemsnonTerminalProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
CGramItemsnonTerminalProdDefFileCode: DefFileCodeProcType;
CGramItemsnonTerminalProdImplFileCode: ImplFileCodeProcType;
CGramItemsnonTerminalProdLinkFileCode: LinkFileCodeProcType;
CGramItemsnonTerminalProdSyntaxFileCodes: SyntaxFileCodesProcType;
CGramItemsnonTerminalProdTestLinkPresent: TestLinkPresentProcType;

-- CGramItemsconcreteProductionProd

CGramItemsconcreteProductionProdData: TYPE = REF CGramItemsconcreteProductionProdDataBody;
CGramItemsconcreteProductionProdDataBody: TYPE = RECORD[
ConcreteProduction: ConcreteProductionNode];

CGramItemsconcreteProductionProdProcs: CGramItemsNodeProcs;

BuildCGramItemsconcreteProductionProdNode: PROC[position: INT, length: INT, ConcreteProduction: ConcreteProductionNode]
	RETURNS[CGramItemsNode];

CGramItemsconcreteProductionProdCollectProductions: CollectProductionsProcType;
CGramItemsconcreteProductionProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
CGramItemsconcreteProductionProdDefFileCode: DefFileCodeProcType;
CGramItemsconcreteProductionProdImplFileCode: ImplFileCodeProcType;
CGramItemsconcreteProductionProdLinkFileCode: LinkFileCodeProcType;
CGramItemsconcreteProductionProdSyntaxFileCodes: SyntaxFileCodesProcType;
CGramItemsconcreteProductionProdTestLinkPresent: TestLinkPresentProcType;
END..