Definitions:
Accounting: '(' 'Accounting' ! Identifier [String] ')'
Annotate: '(' 'Annotate' ! String Point Point Justify ')'
Apply: '(' 'Apply' ! WholeNumber Number
(LogicInput | LogicOutput | Comment | UserData)* ')'
Arbitrate: '(' 'Arbitrate' ! Pairwise ')'
Arc: '(' 'Arc' ! Point Point Point ')'
ArrayDefinition: '(' 'ArrayDefinition' ! Identifier WholeNumber* ')'
ArrayRelatedInfo: '(' 'ArrayRelatedInfo' ! ArrayUse [(Socket | Plug)]
(Comment | UserData)* ')'
ArrayUse: ('ArrayMacro' | 'ArraySite' | 'BaseArray')
Assign: '(' 'Assign' ! Identifier Expression* ')'
Block: '(' 'Block' ! Form* ')'
Body: '(' 'Body' ! (FigureGroup | Comment | Property)* ')'
Boolean: (0..0 & (True | False) | 1..2 & Expression)
BorderPattern: '(' 'BorderPattern' ! Integer String ')'
Build: '(' 'Build' ! KeyRef (FormalValue | ForEach | Index | Comment)* ')'
BuildName: '(' 'BuildName' ! String ')'
Cell: '(' 'Cell' ! Identifier [Status] [Rename] [ViewMap]
(View | Comment | UserData)* ')'
Circle: '(' 'Circle' ! Point Point Property* ')'
Color: '(' 'Color' ! Integer Integer Integer ')'
Comment: '(' 'Comment' ! String* ')'
Condition: '(' 'Condition' ! WFF* ')'
Constraint: '(' 'Constraint' ! Boolean* Property* ')'
Contents: '(' 'Contents' !
(Define | Instance | Unused | Global | Joined | TwoDArrayJoin
| MustJoin | Required | Measured | CriticalSignal | FigureGroup
| Annotate | Wire | Section | <LogicModel> | Comment | UserData
| Level1Ctl | Level2Ctl)* ')'
Coordinate: (0..0 & WholeNumber | 1..2 & Expression)
Corner: (Point | Arc)
CriticalSignal: '(' 'CriticalSignal' ! WholeNumber Identifier* ')'
Data: (String | Value | Boolean)
Default: 1..2 & '(' 'Default' ! PrimitiveData* ')'
Define: '(' 'Define' ! Direction Type DefineObjects [1..2 & Default]
Rename* ')'
DefineObject: (Identifier | ArrayDefinition)
DefineObjects: (DefineObjectsAux | DefineObject)
DefineObjectsAux: '(' 'Multiple' ! DefineObject* ')'
Delay: '(' 'Delay' ! Transition* Reference* ')'
Design: '(' 'Design' ! Identifier Reference [Status] [Rename]
(Comment | Property)* ')'
Direction: ('local' | 'input' | 'inout' | 'output' | 'unspecified')
Dot: '(' 'Dot' ! Point Property* ')'
EDIF: '(' 'EDIF' ! Identifier Status Keyword* [Rename]
(Design | External | Library | Comment | UserData)* ')'
EDIFLevel: '(' 'EDIFLevel' ! EDIFLevelName ')'
EDIFLevelName: ('0' | '1' | '2')
EDIFVersion: '(' 'EDIFVersion' ! Integer Integer Integer ')'
Escape: '(' 'Escape' ! Boolean Form* ')'
Expression: (Primitive | Identifier | FunctionApplication)
External: '(' 'External' ! Identifier [Status] [Rename] ')'
Extra: '(' 'Extra' ! Identifier* ')'
False: '(' 'False' ! ')'
Figure: ('Polygon' | 'Path' | 'Rectangle' | 'Dot' | 'Shape' | 'OpenShape'
| 'Circle' | 'Annotate')
FigureGroup: '(' 'FigureGroup' ! FigureGroupRef
(Figure | SignalGroup | Comment | UserData)* ')'
FigureGroupDefault: '(' 'FigureGroupDefault' !
(FigureGroupSpecification | Comment | UserData)* ')'
FigureGroupRef: (Identifier | FigureGroupSpecification)
FigureGroupSpecification: '(' 'FigureGroupSpecification' ! Identifier
(<Width> | <PathType> | <BorderPattern> | <FillPattern> | <Color>
| Comment | UserData)* ')'
FillPattern: '(' 'FillPattern' ! Integer Integer String ')'
ForEach: '(' 'ForEach' ! NameRefs
(FormalValue | ForEach | Index | Comment)* ')'
Formal: '(' 'Formal' ! Identifier* ')'
FormalValue: (String | Integer | Identifier | BuildName | Build)
FunctionApplication: '(' Identifier ! Expression* ')'
FunctionName: 1..2 & ('+' | '-' | '*' | '/' | 'abs' | 'floor' | 'fix'
| 'ceiling' | 'xcoord' | 'ycoord' | 'point' | 'concat' | 'and' | 'or'
| 'xor' | 'not' | 'false' | 'true' | 'andnot' | '<' | '=' | '>')
Global: '(' 'Global' ! Identifier* ')'
GridMap: '(' 'GridMap' ! Number Number ')'
IgnoreValue: '(' 'IgnoreValue' ! Identifier ')'
Index: '(' 'Index' ! Identifier ')'
Instance: '(' 'Instance' ! References Identifier Identifier [Rename]
[Transform] Parameter* Property* PortInstance* ')'
InstanceMap: '(' 'InstanceMap' ! (Reference | Comment | UserData)* ')'
Interface: '(' 'Interface' !
(Define | Unused | Joined | TwoDArrayJoin | WeakJoined | MustJoin
| Permutable | Timing | Simulate | <Body> | PortImplementation
| <ArrayRelatedInfo> | Comment | UserData | Level1Ctl | Level2Ctl)* ')'
Isolated: '(' 'Isolated' ! Identifier ')'
Iterate: '(' 'Iterate' ! Form* ')'
Joined: '(' 'Joined' ! (Reference | Joined | WeakJoined)* ')'
Justify: ('LowerRight' | 'LowerCenter' | 'LowerLeft' | 'CenterRight'
| 'CenterCenter' | 'CenterLeft' | 'UpperRight' | 'UpperCenter'
| 'UpperLeft')
KeyRef: (Identifier | String)
Keyword: '(' 'Keyword' ! Identifier
(Formal | Optional | Extra | FormalValue | ForEach | Comment)* ')'
Level1Ctl: 1..2 & (Repeat | Constraint | Assign)
Level2Ctl: 2..2 & (Block | Escape | Iterate | Redo)
Library: '(' 'Library' ! Identifier [Status] [Technology] [Rename]
(Cell | Comment | UserData)* ')'
LogicInput: '(' 'LogicInput' ! NameRefs LogicWaveform ')'
LogicModel: '(' 'LogicModel' ! Identifier LogicOtherwise
(LogicState | Comment | UserData)* ')'
LogicOtherwise: '(' 'LogicOtherwise' ! Identifier ')'
LogicOutput: '(' 'LogicOutput' ! NameRefs LogicWaveform ')'
LogicState: '(' 'LogicState' ! Condition* Result ')'
LogicWaveform: '(' 'LogicWaveform' ! Identifier* ')'
Measured: '(' 'Measured' ! Identifier Delay* ')'
Member: '(' 'Member' ! Name WholeNumber* ')'
MiNoMax: '(' 'MiNoMax' ! RangeValue RangeValue RangeValue ')'
MustJoin: '(' 'MustJoin' ! (Reference | Joined | WeakJoined)* ')'
Name: Identifier
NameRef: (Name | Member)
NameRefs: (NameRefsAux | Identifier)
NameRefsAux: '(' 'Multiple' ! Identifier* ')'
NonPermutable: '(' 'NonPermutable' !
(Identifier | NonPermutable | Permutable)* ')'
Number: (0..0 & (Integer | ScaledInteger) | 1..2 & Expression)
NumberDefinition: '(' 'NumberDefinition' ! UnitSystem
(Scale | Comment | UserData)* ')'
OpenShape: '(' 'OpenShape' ! Corner* Property* ')'
Optional: '(' 'Optional' ! Identifier FormalValue ')'
Orientation: ('r0' | 'r90' | 'r180' | 'r270' | 'mx' | 'myr90' | 'my'
| 'mxr90')
Pairwise: '(' 'Pairwise' ! Identifier* ')'
Parameter: '(' 'Parameter' ! Identifier ParameterValue ')'
ParameterValue: (0..0 & (ParameterValueAux | PrimitiveData)
| 1..2 & (ParameterValueAux | Expression))
ParameterValueAux: (0..0 & '(' 'Multiple' ! PrimitiveData* ')'
| 1..2 & '(' 'Multiple' ! Expression* ')')
Path: '(' 'Path' ! Point* Property* ')'
PathType: '(' 'PathType' ! Style Style ')'
Permutable: '(' 'Permutable' !
(Identifier | NonPermutable | Permutable)* ')'
Place: (Coordinate | Step)
Plug: '(' 'Plug' ! SocketSet* ')'
Point: (0..0 & '(' 'Point' ! Coordinate Coordinate ')' | 1..2 & Expression)
Polygon: '(' 'Polygon' ! Point* Property* ')'
PortImplementation: '(' 'PortImplementation' ! Identifier
(FigureGroup | Comment | Property)* ')'
PortInstance: '(' 'PortInstance' ! Identifier Property* ')'
PortListAlias: '(' 'PortListAlias' ! Identifier NameRefs ')'
PortMap: '(' 'PortMap' ! (Reference | Comment | UserData)* ')'
Primitive: (String | Integer | ScaledInteger)
PrimitiveData: (Primitive | True | False)
Property: '(' 'Property' ! PropertyType Identifier [Data]
(Comment | Property)* ')'
PropertyType: ('EDIF' | 'User' | Identifier)
RangeValue: (Number | Undefined | Unconstrained)
Rectangle: '(' 'Rectangle' ! Point Point Property* ')'
Redo: '(' 'Redo' ! Boolean Form* ')'
Reference: (ReferenceAux | NameRef)
ReferenceAux: '(' 'Qualify' ! NameRef* ')'
References: (ReferencesAux | Reference)
ReferencesAux: '(' 'Multiple' ! Reference* ')'
Rename: '(' 'Rename' ! Identifier String ')'
Repeat: 1..2 & '(' 'Repeat' ! Identifier Integer Integer Integer Form* ')'
Required: '(' 'Required' ! Identifier Delay* ')'
Result: '(' 'Result' ! WFF* ')'
Scale: '(' 'Scale' ! UnitType Number Number ')'
ScaledInteger: '(' 'e' ! Integer Integer ')'
ScaleX: '(' 'ScaleX' ! Coordinate Coordinate ')'
ScaleY: '(' 'ScaleY' ! Coordinate Coordinate ')'
Section: '(' 'Section' ! String (String | Instance | Section)* ')'
Shape: '(' 'Shape' ! Corner* Property* ')'
SignalGroup: '(' 'SignalGroup' ! Identifier
(FigureGroup | Comment | UserData)* ')'
Simulate: '(' 'Simulate' ! Identifier Identifier
(<Rename> | PortListAlias | <IgnoreValue> | WaveValue | Apply
| Comment | UserData)* ')'
SimulationInfo: '(' 'SimulationInfo' ! Identifier SimulationValue
Arbitrate Isolated [Rename] ')'
SimulationMap: '(' 'SimulationMap' ! Reference Reference
(StateMap | Comment | UserData)* ')'
SimulationValue: '(' 'SimulationValue' ! Identifier* ')'
Socket: '(' 'Socket' ! Transform* ')'
SocketSet: '(' 'SocketSet' ! Instance* Transform* ')'
Stable: '(' 'Stable' ! Identifier Number Number Identifier Identifier
Identifier ')'
StateMap: '(' 'StateMap' ! Identifier+ ')'
Status: '(' 'Status' ! [EDIFVersion] [EDIFLevel]
(Written | Comment | UserData)* ')'
Step: '(' 'Step' ! Coordinate WholeNumber Coordinate ')'
Style: ('extend' | 'truncate' | 'round')
Technology: '(' 'Technology' ! Identifier [NumberDefinition]
(Define | <Rename> | SimulationInfo | SimulationMap | <GridMap>
| <FigureGroupDefault> | Comment | UserData | Level1Ctl
| Level2Ctl)* ')'
TimeStamp: '(' 'TimeStamp' ! Integer Integer Integer Integer Integer
Integer ')'
Timing: '(' 'Timing' ! Identifier
(Delay | Stable | Comment | UserData)* ')'
Transform: '(' 'Transform' ! [ScaleX] [ScaleY] [Orientation]
[Translate] ')'
Transition: '(' 'Transition' ! Identifier Identifier Value [Value] ')'
Translate: '(' 'Translate' ! Place Place ')'
True: '(' 'True' ! ')'
TwoDArrayJoin: '(' 'Repeat' Identifier WholeNumber WholeNumber '1'
'(' 'Repeat' Identifier WholeNumber WholeNumber '1'
'(' 'Repeat' Identifier WholeNumber WholeNumber '1'
'(' 'Repeat' Identifier WholeNumber WholeNumber '1'
'(' 'Joined'
'(' 'Qualify' Identifier
'(' 'Member' Identifier Identifier Identifier ')' ')'
'(' 'Qualify' Identifier
'(' 'Member' Identifier Identifier Identifier ')' ')' ')' ')' ')' ')' ')'
Type: ('figuregroup' | 'port' | 'signal' | 1..2 & 'String'
| 1..2 & 'Integer' | 1..2 & 'Number' | 1..2 & 'Boolean'
| 1..2 & 'Point' | 1..2 & UnitType)
Unconstrained: '(' 'Unconstrained' ! ')'
Undefined: '(' 'Undefined' ! ')'
UnitSystem: ('si' | Identifier)
UnitType: ('capacitance' | 'current' | 'distance' | 'resistance'
| 'termperature' | 'time' | 'voltage')
Unused: '(' 'Unused' ! Reference* ')'
UserData: '(' 'UserData' ! Identifier Form* ')'
Value: (Number | MiNoMax)
View: '(' 'View' ! ViewType Identifier [Status] [Interface] [Contents]
[Rename] (Comment | Property)* ')'
ViewMap: '(' 'ViewMap' !
(PortMap | InstanceMap | Comment | UserData | Level2Ctl)* ')'
ViewType: ('document' | 'behavior' | 'netlist' | 'schematic' | 'symbolic'
| 'masklayout' | 'stranger')
WaveValue: '(' 'WaveValue' ! Identifier Number LogicWaveform ')'
WeakJoined: '(' 'WeakJoined' ! (Reference | Joined | WeakJoined)* ')'
WFF: '(' 'WFF' ! Identifier Identifier Number Number ')'
WholeNumber: (0..0 & Integer | 1..2 & Expression)
Width: '(' 'Width' ! Coordinate ')'
Wire: '(' 'Wire' ! Identifier Identifier [FigureGroup] Property* ')'
Written: '(' 'Written' ! TimeStamp (Accounting | Comment | UserData)* ')'