Include [SaffronAG, SaffronTreeDecls, SaffronBaseDecls];

SaffronMakeType: Module = Begin

TypeExp

for TypeExp.record:	AbstractProduction [ MachineDependent, Monitored, RecList ]
let MakeType[tree, paintRecords, localContext] _ <localContext4, newTgn>
where  <localContext4, newTgn> _ CreateRecordTGN [ localContext3, paint,	
																			frozenFieldList] 
where <localContext3, frozenFieldList> _ FreezeFieldList [localContext2, fieldList]
where <localContext2, fieldList> _ MakeFieldList [RecList, paintRecords, localContext1]
where <localContext1, paint> _
if paintRecords then GetUniquePaint [localContext]
	    else <localContext, GetUnpaintedPaint [localContext]>
;
for TypeExp.enum:	AbstractProduction [ MachineDependent, ElementList ]
let MakeType[tree, paintRecords, localContext] _ MakeElementList [ElementList, localContext]
;

for TypeExp.ref:	AbstractProduction [ ReadOnly, TypeExp ]
let MakeType[tree, paintRecords, localContext] _ <localContext2, newTgn>
where <localContext2, newTgn> _ CreateRefTGN [localContext1,  refereeTgn, refereeTgn]
where <localContext1, refereeTgn> _ MakeType [TypeExp, paintRecords, localContext]
;


End.

SaffronMakeFieldList: Module = Begin

RecList

for RecList.empty: 	AbstractProduction [ ]
let MakeFieldList [tree, paintRecords, localContext] _ < localContext, CreateEmptyFieldList []>
;

for RecList.pairlist: 	AbstractProduction [ PairList ]
let MakeFieldList [tree,  paintRecords,localContext] _ <localContext1, fieldList>
where <localContext1, fieldList> _ 
AddPairsToFieldList [PairList, newFieldList, paintRecords, localContext]
where newFieldList _ CreateEmptyFieldList []
;

for RecList.typelist:	AbstractProduction [ TypeList ]
let MakeFieldList [tree, paintRecords, localContext] _ <localContext1, fieldList>
where <localContext1, fieldList> _ AddToFieldList [TypeList, newFieldList,  paintRecords, localContext]
where newFieldList _ CreateEmptyFieldList []
;

End.

SaffronAddToFieldList: Module = Begin

TypeList

for TypeList.many:	AbstractProduction [ TypeList.head, TypeList.tail ]
let AddToFieldList [tree, fieldList, paintRecords, localContext] _ 
AddToFieldList [ TypeList.tail, fieldList1, paintRecords, localContext1]
where <localContext1, fieldList1> _ 
AddToFieldList [ TypeList.head, fieldList, paintRecords, localContext]
;

for TypeList.one:	AbstractProduction [ TypeItem ]
let AddToFieldList [tree, fieldList, paintRecords, localContext] _  
AddToFieldList [ TypeItem, fieldList , paintRecords, localContext]
;

TypeItem

for TypeItem:	AbstractProduction [ TypeExp, Default ]
let AddToFieldList [tree, fieldList, paintRecords, localContext] _ <localContext1, fieldList1>
where fieldList1 _ AppendFieldToFieldList [ fieldList, field]
where field _ CreateUnnamedField [tgn]
where <localContext1, tgn> _ MakeType [TypeExp, paintRecords, localContext]
;

End.

SaffronAddPairsToFieldList: Module = Begin

PairList

for PairList.many:	AbstractProduction [ PairList.head, PairList.tail ]
let AddPairsToFieldList [tree, fieldList, paintRecords, localContext] _
AddPairsToFieldList [ PairList.tail, fieldList1, paintRecords, localContext1]
where <localContext1, fieldList1> _ 
AddPairsToFieldList [PairList.head, fieldList, paintRecords, localContext]
;

for PairList.one:	AbstractProduction [ PairItem ]
let AddPairsToFieldList [tree, fieldList, paintRecords, localContext] _
AddPairsToFieldList [tree, fieldList, paintRecords, localContext]
;

PairItem

for PairItem:	AbstractProduction [ IdentList, Access, TypeExp, Default ]
let AddPairsToFieldList [tree, fieldList, paintRecords, localContext] _
< localContext1, AddNamesToFieldList [IdentList, tgn, fieldList] >
where <localContext1, tgn> _ MakeType [TypeExp, paintRecords, localContext]
;

End.

SaffronAddNamesToFieldList: Module = Begin

IdentList

for IdentList.many:	AbstractProduction [ IdentList.head, IdentList.tail ]
let AddNamesToFieldList [tree, tgn, fieldList] _
AddNamesToFieldList [IdentList.tail, tgn, fieldList1]
where fieldList1 _ AddNamesToFieldList [IdentList.head, tgn, fieldList]
;

for IdentList.one:	AbstractProduction [ Ident ]
let AddNamesToFieldList [tree, tgn, fieldList] _
AddNamesToFieldList [Ident, tgn, fieldList]
;

Ident

for Ident.id:	AbstractProduction [ Id ]
let AddNamesToFieldList [tree, tgn, fieldList] _ AppendFieldToFieldList [fieldList, field]
where field _ CreateNamedField [Id, tgn]
;
End.

SaffronMakeElementList: Module = Begin

ElementList

for ElementList.empty:	AbstractProduction [ ]
let MakeElementList [tree, localContext] _ CreateEmptyEnumTypeTGN [localContext]
;

for ElementList.more:	AbstractProduction [ ElementList, Element ]
let MakeElementList [tree, localContext] _ <localContext1, tgn>
where localContext1 _ 
AppendElementToEnumTypeTGN [localContext2, tgn, elementName]
where <localContext2, tgn> _ MakeElementList [ElementList, localContext]
where elementName _ ElementName [Element]
;

End.

SaffronElementName: Module = Begin
for Element.id:	AbstractProduction [ Id ]
let ElementName [tree] _ Id
;

End;


����SaffronMethods.ThreeC4 (July 16, 1987 4:02:51 pm PDT)
Copyright Ó 1987 by Xerox Corporation. All rights reserved.
Lucy Hederman July 17, 1987 4:08:57 pm PDT


Element ???
There are other Element Productions !!!

eof...

Ê��˜�codešœ5™5K™;K™*—K™�J˜8J˜�KšÏnœ˜K˜�š˜˜�codetabšÐizœÏbœžœ)˜OšžœE˜HLšžœi˜nLšœS˜SL˜WLšœŒ˜Œ—Lšœ˜——™�šžœŸœžœ"˜FLšžœY˜\L˜—L˜�šžœŸœžœ˜9šžœE˜HKšœU˜UKšœR˜R—Kšœ˜—K˜�—K˜�—K˜K˜�K˜$˜�K˜˜�šœžœ˜*Kšœ_˜_K˜—K˜�šœžœ
˜6šœQ˜QKšœl˜lK˜,—K˜—K˜�šœŸœžœ
˜5šœQ˜QKšœg˜gK˜,—K˜———K˜�K˜K˜�K˜%˜�K˜˜�šžœŸ
œžœ!˜F˜ŒK˜k—K˜—K˜�šžœŸœžœ
˜1K˜‡K˜—K˜�—˜K˜�šžœœžœ˜5˜^K˜=K˜&K˜K—K˜——K˜�˜K˜�——˜*K˜�˜K˜�šžœŸ
œžœ!˜F˜•K˜o—K˜—K˜�šžœŸœžœ
˜1K˜‰K˜—K˜�—˜K˜�šžœÐbnœžœ(˜H˜ŠK˜K—K˜——K˜�˜K˜�——˜*K˜�K˜	˜�šžœŸœžœ#˜I˜fK˜G—K˜—K˜�šžœŸ
œžœ
˜/K˜\K˜—K˜�—˜K˜�šžœŸœžœ˜'˜ZK˜(—K˜——K˜K˜�—˜&K˜�K˜˜�šžœŸœžœ˜-K˜PK˜K˜�—šžœŸœžœ˜A˜?K˜SK˜HK˜)—K˜—K˜�—K˜K˜�—šœ˜"headšÏz™L™'L™�šžœŸ
œžœ˜)Kšžœ˜Kšœ˜—K˜�—K˜K˜�—K˜�K™K™�—�…—����Š��í��