Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!rutgers!sri-spam!ames!sdcsvax!ucbvax!ucbcad!moto From: moto@ucbcad.berkeley.edu (EDIF Committee) Newsgroups: comp.lsi Subject: EDIF V 2 0 0 grammar (34K bytes long!) Message-ID: <1450@ucbcad.berkeley.edu> Date: Tue, 19-May-87 13:41:00 EDT Article-I.D.: ucbcad.1450 Posted: Tue May 19 13:41:00 1987 Date-Received: Wed, 20-May-87 06:00:24 EDT Organization: CAD Group, U.C. Berkeley Lines: 1608 Keywords: EDIF standards Here as requested is the electronic copy of the EDIF BNF grammar: (should go 1605 lines to <****END OF EDIF BNF****>) EDIF ::= '(' 'EDIF' EDIFFileNameDef EDIFVersion EDIFLevel keywordMap { < status > | external | library | design | comment | userData } ')' EDIFFileNameDef ::= nameDef EDIFLevel ::= '(' 'EDIFLevel' integerToken ')' EDIFVersion ::= '(' 'EDIFVersion' integerToken integerToken integerToken ')' acLoad ::= '(' 'acLoad' ( miNoMaxValue | miNoMaxDisplay ) ')' after ::= '(' 'after' miNoMaxValue { follow | maintain | logicAssign | comment | userData } ')' annotate ::= '(' 'annotate' ( stringValue | stringDisplay ) ')' apply ::= '(' 'apply' cycle { logicInput | logicOutput | comment | userData } ')' arc ::= '(' 'arc' pointValue pointValue pointValue ')' array ::= '(' 'array' nameDef integerValue { integerValue } ')' arrayMacro ::= '(' 'arrayMacro' plug ')' arrayRelatedInfo ::= '(' 'arrayRelatedInfo' ( baseArray | arraySite | arrayMacro ) { comment | userData } ')' arraySite ::= '(' 'arraySite' socket ')' atLeast ::= '(' 'atLeast' numberValue ')' atMost ::= '(' 'atMost' numberValue ')' author ::= '(' 'author' stringToken ')' baseArray ::= '(' 'baseArray' ')' becomes ::= '(' 'becomes' logicNameRef | logicList | logicOneOf ')' between ::= '(' 'between' ( atLeast | greaterThan ) ( atMost | lessThan ) ')' boolean ::= '(' 'boolean' { booleanValue | booleanDisplay | boolean } ')' booleanDisplay ::= '(' 'booleanDisplay' booleanValue { display } ')' booleanMap ::= '(' 'booleanMap' booleanValue ')' booleanValue ::= false | true borderPattern ::= '(' 'borderPattern' integerValue integerValue boolean ')' borderWidth ::= '(' 'borderWidth' integerValue ')' boundingBox ::= '(' 'boundingBox' rectangle ')' cell ::= '(' 'cell' cellNameDef cellType { < status > | < viewMap > | view | comment | userData | property } ')' cellNameDef ::= nameDef cellNameRef ::= nameRef cellRef ::= '(' 'cellRef' cellNameRef [ libraryRef ] ')' cellType ::= '(' 'cellType' ( 'TIE' | 'RIPPER' | 'GENERIC' ) ')' change ::= '(' 'change' ( portNameRef | portRef | portList ) [ becomes | transition ] ')' circle ::= '(' 'circle' pointValue pointValue { property } ')' color ::= '(' 'color' scaledInteger scaledInteger scaledInteger ')' comment ::= '(' 'comment' { stringToken } ')' commentGraphics ::= '(' 'commentGraphics' { annotate | figure | instance | < boundingBox > | property | comment | userData } ')' compound ::= '(' 'compound' { logicNameRef } ')' connectLocation ::= '(' 'connectLocation' { figure } ')' contents ::= '(' 'contents' { instance | offPageConnector | figure | section | net | netBundle | page | commentGraphics | portImplementation | timing | simulate | when | follow | logicPort | < boundingBox > | comment | userData } ')' cornerType ::= '(' 'cornerType' ( 'EXTEND' | 'TRUNCATE' | 'ROUND' ) ')' criticality ::= '(' 'criticality' ( integerValue | integerDisplay ) ')' currentMap ::= '(' 'currentMap' miNoMaxValue ')' curve ::= '(' 'curve' { arc | pointValue } ')' cycle ::= '(' 'cycle' integerValue [ duration ] ')' dataOrigin ::= '(' 'dataOrigin' stringToken [ version ] ')' dcFaninLoad ::= '(' 'dcFaninLoad' ( numberValue | numberDisplay ) ')' dcFanoutLoad ::= '(' 'dcFanoutLoad' ( numberValue | numberDisplay ) ')' dcMaxFanin ::= '(' 'dcMaxFanin' ( numberValue | numberDisplay ) ')' dcMaxFanout ::= '(' 'dcMaxFanout' ( numberValue | numberDisplay ) ')' delay ::= '(' 'delay' ( miNoMaxValue | miNoMaxDisplay ) ')' delta ::= '(' 'delta' { pointValue } ')' derivation ::= '(' 'derivation' ( 'CALCULATED' | 'MEASURED' | 'REQUIRED' ) ')' design ::= '(' 'design' designNameDef cellRef { < status > | comment | property | userData } ')' designNameDef ::= nameDef designator ::= '(' 'designator' ( stringValue | stringDisplay ) ')' difference ::= '(' 'difference' ( figureGroupRef | figureOp ) { figureGroupRef | figureOp } ')' direction ::= '(' 'direction' ( 'INPUT' | 'OUTPUT' | 'INOUT' ) ')' display ::= '(' 'display' ( figureGroupNameRef | figureGroupOverride ) [ justify ] [ orientation ] [ origin ] ')' dominates ::= '(' 'dominates' { logicNameRef } ')' dot ::= '(' 'dot' pointValue { property } ')' duration ::= '(' 'duration' numberValue ')' e ::= '(' 'e' integerToken integerToken ')' enclosureDistance ::= '(' 'enclosureDistance' ruleNameDef figureGroupObject figureGroupObject ( range | singleValueSet ) { comment | userData } ')' endType ::= '(' 'endType' ( 'EXTEND' | 'TRUNCATE' | 'ROUND' ) ')' entry ::= '(' 'entry' ( match | change | steady ) ( logicRef | portRef | noChange | table ) [ delay | loadDelay ] ')' event ::= '(' 'event' ( portRef | portList | portGroup | netRef | netGroup ) { transition | becomes } ')' exactly ::= '(' 'exactly' numberValue ')' external ::= '(' 'external' libraryNameDef EDIFLevel technology { < status > | cell | comment | userData } ')' fabricate ::= '(' 'fabricate' layerNameDef figureGroupNameRef ')' false ::= '(' 'false' ')' figure ::= '(' 'figure' ( figureGroupNameRef | figureGroupOverride ) { circle | dot | openShape | path | polygon | rectangle | shape | comment | userData } ')' figureArea ::= '(' 'figureArea' ruleNameDef figureGroupObject ( range | singleValueSet ) { comment | userData } ')' figureGroup ::= '(' 'figureGroup' figureGroupNameDef { < cornerType > | < endType > | < pathWidth > | < borderWidth > | < color > | < fillPattern > | < borderPattern > | < textHeight > | < visible > | includeFigureGroup | comment | property | userData } ')' figureGroupNameDef ::= nameDef figureGroupNameRef ::= nameRef figureGroupObject ::= '(' 'figureGroupObject' ( figureGroupNameRef | figureGroupRef | figureOp ) ')' figureGroupOverride ::= '(' 'figureGroupOverride' figureGroupNameRef { < cornerType > | < endType > | < pathWidth > | < borderWidth > | < color > | < fillPattern > | < borderPattern > | < textHeight > | < visible > | comment | property | userData } ')' figureGroupRef ::= '(' 'figureGroupRef' figureGroupNameRef [ libraryRef ] ')' figureOp ::= intersection | union | difference | inverse | oversize figurePerimeter ::= '(' 'figurePerimeter' ruleNameDef figureGroupObject ( range | singleValueSet ) { comment | userData } ')' figureWidth ::= '(' 'figureWidth' ruleNameDef figureGroupObject ( range | singleValueSet ) { comment | userData } ')' fillPattern ::= '(' 'fillPattern' integerValue integerValue boolean ')' follow ::= '(' 'follow' ( portNameRef | portRef ) ( portRef | table ) [ delay | loadDelay ] ')' forbiddenEvent ::= '(' 'forbiddenEvent' timeInterval { event } ')' form ::= '(' keywordNameRef { integerToken | stringToken | identifier | form } ')' globalPortRef ::= '(' 'globalPortRef' portNameRef ')' greaterThan ::= '(' 'greaterThan' numberValue ')' gridMap ::= '(' 'gridMap' numberValue numberValue ')' ignore ::= '(' 'ignore' ')' includeFigureGroup ::= '(' 'includeFigureGroup' ( figureGroupRef | figureOp ) ')' initial ::= '(' 'initial' ')' instance ::= '(' 'instance' instanceNameDef ( viewRef | viewList ) { < transform > | parameterAssign | portInstance | timing | < designator > | property | comment | userData } ')' instanceBackAnnotate ::= '(' 'instanceBackAnnotate' instanceRef { < designator > | timing | property | comment } ')' instanceGroup ::= '(' 'instanceGroup' { instanceRef } ')' instanceMap ::= '(' 'instanceMap' { instanceRef | instanceGroup | comment | userData } ')' instanceNameDef ::= nameDef | array instanceNameRef ::= nameRef | member instanceRef ::= '(' 'instanceRef' instanceNameRef [ instanceRef | viewRef ] ')' integer ::= '(' 'integer' { integerValue | integerDisplay | integer } ')' integerDisplay ::= '(' 'integerDisplay' integerValue { display } ')' integerValue ::= integerToken interFigureGroupSpacing ::= '(' 'interFigureGroupSpacing' ruleNameDef figureGroupObject figureGroupObject ( range | singleValueSet ) { comment | userData } ')' interface ::= '(' 'interface' { port | portBundle | < symbol > | < protectionFrame > | < arrayRelatedInfo > | parameter | joined | mustJoin | weakJoined | permutable | timing | simulate | < designator > | property | comment | userData } ')' intersection ::= '(' 'intersection' ( figureGroupRef | figureOp ) { figureGroupRef | figureOp } ')' intraFigureGroupSpacing ::= '(' 'intraFigureGroupSpacing' ruleNameDef figureGroupObject ( range | singleValueSet ) { comment | userData } ')' inverse ::= '(' 'inverse' ( figureGroupRef | figureOp ) ')' isolated ::= '(' 'isolated' ')' joined ::= '(' 'joined' { portRef | portList | globalPortRef } ')' justify ::= '(' 'justify' ( 'UPPERLEFT' | 'UPPERCENTER' | 'UPPERRIGHT' | 'CENTERLEFT' | 'CENTERCENTER' | 'CENTERRIGHT' | 'LOWERLEFT' | 'LOWERCENTER' | 'LOWERRIGHT' ) ')' keywordDisplay ::= '(' 'keywordDisplay' keywordNameRef { display } ')' keywordLevel ::= '(' 'keywordLevel' integerToken ')' keywordMap ::= '(' 'keywordMap' keywordLevel { comment } ')' keywordNameRef ::= identifier layerNameDef ::= nameDef lessThan ::= '(' 'lessThan' numberValue ')' library ::= '(' 'library' libraryNameDef EDIFLevel technology { < status > | cell | comment | userData } ')' libraryNameDef ::= nameDef libraryNameRef ::= nameRef libraryRef ::= '(' 'libraryRef' libraryNameRef ')' listOfNets ::= '(' 'listOfNets' { net } ')' listOfPorts ::= '(' 'listOfPorts' { port | portBundle } ')' loadDelay ::= '(' 'loadDelay' ( miNoMaxValue | miNoMaxDisplay ) ( miNoMaxValue | miNoMaxDisplay ) ')' logicAssign ::= '(' 'logicAssign' ( portNameRef | portRef ) ( portRef | logicRef | table ) [ delay | loadDelay ] ')' logicInput ::= '(' 'logicInput' ( portList | portRef | portNameRef ) logicWaveform ')' logicList ::= '(' 'logicList' { logicNameRef | logicOneOf | ignore } ')' logicMapInput ::= '(' 'logicMapInput' { logicRef } ')' logicMapOutput ::= '(' 'logicMapOutput' { logicRef } ')' logicNameDef ::= nameDef logicNameRef ::= nameRef logicOneOf ::= '(' 'logicOneOf' { logicNameRef | logicList } ')' logicOutput ::= '(' 'logicOutput' ( portList | portRef | portNameRef ) logicWaveform ')' logicPort ::= '(' 'logicPort' portNameDef { property | comment | userData } ')' logicRef ::= '(' 'logicRef' logicNameRef [ libraryRef ] ')' logicValue ::= '(' 'logicValue' logicNameDef { < voltageMap > | < currentMap > | < booleanMap > | < compound > | < weak > | < strong > | < dominates > | < logicMapOutput > | < logicMapInput > | < isolated > | resolves | property | comment | userData } ')' logicWaveform ::= '(' 'logicWaveform' { logicNameRef | logicList | logicOneOf | ignore } ')' maintain ::= '(' 'maintain' ( portNameRef | portRef ) [ delay | loadDelay ] ')' match ::= '(' 'match' ( portNameRef | portRef | portList ) ( logicNameRef | logicList | logicOneOf ) ')' member ::= '(' 'member' nameRef integerValue { integerValue } ')' miNoMax ::= '(' 'miNoMax' { miNoMaxValue | miNoMaxDisplay | miNoMax } ')' miNoMaxDisplay ::= '(' 'miNoMaxDisplay' miNoMaxValue { display } ')' miNoMaxValue ::= mnm | numberValue mnm ::= '(' 'mnm' ( numberValue | undefined | unconstrained ) ( numberValue | undefined | unconstrained ) ( numberValue | undefined | unconstrained ) ')' multipleValueSet ::= '(' 'multipleValueSet' { rangeVector } ')' mustJoin ::= '(' 'mustJoin' { portRef | portList | weakJoined | joined } ')' name ::= '(' 'name' identifier { display } ')' nameDef ::= identifier | name | rename nameRef ::= identifier | name net ::= '(' 'net' netNameDef joined { < criticality > | netDelay | figure | net | instance | commentGraphics | property | comment | userData } ')' netBackAnnotate ::= '(' 'netBackAnnotate' netRef { netDelay | < criticality > | property | comment } ')' netBundle ::= '(' 'netBundle' netNameDef listOfNets { figure | commentGraphics | property | comment | userData } ')' netDelay ::= '(' 'netDelay' derivation delay { transition | becomes } ')' netGroup ::= '(' 'netGroup' { netNameRef | netRef } ')' netMap ::= '(' 'netMap' { netRef | netGroup | comment | userData } ')' netNameDef ::= nameDef | array netNameRef ::= nameRef | member netRef ::= '(' 'netRef' netNameRef [ netRef | instanceRef | viewRef ] ')' noChange ::= '(' 'noChange' ')' nonPermutable ::= '(' 'nonPermutable' { portRef | permutable } ')' notAllowed ::= '(' 'notAllowed' ruleNameDef figureGroupObject { comment | userData } ')' notchSpacing ::= '(' 'notchSpacing' ruleNameDef figureGroupObject ( range | singleValueSet ) { comment | userData } ')' number ::= '(' 'number' { numberValue | numberDisplay | number } ')' numberDefinition ::= '(' 'numberDefinition' { scale | < gridMap > | comment } ')' numberDisplay ::= '(' 'numberDisplay' numberValue { display } ')' numberValue ::= scaledInteger offPageConnector ::= '(' 'offPageConnector' portNameDef { < unused > | property | comment | userData } ')' offsetEvent ::= '(' 'offsetEvent' event numberValue ')' openShape ::= '(' 'openShape' curve { property } ')' orientation ::= '(' 'orientation' ( 'R0' | 'R90' | 'R180' | 'R270' | 'MX' | 'MY' | 'MYR90' | 'MXR90' ) ')' origin ::= '(' 'origin' pointValue ')' overhangDistance ::= '(' 'overhangDistance' ruleNameDef figureGroupObject figureGroupObject ( range | singleValueSet ) { comment | userData } ')' overlapDistance ::= '(' 'overlapDistance' ruleNameDef figureGroupObject figureGroupObject ( range | singleValueSet ) { comment | userData } ')' oversize ::= '(' 'oversize' integerValue ( figureGroupRef | figureOp ) cornerType ')' owner ::= '(' 'owner' stringToken ')' page ::= '(' 'page' instanceNameDef { instance | net | netBundle | commentGraphics | portImplementation | < pageSize > | < boundingBox > | comment | userData } ')' pageSize ::= '(' 'pageSize' rectangle ')' parameter ::= '(' 'parameter' valueNameDef typedValue [ unit ] ')' parameterAssign ::= '(' 'parameterAssign' valueNameRef typedValue ')' parameterDisplay ::= '(' 'parameterDisplay' valueNameRef { display } ')' path ::= '(' 'path' pointList { property } ')' pathDelay ::= '(' 'pathDelay' delay { event } ')' pathWidth ::= '(' 'pathWidth' integerValue ')' permutable ::= '(' 'permutable' { portRef | permutable | nonPermutable } ')' physicalDesignRule ::= '(' 'physicalDesignRule' { figureWidth | figureArea | rectangleSize | figurePerimeter | overlapDistance | overhangDistance | enclosureDistance | interFigureGroupSpacing | intraFigureGroupSpacing | notchSpacing | notAllowed | figureGroup | comment | userData } ')' plug ::= '(' 'plug' { socketSet } ')' point ::= '(' 'point' { pointValue | pointDisplay | point } ')' pointDisplay ::= '(' 'pointDisplay' pointValue { display } ')' pointList ::= '(' 'pointList' { pointValue } ')' pointValue ::= pt polygon ::= '(' 'polygon' pointList { property } ')' port ::= '(' 'port' portNameDef { < direction > | < unused > | portDelay | < designator > | < dcFaninLoad > | < dcFanoutLoad > | < dcMaxFanin > | < dcMaxFanout > | < acLoad > | property | comment | userData } ')' portBackAnnotate ::= '(' 'portBackAnnotate' portRef { < designator > | portDelay | < dcFaninLoad > | < dcFanoutLoad > | < dcMaxFanin > | < dcMaxFanout > | < acLoad > | property | comment } ')' portBundle ::= '(' 'portBundle' portNameDef listOfPorts { property | comment | userData } ')' portDelay ::= '(' 'portDelay' derivation ( delay | loadDelay ) { transition | becomes } ')' portGroup ::= '(' 'portGroup' { portNameRef | portRef } ')' portImplementation ::= '(' 'portImplementation' ( portRef | portNameRef ) { < connectLocation > | figure | instance | commentGraphics | propertyDisplay | keywordDisplay | property | userData | comment } ')' portInstance ::= '(' 'portInstance' ( portRef | portNameRef ) { < unused > | portDelay | < designator > | < dcFaninLoad > | < dcFanoutLoad > | < dcMaxFanin > | < dcMaxFanout > | < acLoad > | property | comment | userData } ')' portList ::= '(' 'portList' { portRef | portNameRef } ')' portListAlias ::= '(' 'portListAlias' portNameDef portList ')' portMap ::= '(' 'portMap' { portRef | portGroup | comment | userData } ')' portNameDef ::= nameDef | array portNameRef ::= nameRef | member portRef ::= '(' 'portRef' portNameRef [ portRef | instanceRef | viewRef ] ')' program ::= '(' 'program' stringToken [ version ] ')' property ::= '(' 'property' propertyNameDef typedValue { < owner > | < unit > | property | comment } ')' propertyDisplay ::= '(' 'propertyDisplay' propertyNameRef { display } ')' propertyNameDef ::= nameDef propertyNameRef ::= nameRef protectionFrame ::= '(' 'protectionFrame' { portImplementation | figure | instance | commentGraphics | < boundingBox > | propertyDisplay | keywordDisplay | parameterDisplay | property | comment | userData } ')' pt ::= '(' 'pt' integerValue integerValue ')' range ::= lessThan | greaterThan | atMost | atLeast | exactly | between rangeVector ::= '(' 'rangeVector' { range | singleValueSet } ')' rectangle ::= '(' 'rectangle' pointValue pointValue { property } ')' rectangleSize ::= '(' 'rectangleSize' ruleNameDef figureGroupObject ( rangeVector | multipleValueSet ) { comment | userData } ')' rename ::= '(' 'rename' ( identifier | name ) ( stringToken | stringDisplay ) ')' resolves ::= '(' 'resolves' { logicNameRef } ')' ruleNameDef ::= nameDef scale ::= '(' 'scale' numberValue numberValue unit ')' scaleX ::= '(' 'scaleX' integerValue integerValue ')' scaleY ::= '(' 'scaleY' integerValue integerValue ')' scaledInteger ::= integerToken | e section ::= '(' 'section' stringValue { section | stringValue | instance } ')' shape ::= '(' 'shape' curve { property } ')' simulate ::= '(' 'simulate' simulateNameDef { portListAlias | waveValue | apply | comment | userData } ')' simulateNameDef ::= nameDef simulationInfo ::= '(' 'simulationInfo' { logicValue | comment | userData } ')' singleValueSet ::= '(' 'singleValueSet' { range } ')' site ::= '(' 'site' viewRef [ transform ] ')' socket ::= '(' 'socket' [ symmetry ] ')' socketSet ::= '(' 'socketSet' symmetry { site } ')' status ::= '(' 'status' { written | comment | userData } ')' steady ::= '(' 'steady' ( portNameRef | portRef | portList ) duration [ transition | becomes ] ')' string ::= '(' 'string' { stringValue | stringDisplay | string } ')' stringDisplay ::= '(' 'stringDisplay' stringValue { display } ')' stringValue ::= stringToken strong ::= '(' 'strong' logicNameRef ')' symbol ::= '(' 'symbol' { portImplementation | figure | instance | commentGraphics | annotate | < pageSize > | < boundingBox > | propertyDisplay | keywordDisplay | parameterDisplay | property | comment | userData } ')' symmetry ::= '(' 'symmetry' { transform } ')' table ::= '(' 'table' { entry | < tableDefault > } ')' tableDefault ::= '(' 'tableDefault' ( logicRef | portRef | noChange | table ) [ delay | loadDelay ] ')' technology ::= '(' 'technology' numberDefinition { figureGroup | fabricate | < simulationInfo > | < physicalDesignRule > | comment | userData } ')' textHeight ::= '(' 'textHeight' integerValue ')' timeInterval ::= '(' 'timeInterval' ( event | offsetEvent ) ( event | offsetEvent | duration ) ')' timeStamp ::= '(' 'timeStamp' integerToken integerToken integerToken integerToken integerToken integerToken ')' timing ::= '(' 'timing' derivation { pathDelay | forbiddenEvent | comment | userData } ')' transform ::= '(' 'transform' [ scaleX ] [ scaleY ] [ delta ] [ orientation ] [ origin ] ')' transition ::= '(' 'transition' ( logicNameRef | logicList | logicOneOf ) ( logicNameRef | logicList | logicOneOf ) ')' trigger ::= '(' 'trigger' { change | steady | initial } ')' true ::= '(' 'true' ')' typedValue ::= boolean | integer | miNoMax | number | point | string unconstrained ::= '(' 'unconstrained' ')' undefined ::= '(' 'undefined' ')' union ::= '(' 'union' ( figureGroupRef | figureOp ) { figureGroupRef | figureOp } ')' unit ::= '(' 'unit' ( 'DISTANCE' | 'CAPACITANCE' | 'CURRENT' | 'RESISTANCE' | 'TEMPERATURE' | 'TIME' | 'VOLTAGE' | 'MASS' | 'FREQUENCY' | 'INDUCTANCE' | 'ENERGY' | 'POWER' | 'CHARGE' | 'CONDUCTANCE' | 'FLUX' | 'ANGLE' ) ')' unused ::= '(' 'unused' ')' userData ::= '(' 'userData' identifier { integerToken | stringToken | identifier | form } ')' valueNameDef ::= nameDef | array valueNameRef ::= nameRef | member version ::= '(' 'version' stringToken ')' view ::= '(' 'view' viewNameDef viewType interface { < status > | < contents > | comment | property | userData } ')' viewList ::= '(' 'viewList' { viewRef | viewList } ')' viewMap ::= '(' 'viewMap' { portMap | portBackAnnotate | instanceMap | instanceBackAnnotate | netMap | netBackAnnotate | comment | userData } ')' viewNameDef ::= nameDef viewNameRef ::= nameRef viewRef ::= '(' 'viewRef' viewNameRef [ cellRef ] ')' viewType ::= '(' 'viewType' ( 'MASKLAYOUT' | 'PCBLAYOUT' | 'NETLIST' | 'SCHEMATIC' | 'SYMBOLIC' | 'BEHAVIOR' | 'LOGICMODEL' | 'DOCUMENT' | 'GRAPHIC' | 'STRANGER' ) ')' visible ::= '(' 'visible' booleanValue ')' voltageMap ::= '(' 'voltageMap' miNoMaxValue ')' waveValue ::= '(' 'waveValue' logicNameDef numberValue logicWaveform ')' weak ::= '(' 'weak' logicNameRef ')' weakJoined ::= '(' 'weakJoined' { portRef | portList | joined } ')' when ::= '(' 'when' trigger { after | follow | maintain | logicAssign | comment | userData } ')' written ::= '(' 'written' timeStamp { < author > | < program > | < dataOrigin > | property | comment | userData } ')' abs ::= '(' 'abs' numberValue ')' and ::= '(' 'and' { booleanValue } ')' booleanValue ::= false | true | valueNameRef | and | or | not | xor | equal | increasing | strictlyIncreasing ceiling ::= '(' 'ceiling' numberValue ')' concat ::= '(' 'concat' { stringValue } ')' constant ::= '(' 'constant' valueNameDef typedValue ')' constraint ::= '(' 'constraint' booleanValue { property } ')' contents ::= '(' 'contents' { instance | offPageConnector | figure | section | net | netBundle | page | commentGraphics | portImplementation | timing | simulate | when | follow | logicPort | < boundingBox > | constant | constraint | variable | comment | userData } ')' divide ::= '(' 'divide' numberValue { numberValue } ')' equal ::= '(' 'equal' numberValue { numberValue } ')' fix ::= '(' 'fix' numberValue ')' floor ::= '(' 'floor' numberValue ')' increasing ::= '(' 'increasing' numberValue { numberValue } ')' integerValue ::= integerToken | valueNameRef | floor | ceiling | fix | mod | xCoord | yCoord | abs | min | max | negate | subtract | sum | product interface ::= '(' 'interface' { port | portBundle | < symbol > | < protectionFrame > | < arrayRelatedInfo > | parameter | joined | mustJoin | weakJoined | permutable | timing | simulate | < designator > | constant | constraint | variable | property | comment | userData } ')' max ::= '(' 'max' numberValue { numberValue } ')' min ::= '(' 'min' numberValue { numberValue } ')' miNoMaxValue ::= mnm | numberValue mod ::= '(' 'mod' integerValue integerValue ')' negate ::= '(' 'negate' numberValue ')' not ::= '(' 'not' booleanValue ')' numberValue ::= scaledInteger | valueNameRef | floor | ceiling | fix | xCoord | yCoord | sum | product | subtract | divide | mod | abs | min | max | negate or ::= '(' 'or' { booleanValue } ')' page ::= '(' 'page' instanceNameDef { instance | net | netBundle | commentGraphics | portImplementation | < pageSize > | < boundingBox > | constant | constraint | variable | comment | userData } ')' pointSubtract ::= '(' 'pointSubtract' pointValue { pointValue } ')' pointSum ::= '(' 'pointSum' { pointValue } ')' pointValue ::= pt | valueNameRef | pointSum | pointSubtract product ::= '(' 'product' { numberValue } ')' strictlyIncreasing ::= '(' 'strictlyIncreasing' numberValue { numberValue } ')' stringValue ::= stringToken | valueNameRef | concat subtract ::= '(' 'subtract' numberValue { numberValue } ')' sum ::= '(' 'sum' { numberValue } ')' technology ::= '(' 'technology' numberDefinition { figureGroup | fabricate | < simulationInfo > | < physicalDesignRule > | constant | constraint | comment | userData } ')' variable ::= '(' 'variable' valueNameDef typedValue ')' xCoord ::= '(' 'xCoord' pointValue ')' xor ::= '(' 'xor' { booleanValue } ')' yCoord ::= '(' 'yCoord' pointValue ')' assign ::= '(' 'assign' valueNameRef typedValue ')' block ::= '(' 'block' { statement } ')' contents ::= '(' 'contents' { instance | offPageConnector | figure | section | net | netBundle | page | commentGraphics | portImplementation | timing | simulate | when | follow | logicPort | < boundingBox > | constant | constraint | assign | block | if | iterate | variable | while | comment | userData } ')' else ::= '(' 'else' { statement } ')' escape ::= '(' 'escape' ')' if ::= '(' 'if' booleanValue then [ else ] ')' interface ::= '(' 'interface' { port | portBundle | < symbol > | < protectionFrame > | < arrayRelatedInfo > | joined | mustJoin | weakJoined | permutable | timing | simulate | < designator > | constant | constraint | parameter | variable | assign | block | if | iterate | while | property | comment | userData } ')' iterate ::= '(' 'iterate' { statement } ')' page ::= '(' 'page' instanceNameDef { instance | net | netBundle | commentGraphics | portImplementation | < pageSize > | < boundingBox > | constant | constraint | block | while | if | iterate | variable | assign | comment | userData } ')' statement ::= assign | block | comment | commentGraphics | constant | constraint | escape | figure | follow | if | instance | iterate | net | netBundle | logicPort | offPageConnector | portImplementation | property | section | simulate | timing | userData | variable | when | while technology ::= '(' 'technology' numberDefinition { figureGroup | fabricate | < simulationInfo > | < physicalDesignRule > | constant | constraint | block | if | iterate | while | comment | userData } ')' then ::= '(' 'then' { statement } ')' while ::= '(' 'while' booleanValue { statement } ')' keywordAlias ::= '(' 'keywordAlias' keywordNameDef keywordNameRef ')' keywordMap ::= '(' 'keywordMap' keywordLevel { keywordAlias | comment } ')' keywordNameDef ::= identifier actual ::= '(' 'actual' formalNameRef ')' build ::= '(' 'build' keywordNameRef { literal | actual | build | comment } ')' formal ::= '(' 'formal' formalNameDef [ optional ] ')' formalNameDef ::= identifier formalNameRef ::= identifier generate ::= '(' 'generate' { literal | actual | build | comment } ')' keywordDefine ::= '(' 'keywordDefine' keywordNameDef keywordParameters generate ')' keywordMap ::= '(' 'keywordMap' keywordLevel { keywordAlias | keywordDefine | comment } ')' keywordParameters ::= '(' 'keywordParameters' { formal } ')' literal ::= '(' 'literal' { integerToken | stringToken | identifier | form } ')' optional ::= '(' 'optional' ( literal | actual | build ) ')' build ::= '(' 'build' keywordNameRef { literal | actual | build | forEach | comment } ')' collector ::= '(' 'collector' ')' forEach ::= '(' 'forEach' ( formalNameRef | formalList ) { build | actual | literal | forEach | comment } ')' formal ::= '(' 'formal' formalNameDef [ optional | collector ] ')' formalList ::= '(' 'formalList' { formalNameRef } ')' generate ::= '(' 'generate' { literal | actual | build | forEach | comment } ')' <***** END OF EDIF BNF*****>