moto@ucbcad.berkeley.edu (EDIF Committee) (05/19/87)
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*****>