DIRECTORY EDIFDataStructure, EDIFfing, EDIFGrammar, EDIFSemantics, HashTable; EDIFSemanticDefs1: CEDAR PROGRAM IMPORTS EDIFGrammar, EDIFSemantics, HashTable = {OPEN EDIFDataStructure, EDIFGrammar, EDIFSemantics; DefineEm: PROC = { SS[ DL[$EDIF, LIST[NameDef[], $Status, Star[$Keyword], Opt[$Rename], StarCh[LIST[$Design, $External, $Library, $Comment, $UserData]] ]], [BeforeEDIF, AfterEDIF]]; SS[ DL[$Status, LIST[Opt[$EDIFVersion], Opt[$EDIFLevel], StarCh[LIST[$Written, $Comment, $UserData]] ]], [BeforeStatus, AfterStatus]]; }; BeforeEDIF: Beforer = { ew: EDIFWhole = NEW [EDIFWholePrivate _ [ status: NIL, designs: HashTable.Create[equal: HashTable.RopeEqualModCase, hash: HashTable.HashRopeModCase], libraries: HashTable.Create[equal: HashTable.RopeEqualModCase, hash: HashTable.HashRopeModCase], externalLibraries: HashTable.Create[equal: HashTable.RopeEqualModCase, hash: HashTable.HashRopeModCase] ]]; context _ ew; }; AfterEDIF: Afterer = { ew: EDIFWhole = NARROW[context]; result _ ew; }; BeforeStatus: Beforer = { s: Status = NEW [StatusPrivate _ []]; WITH parentContext SELECT FROM ew: EDIFWhole => { IF ew.status # NIL THEN ERROR; ew.status _ s}; ENDCASE => ERROR; context _ s; }; AfterStatus: Afterer = { s: Status = NARROW[context]; IF s.level # unspecifiedLevel THEN SetLevel[s.level, 1]; result _ s; }; }. JEDIFSemanticDefs1.Mesa Spreitzer, February 20, 1986 12:24:53 pm PST ΚΉ– "cedar" style˜code™K™,—K˜KšΟk œD˜MK˜šΠbxœœ˜ Kšœ&˜-Kšœœ/˜6K˜šΟnœœ˜šœ˜Kšœœ:œ8˜„Kšœ˜—šœ˜Kšœ œ,œ$˜dK˜—K˜—K˜šœ˜šœœ˜)Kšœœ˜ Kšœ^˜^Kšœ`˜`Kšœg˜gK˜—K˜ Kšœ˜—K˜šœ˜Kšœœ ˜ K˜ Kšœ˜—K˜šœ˜Kšœ œ˜%šœœ˜šœ˜Kšœ œœœ˜K˜—Kšœœ˜—K˜ Kšœ˜—K˜šœ˜Kšœ œ ˜Kšœœ˜8Kšœ ˜ Kšœ˜—K˜K˜——…—69