DIRECTORY
	ThreeC4BaseDecl1Def,
	ThreeC4RecFcnImplAbGramDef,
	ThreeC4BasicAbTypesDef;

ThreeC4RecFcnImplAbGramImpl: CEDAR PROGRAM IMPORTS ThreeC4RecFcnImplAbGramDef EXPORTS ThreeC4RecFcnImplAbGramDef= 
BEGIN
OPEN ThreeC4BaseDecl1Def, ThreeC4RecFcnImplAbGramDef, ThreeC4BasicAbTypesDef;

-- AbProductionFcnImplProd

AbProductionFcnImplProdProcs: PUBLIC AbProductionFcnImplNodeProcs ←
	NEW[AbProductionFcnImplNodeProcsBody ← [AbProductionFcnImplProdImplFileCode]];

BuildAbProductionFcnImplProdNode: PUBLIC PROC[position: INT, length: INT, ModId: ModIdNode, ModIdList: ModIdListNode, RecFcnImplList: RecFcnImplListNode]
	RETURNS[AbProductionFcnImplNode] =
		BEGIN
		data: AbProductionFcnImplProdData ←
			NEW[AbProductionFcnImplProdDataBody←[
			ModId, ModIdList, RecFcnImplList]];
		RETURN[NEW[AbProductionFcnImplNodeBody←[position, length, AbProductionFcnImplProdProcs, data]]];
		END;


-- RecFcnImplListoneProd

RecFcnImplListoneProdProcs: PUBLIC RecFcnImplListNodeProcs ←
	NEW[RecFcnImplListNodeProcsBody ← [RecFcnImplListoneProdProdImplFileCode]];

BuildRecFcnImplListoneProdNode: PUBLIC PROC[position: INT, length: INT, Identifier: IdentifierNode, IdList: IdListNode, RecExpression: RecExpressionNode]
	RETURNS[RecFcnImplListNode] =
		BEGIN
		data: RecFcnImplListoneProdData ←
			NEW[RecFcnImplListoneProdDataBody←[
			Identifier, IdList, RecExpression]];
		RETURN[NEW[RecFcnImplListNodeBody←[position, length, RecFcnImplListoneProdProcs, data]]];
		END;


-- RecFcnImplListmanyProd

RecFcnImplListmanyProdProcs: PUBLIC RecFcnImplListNodeProcs ←
	NEW[RecFcnImplListNodeProcsBody ← [RecFcnImplListmanyProdProdImplFileCode]];

BuildRecFcnImplListmanyProdNode: PUBLIC PROC[position: INT, length: INT, RecFcnImplLista: RecFcnImplListNode, RecFcnImplListb: RecFcnImplListNode]
	RETURNS[RecFcnImplListNode] =
		BEGIN
		data: RecFcnImplListmanyProdData ←
			NEW[RecFcnImplListmanyProdDataBody←[
			RecFcnImplLista, RecFcnImplListb]];
		RETURN[NEW[RecFcnImplListNodeBody←[position, length, RecFcnImplListmanyProdProcs, data]]];
		END;


-- RecExpressionwithWhereListProd

RecExpressionwithWhereListProdProcs: PUBLIC RecExpressionNodeProcs ←
	NEW[RecExpressionNodeProcsBody ← [RecExpressionwithWhereListProdCompForArgs, RecExpressionwithWhereListProdCompForVars, RecExpressionwithWhereListProdCountVals, RecExpressionwithWhereListProdFormFcnImplGraph]];

BuildRecExpressionwithWhereListProdNode: PUBLIC PROC[position: INT, length: INT, RecExpression: RecExpressionNode, WhereExpSeq: WhereExpSeqNode]
	RETURNS[RecExpressionNode] =
		BEGIN
		data: RecExpressionwithWhereListProdData ←
			NEW[RecExpressionwithWhereListProdDataBody←[
			RecExpression, WhereExpSeq]];
		RETURN[NEW[RecExpressionNodeBody←[position, length, RecExpressionwithWhereListProdProcs, data]]];
		END;


-- RecExpressioncondProd

RecExpressioncondProdProcs: PUBLIC RecExpressionNodeProcs ←
	NEW[RecExpressionNodeProcsBody ← [RecExpressioncondProdCompForArgs, RecExpressioncondProdCompForVars, RecExpressioncondProdCountVals, RecExpressioncondProdFormFcnImplGraph]];

BuildRecExpressioncondProdNode: PUBLIC PROC[position: INT, length: INT, RecExpressionifClause: RecExpressionNode, RecExpressionthenClause: RecExpressionNode, RecExpressionelseClause: RecExpressionNode]
	RETURNS[RecExpressionNode] =
		BEGIN
		data: RecExpressioncondProdData ←
			NEW[RecExpressioncondProdDataBody←[
			RecExpressionifClause, RecExpressionthenClause, RecExpressionelseClause]];
		RETURN[NEW[RecExpressionNodeBody←[position, length, RecExpressioncondProdProcs, data]]];
		END;


-- RecExpressioncallProd

RecExpressioncallProdProcs: PUBLIC RecExpressionNodeProcs ←
	NEW[RecExpressionNodeProcsBody ← [RecExpressioncallProdCompForArgs, RecExpressioncallProdCompForVars, RecExpressioncallProdCountVals, RecExpressioncallProdFormFcnImplGraph]];

BuildRecExpressioncallProdNode: PUBLIC PROC[position: INT, length: INT, Identifier: IdentifierNode, RecExpSeq: RecExpSeqNode]
	RETURNS[RecExpressionNode] =
		BEGIN
		data: RecExpressioncallProdData ←
			NEW[RecExpressioncallProdDataBody←[
			Identifier, RecExpSeq]];
		RETURN[NEW[RecExpressionNodeBody←[position, length, RecExpressioncallProdProcs, data]]];
		END;


-- RecExpressionseqProd

RecExpressionseqProdProcs: PUBLIC RecExpressionNodeProcs ←
	NEW[RecExpressionNodeProcsBody ← [RecExpressionseqProdCompForArgs, RecExpressionseqProdCompForVars, RecExpressionseqProdCountVals, RecExpressionseqProdFormFcnImplGraph]];

BuildRecExpressionseqProdNode: PUBLIC PROC[position: INT, length: INT, RecExpSeq: RecExpSeqNode]
	RETURNS[RecExpressionNode] =
		BEGIN
		data: RecExpressionseqProdData ←
			NEW[RecExpressionseqProdDataBody←[
			RecExpSeq]];
		RETURN[NEW[RecExpressionNodeBody←[position, length, RecExpressionseqProdProcs, data]]];
		END;


-- RecExpressionidProd

RecExpressionidProdProcs: PUBLIC RecExpressionNodeProcs ←
	NEW[RecExpressionNodeProcsBody ← [RecExpressionidProdCompForArgs, RecExpressionidProdCompForVars, RecExpressionidProdCountVals, RecExpressionidProdFormFcnImplGraph]];

BuildRecExpressionidProdNode: PUBLIC PROC[position: INT, length: INT, Identifier: IdentifierNode]
	RETURNS[RecExpressionNode] =
		BEGIN
		data: RecExpressionidProdData ←
			NEW[RecExpressionidProdDataBody←[
			Identifier]];
		RETURN[NEW[RecExpressionNodeBody←[position, length, RecExpressionidProdProcs, data]]];
		END;


-- RecExpressionmodIdProd

RecExpressionmodIdProdProcs: PUBLIC RecExpressionNodeProcs ←
	NEW[RecExpressionNodeProcsBody ← [RecExpressionmodIdProdCompForArgs, RecExpressionmodIdProdCompForVars, RecExpressionmodIdProdCountVals, RecExpressionmodIdProdFormFcnImplGraph]];

BuildRecExpressionmodIdProdNode: PUBLIC PROC[position: INT, length: INT, Identifiera: IdentifierNode, Identifierb: IdentifierNode]
	RETURNS[RecExpressionNode] =
		BEGIN
		data: RecExpressionmodIdProdData ←
			NEW[RecExpressionmodIdProdDataBody←[
			Identifiera, Identifierb]];
		RETURN[NEW[RecExpressionNodeBody←[position, length, RecExpressionmodIdProdProcs, data]]];
		END;


-- RecExpressionropeProd

RecExpressionropeProdProcs: PUBLIC RecExpressionNodeProcs ←
	NEW[RecExpressionNodeProcsBody ← [RecExpressionropeProdCompForArgs, RecExpressionropeProdCompForVars, RecExpressionropeProdCountVals, RecExpressionropeProdFormFcnImplGraph]];

BuildRecExpressionropeProdNode: PUBLIC PROC[position: INT, length: INT, Rope: RopeNode]
	RETURNS[RecExpressionNode] =
		BEGIN
		data: RecExpressionropeProdData ←
			NEW[RecExpressionropeProdDataBody←[
			Rope]];
		RETURN[NEW[RecExpressionNodeBody←[position, length, RecExpressionropeProdProcs, data]]];
		END;


-- RecExpressionnumbProd

RecExpressionnumbProdProcs: PUBLIC RecExpressionNodeProcs ←
	NEW[RecExpressionNodeProcsBody ← [RecExpressionnumbProdCompForArgs, RecExpressionnumbProdCompForVars, RecExpressionnumbProdCountVals, RecExpressionnumbProdFormFcnImplGraph]];

BuildRecExpressionnumbProdNode: PUBLIC PROC[position: INT, length: INT, NonNegInteger: NonNegIntegerNode]
	RETURNS[RecExpressionNode] =
		BEGIN
		data: RecExpressionnumbProdData ←
			NEW[RecExpressionnumbProdDataBody←[
			NonNegInteger]];
		RETURN[NEW[RecExpressionNodeBody←[position, length, RecExpressionnumbProdProcs, data]]];
		END;


-- RecExpressionsourcePositionProd

RecExpressionsourcePositionProdProcs: PUBLIC RecExpressionNodeProcs ←
	NEW[RecExpressionNodeProcsBody ← [RecExpressionsourcePositionProdCompForArgs, RecExpressionsourcePositionProdCompForVars, RecExpressionsourcePositionProdCountVals, RecExpressionsourcePositionProdFormFcnImplGraph]];

BuildRecExpressionsourcePositionProdNode: PUBLIC PROC[position: INT, length: INT, ModId: ModIdNode]
	RETURNS[RecExpressionNode] =
		BEGIN
		data: RecExpressionsourcePositionProdData ←
			NEW[RecExpressionsourcePositionProdDataBody←[
			ModId]];
		RETURN[NEW[RecExpressionNodeBody←[position, length, RecExpressionsourcePositionProdProcs, data]]];
		END;


-- RecExpressionsourceLengthProd

RecExpressionsourceLengthProdProcs: PUBLIC RecExpressionNodeProcs ←
	NEW[RecExpressionNodeProcsBody ← [RecExpressionsourceLengthProdCompForArgs, RecExpressionsourceLengthProdCompForVars, RecExpressionsourceLengthProdCountVals, RecExpressionsourceLengthProdFormFcnImplGraph]];

BuildRecExpressionsourceLengthProdNode: PUBLIC PROC[position: INT, length: INT, ModId: ModIdNode]
	RETURNS[RecExpressionNode] =
		BEGIN
		data: RecExpressionsourceLengthProdData ←
			NEW[RecExpressionsourceLengthProdDataBody←[
			ModId]];
		RETURN[NEW[RecExpressionNodeBody←[position, length, RecExpressionsourceLengthProdProcs, data]]];
		END;


-- RecExpSeqemptyProd

RecExpSeqemptyProdProcs: PUBLIC RecExpSeqNodeProcs ←
	NEW[RecExpSeqNodeProcsBody ← [RecExpSeqemptyProdCompForArgs, RecExpSeqemptyProdCompForVars, RecExpSeqemptyProdCountVals, RecExpSeqemptyProdFormFcnImplGraph]];

BuildRecExpSeqemptyProdNode: PUBLIC PROC[position: INT, length: INT]
	RETURNS[RecExpSeqNode] =
		BEGIN
		RETURN[NEW[RecExpSeqNodeBody←[position, length, RecExpSeqemptyProdProcs, NIL]]];
		END;


-- RecExpSeqoneProd

RecExpSeqoneProdProcs: PUBLIC RecExpSeqNodeProcs ←
	NEW[RecExpSeqNodeProcsBody ← [RecExpSeqoneProdCompForArgs, RecExpSeqoneProdCompForVars, RecExpSeqoneProdCountVals, RecExpSeqoneProdFormFcnImplGraph]];

BuildRecExpSeqoneProdNode: PUBLIC PROC[position: INT, length: INT, RecExpression: RecExpressionNode]
	RETURNS[RecExpSeqNode] =
		BEGIN
		data: RecExpSeqoneProdData ←
			NEW[RecExpSeqoneProdDataBody←[
			RecExpression]];
		RETURN[NEW[RecExpSeqNodeBody←[position, length, RecExpSeqoneProdProcs, data]]];
		END;


-- RecExpSeqmanyProd

RecExpSeqmanyProdProcs: PUBLIC RecExpSeqNodeProcs ←
	NEW[RecExpSeqNodeProcsBody ← [RecExpSeqmanyProdCompForArgs, RecExpSeqmanyProdCompForVars, RecExpSeqmanyProdCountVals, RecExpSeqmanyProdFormFcnImplGraph]];

BuildRecExpSeqmanyProdNode: PUBLIC PROC[position: INT, length: INT, RecExpSeqa: RecExpSeqNode, RecExpSeqb: RecExpSeqNode]
	RETURNS[RecExpSeqNode] =
		BEGIN
		data: RecExpSeqmanyProdData ←
			NEW[RecExpSeqmanyProdDataBody←[
			RecExpSeqa, RecExpSeqb]];
		RETURN[NEW[RecExpSeqNodeBody←[position, length, RecExpSeqmanyProdProcs, data]]];
		END;


-- WhereExpSeqoneProd

WhereExpSeqoneProdProcs: PUBLIC WhereExpSeqNodeProcs ←
	NEW[WhereExpSeqNodeProcsBody ← [WhereExpSeqoneProdCompWhere, WhereExpSeqoneProdFormFcnImplWhereGraph]];

BuildWhereExpSeqoneProdNode: PUBLIC PROC[position: INT, length: INT, IdList: IdListNode, RecExpression: RecExpressionNode]
	RETURNS[WhereExpSeqNode] =
		BEGIN
		data: WhereExpSeqoneProdData ←
			NEW[WhereExpSeqoneProdDataBody←[
			IdList, RecExpression]];
		RETURN[NEW[WhereExpSeqNodeBody←[position, length, WhereExpSeqoneProdProcs, data]]];
		END;


-- WhereExpSeqmanyProd

WhereExpSeqmanyProdProcs: PUBLIC WhereExpSeqNodeProcs ←
	NEW[WhereExpSeqNodeProcsBody ← [WhereExpSeqmanyProdCompWhere, WhereExpSeqmanyProdFormFcnImplWhereGraph]];

BuildWhereExpSeqmanyProdNode: PUBLIC PROC[position: INT, length: INT, WhereExpSeqa: WhereExpSeqNode, WhereExpSeqb: WhereExpSeqNode]
	RETURNS[WhereExpSeqNode] =
		BEGIN
		data: WhereExpSeqmanyProdData ←
			NEW[WhereExpSeqmanyProdDataBody←[
			WhereExpSeqa, WhereExpSeqb]];
		RETURN[NEW[WhereExpSeqNodeBody←[position, length, WhereExpSeqmanyProdProcs, data]]];
		END;

END..