DefineEm:
PROC = {
[] ← DL[$EDIF, LIST[NameDef[], $Status, Star[$Keyword], Opt[$Rename], StarCh[LIST[$Design, $External, $Library, $Comment, $UserData]] ]];
[] ← DL[$Status, LIST[Opt[$EDIFVersion], Opt[$EDIFLevel], StarCh[LIST[$Written, $Comment, $UserData]] ]];
[] ← DL[$EDIFVersion, LIST[$Integer, $Integer, $Integer]];
[] ← DL[$EDIFLevel, LIST[$EDIFLevelName]];
[] ← DC[$EDIFLevelName, LIST[NEW[INT ← 0], NEW[INT ← 1], NEW[INT ← 2]]];
[] ← DL[$Written, LIST[$TimeStamp, StarCh[LIST[$Accounting, $Comment, $UserData]] ]];
[] ← DL[$TimeStamp, LIST[$Integer, $Integer, $Integer, $Integer, $Integer, $Integer]];
[] ← DL[$Accounting, LIST[$Identifier, Opt[$String]]];
[] ← DL[$Comment, LIST[Star[$String]]];
[] ← DL[$UserData, LIST[$Identifier, Star[$Form]]];
[] ← DL[$Keyword, LIST[NameDef[], StarCh[LIST[$Formal, $Optional, $Extra, $FormalValue, $ForEach, $Comment]] ]];
[] ← DL[$Formal, LIST[Star[NameDef[]]]];
[] ← DL[$Optional, LIST[NameDef[], $FormalValue]];
[] ← DL[$Extra, LIST[Star[NameDef[]]]];
[] ← DC[$FormalValue, LIST[$String, $Integer, NameRef[], $BuildName, $Build]];
[] ← DL[$BuildName, LIST[$String]];
[] ← DL[$Build, LIST[$KeyRef, StarCh[LIST[$FormalValue, $ForEach, $Index, $Comment]] ]];
[] ← DC[$KeyRef, LIST[$Identifier, $String]];
[] ← DL[$ForEach, LIST[$NameRefs, StarCh[LIST[$FormalValue, $ForEach, $Index, $Comment]] ]];
[] ← DL[$Index, LIST[NameRef[]]];
[] ← DQ[$NameRefs, LIST[$Multiple, Star[NameRef[]]], NameRef[]];
[] ← DC[$NameRef, LIST[$Name, $Member]];
[] ← DC[$Name, LIST[$Identifier]]; --I made this up
[] ← DL[$Member, LIST[$Name, Star[$WholeNumber]]];
[] ← DC[$WholeNumber, LIST[$Integer], 0, 0];
[] ← DC[$WholeNumber, LIST[$Expression], 1];
[] ← DL[$Rename, LIST[NameRef[], $String]];
[] ← DL[$Design, LIST[NameDef[], $Reference, Opt[$Status], Opt[$Rename], StarCh[LIST[$Comment, $Property]] ]];
[] ← DQ[$Reference, LIST[$Qualify, Star[$NameRef]], $NameRef];
[] ← DL[$Property, LIST[$PropertyType, $Identifier, Opt[$Data], StarCh[LIST[$Comment, $Property]] ]];
[] ← DC[$PropertyType, LIST["EDIF", "User", $Identifier]];
[] ← DC[$Data, LIST[$String, $Value, $Boolean]];
[] ← DC[$Value, LIST[$Number, $MiNoMax]];
[] ← DC[$Number, LIST[$Integer, $ScaledInteger], 0, 0];
[] ← DC[$Number, LIST[$Expression], 1];
[] ← DL2[$ScaledInteger, LIST[$e, $Integer, $Integer]];
[] ← DL[$MiNoMax, LIST[$RangeValue, $RangeValue, $RangeValue]];
[] ← DC[$RangeValue, LIST[$Number, $Undefined, $Unconstrained]];
[] ← DL[$Undefined, LIST[]];
[] ← DL[$Unconstrained, LIST[]];
[] ← DC[$Boolean, LIST[$True, $False], 0, 0];
[] ← DC[$Boolean, LIST[$Expression], 1];
[] ← DL[$True, LIST[]];
[] ← DL[$False, LIST[]];
[] ← DL[$External, LIST[NameDef[], Opt[$Status], Opt[$Rename]]];
[] ← DL[$Library, LIST[NameDef[], Opt[$Status], Opt[$Technology], Opt[$Rename], StarCh[LIST[$Cell, $Comment, $UserData]] ]];
}.