DIRECTORY
	ThreeC4BaseDecl1Def,
	ThreeC4RecFcnDeclDef,
	ThreeC4BasicAbTypesDef;

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

-- ModIdoneIdProd

ModIdoneIdProdData: TYPE = REF ModIdoneIdProdDataBody;
ModIdoneIdProdDataBody: TYPE = RECORD[
Identifier: IdentifierNode];

ModIdoneIdProdProcs: ModIdNodeProcs;

BuildModIdoneIdProdNode: PROC[position: INT, length: INT, Identifier: IdentifierNode]
	RETURNS[ModIdNode];

ModIdoneIdProdFormName: FormNameProcType;
ModIdoneIdProdFormFirstId: FormFirstIdProcType;
ModIdoneIdProdFormType: FormTypeProcType;
ModIdoneIdProdFormValueInfo: FormValueInfoProcType;
ModIdoneIdProdFormExpCode: FormExpCodeProcType;
ModIdoneIdProdFormTypeUse: FormTypeUseProcType;
ModIdoneIdProdFormTypeEarly: FormTypeEarlyProcType;

-- ModIdtwoIdsProd

ModIdtwoIdsProdData: TYPE = REF ModIdtwoIdsProdDataBody;
ModIdtwoIdsProdDataBody: TYPE = RECORD[
Identifierleft: IdentifierNode, Identifierright: IdentifierNode];

ModIdtwoIdsProdProcs: ModIdNodeProcs;

BuildModIdtwoIdsProdNode: PROC[position: INT, length: INT, Identifierleft: IdentifierNode, Identifierright: IdentifierNode]
	RETURNS[ModIdNode];

ModIdtwoIdsProdFormName: FormNameProcType;
ModIdtwoIdsProdFormFirstId: FormFirstIdProcType;
ModIdtwoIdsProdFormType: FormTypeProcType;
ModIdtwoIdsProdFormValueInfo: FormValueInfoProcType;
ModIdtwoIdsProdFormExpCode: FormExpCodeProcType;
ModIdtwoIdsProdFormTypeUse: FormTypeUseProcType;
ModIdtwoIdsProdFormTypeEarly: FormTypeEarlyProcType;

-- ModIdListEmptyProd

ModIdListEmptyProdData: TYPE = REF ModIdListEmptyProdDataBody;
ModIdListEmptyProdDataBody: TYPE = RECORD[
];

ModIdListEmptyProdProcs: ModIdListNodeProcs;

BuildModIdListEmptyProdNode: PROC[position: INT, length: INT]
	RETURNS[ModIdListNode];

ModIdListEmptyProdFormNameList: FormNameListProcType;
ModIdListEmptyProdFormAbstRightSideContext: FormAbstRightSideContextProcType;
ModIdListEmptyProdFormTypeUse: FormTypeUseProcType;
ModIdListEmptyProdFormTypeListEarly: FormTypeListEarlyProcType;
ModIdListEmptyProdFormTypeList: FormTypeListProcType;
ModIdListEmptyProdProdDataTypeDefCode: ProdDataTypeDefCodeProcType;
ModIdListEmptyProdDataBodyFieldTypeCode: DataBodyFieldTypeCodeProcType;
ModIdListEmptyProdProdBuildDataRcdCode: ProdBuildDataRcdCodeProcType;
ModIdListEmptyProdFormTypesCode: FormTypesCodeProcType;

-- ModIdListManyProd

ModIdListManyProdData: TYPE = REF ModIdListManyProdDataBody;
ModIdListManyProdDataBody: TYPE = RECORD[
ModIdList: ModIdListNode, ModId: ModIdNode];

ModIdListManyProdProcs: ModIdListNodeProcs;

BuildModIdListManyProdNode: PROC[position: INT, length: INT, ModIdList: ModIdListNode, ModId: ModIdNode]
	RETURNS[ModIdListNode];

ModIdListManyProdFormNameList: FormNameListProcType;
ModIdListManyProdFormAbstRightSideContext: FormAbstRightSideContextProcType;
ModIdListManyProdFormTypeUse: FormTypeUseProcType;
ModIdListManyProdFormTypeListEarly: FormTypeListEarlyProcType;
ModIdListManyProdFormTypeList: FormTypeListProcType;
ModIdListManyProdProdDataTypeDefCode: ProdDataTypeDefCodeProcType;
ModIdListManyProdDataBodyFieldTypeCode: DataBodyFieldTypeCodeProcType;
ModIdListManyProdProdBuildDataRcdCode: ProdBuildDataRcdCodeProcType;
ModIdListManyProdFormTypesCode: FormTypesCodeProcType;

-- IdListEmptyProd

IdListEmptyProdData: TYPE = REF IdListEmptyProdDataBody;
IdListEmptyProdDataBody: TYPE = RECORD[
];

IdListEmptyProdProcs: IdListNodeProcs;

BuildIdListEmptyProdNode: PROC[position: INT, length: INT]
	RETURNS[IdListNode];

IdListEmptyProdRecordCedarTypesFrom: RecordCedarTypesFromProcType;
IdListEmptyProdRecordCedarTypes: RecordCedarTypesProcType;
IdListEmptyProdRecordMultipleBaseTypes: RecordMultipleBaseTypesProcType;
IdListEmptyProdFormTypeListEarly: FormTypeListEarlyProcType;
IdListEmptyProdFormNameList: FormNameListProcType;
IdListEmptyProdCollectValueTypes: CollectValueTypesProcType;
IdListEmptyProdCollectFunctionTypes: CollectFunctionTypesProcType;
IdListEmptyProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
IdListEmptyProdBaseDeclCode: BaseDeclCodeProcType;
IdListEmptyProdFormTypesCode: FormTypesCodeProcType;
IdListEmptyProdProcFieldTypeCode: ProcFieldTypeCodeProcType;
IdListEmptyProdFormProcsNamesCode: FormProcsNamesCodeProcType;
IdListEmptyProdFormRecFcnsDeclCode: FormRecFcnsDeclCodeProcType;
IdListEmptyProdFormVarDeclCode: FormVarDeclCodeProcType;
IdListEmptyProdFormLinkCallCode: FormLinkCallCodeProcType;
IdListEmptyProdSyntaxFileCodes: SyntaxFileCodesProcType;

-- IdListnonEmptyProd

IdListnonEmptyProdData: TYPE = REF IdListnonEmptyProdDataBody;
IdListnonEmptyProdDataBody: TYPE = RECORD[
Identifier: IdentifierNode, IdList: IdListNode];

IdListnonEmptyProdProcs: IdListNodeProcs;

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

IdListnonEmptyProdRecordCedarTypesFrom: RecordCedarTypesFromProcType;
IdListnonEmptyProdRecordCedarTypes: RecordCedarTypesProcType;
IdListnonEmptyProdRecordMultipleBaseTypes: RecordMultipleBaseTypesProcType;
IdListnonEmptyProdFormTypeListEarly: FormTypeListEarlyProcType;
IdListnonEmptyProdFormNameList: FormNameListProcType;
IdListnonEmptyProdCollectValueTypes: CollectValueTypesProcType;
IdListnonEmptyProdCollectFunctionTypes: CollectFunctionTypesProcType;
IdListnonEmptyProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
IdListnonEmptyProdBaseDeclCode: BaseDeclCodeProcType;
IdListnonEmptyProdFormTypesCode: FormTypesCodeProcType;
IdListnonEmptyProdProcFieldTypeCode: ProcFieldTypeCodeProcType;
IdListnonEmptyProdFormProcsNamesCode: FormProcsNamesCodeProcType;
IdListnonEmptyProdFormRecFcnsDeclCode: FormRecFcnsDeclCodeProcType;
IdListnonEmptyProdFormVarDeclCode: FormVarDeclCodeProcType;
IdListnonEmptyProdFormLinkCallCode: FormLinkCallCodeProcType;
IdListnonEmptyProdSyntaxFileCodes: SyntaxFileCodesProcType;

-- RopeListOneProd

RopeListOneProdData: TYPE = REF RopeListOneProdDataBody;
RopeListOneProdDataBody: TYPE = RECORD[
Rope: RopeNode];

RopeListOneProdProcs: RopeListNodeProcs;

BuildRopeListOneProdNode: PROC[position: INT, length: INT, Rope: RopeNode]
	RETURNS[RopeListNode];

RopeListOneProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
RopeListOneProdSyntaxFileCodes: SyntaxFileCodesProcType;
RopeListOneProdSpecialSyntaxTokenFileCode: SpecialSyntaxTokenFileCodeProcType;

-- RopeListManyProd

RopeListManyProdData: TYPE = REF RopeListManyProdDataBody;
RopeListManyProdDataBody: TYPE = RECORD[
RopeList: RopeListNode, Rope: RopeNode];

RopeListManyProdProcs: RopeListNodeProcs;

BuildRopeListManyProdNode: PROC[position: INT, length: INT, RopeList: RopeListNode, Rope: RopeNode]
	RETURNS[RopeListNode];

RopeListManyProdCollectRightSideSymbols: CollectRightSideSymbolsProcType;
RopeListManyProdSyntaxFileCodes: SyntaxFileCodesProcType;
RopeListManyProdSpecialSyntaxTokenFileCode: SpecialSyntaxTokenFileCodeProcType;
END..