\begin{rail}Actual : Expression \vert Address
;
\end{rail}

\begin{rail}ActualGenerics : ''['' TypeList '']''
;
\end{rail}

\begin{rail}ActualList : Actual * '',''
;
\end{rail}

\begin{rail}Actuals : ''('' ActualList '')''
;
\end{rail}

\begin{rail}Address : dollar AddressMark
;
\end{rail}

\begin{rail}AddressMark : Identifier \vert ''Current'' \vert ''Result''
;
\end{rail}

\begin{rail}Anchor : Identifier \vert ''Current''
;
\end{rail}

\begin{rail}Anchored : ''like'' Anchor
;
\end{rail}

\begin{rail}Assertion : AssertionClause * '';'' ;
\end{rail}

\begin{rail}AssertionClause : TagMark ?
UnlabeledAssertionClause
;
\end{rail}

\begin{rail}Assignment : Writable '':='' Expression
;
\end{rail}

\begin{rail}AssignmentAttempt : Writable ''?='' Expression
;
\end{rail}

\begin{rail}Attribute : Identifier
;
\end{rail}

\begin{rail}AttributeList : Identifier * '',''
;
\end{rail}

\begin{rail}Binary : ( ''+'' \vert ''-'' \vert ''*'' \vert ''/'' ) \vert
( ''<...
...r'' ) \vert
( ''and then'' \vert ''or else'' \vert ''implies'' )
;
\end{rail}

\begin{rail}BinaryExpression : Expression InfixOperator Expression
;
\end{rail}

\begin{rail}BitConstant : BitSequence
;
\end{rail}

\begin{rail}BitType : ''BIT'' Constant
;
\end{rail}

\begin{rail}BooleanConstant : ''true'' \vert ''false''
;
\end{rail}

\begin{rail}BooleanExpression : Expression
;
\end{rail}

\begin{rail}Call : ParenthesizedQualifier ? CallChain
;
\end{rail}

\begin{rail}CallChain : UnqualifiedCall + ''.''
;
\end{rail}

\begin{rail}CharacterConstant : ''''' Character '''''
;
\end{rail}

\begin{rail}CharacterInterval : CharacterConstant
''..'' CharacterConstant
;
\end{rail}

\begin{rail}Check : ''check'' Assertion ''end''
;
\end{rail}

\begin{rail}Choice : Constant \vert Interval
;
\end{rail}

\begin{rail}Choices : Choice * '',''
;
\end{rail}

\begin{rail}ClassDeclaration : Indexing ? \\
ClassHeader
FormalGenerics ? \\ ...
...
Features ? \\
Invariant ? \\
''end'' ( ''--'' ClassName ) ?
;
\end{rail}

\begin{rail}ClassHeader : HeaderMark ? ''class'' ClassName
;
\end{rail}

\begin{rail}ClassList : ClassName * '',''
;
\end{rail}

\begin{rail}ClassName : Identifier
;
\end{rail}

\begin{rail}ClassType : ClassName ActualGenerics ?
;
\end{rail}

\begin{rail}ClassTypeExpanded : ''expanded'' ClassType
;
\end{rail}

\begin{rail}Clients : lbrace ClassList rbrace
;
\end{rail}

\begin{rail}Comment : ''--'' SimpleString * CommentBreak
;
\end{rail}

\begin{rail}CommentBreak : NewLine BlanksOrTabs ? ''--''
;
\end{rail}

\begin{rail}Comparison : ''='' \vert ''/=''
;
\end{rail}

\begin{rail}Compound : Instruction * '';'' ;
\end{rail}

\begin{rail}Conditional : ''if'' ThenPartList ElsePart ? ''end''
;
\end{rail}

\begin{rail}Constant : ManifestConstant \vert ConstantAttribute
;
\end{rail}

\begin{rail}ConstantAttribute : Entity
;
\end{rail}

\begin{rail}ConstantOrRoutine : ''is'' FeatureValue
;
\end{rail}

\begin{rail}Constraint : ''->'' ClassType
;
\end{rail}

\begin{rail}Creation : ''!'' Type ? ''!'' Writable CreationCall ?
;
\end{rail}

\begin{rail}CreationCall : ''.'' UnqualifiedCall
;
\end{rail}

\begin{rail}CreationClause : Clients ? HeaderComment ?
FeatureList
;
\end{rail}

\begin{rail}Creators : ''creation''
CreationClause + ''creation''
;
\end{rail}

\begin{rail}Debug : ''debug'' DebugKeys ? Compound ''end''
;
\end{rail}

\begin{rail}DebugKey : ManifestString
;
\end{rail}

\begin{rail}DebugKeyList : DebugKey * '',''
;
\end{rail}

\begin{rail}DebugKeys : ''('' DebugKeyList '')''
;
\end{rail}

\begin{rail}DeclarationBody : FormalArguments ?
TypeMark ?\\
ConstantOrRoutine ?
;
\end{rail}

\begin{rail}Deferred : ''deferred''
;
\end{rail}

\begin{rail}Effective : Internal \vert External
;
\end{rail}

\begin{rail}ElsePart : ''else'' Compound
;
\end{rail}

\begin{rail}Entity : Writable \vert ReadOnly
;
\end{rail}

\begin{rail}EntityDeclarationGroup : IdentifierList TypeMark
;
\end{rail}

\begin{rail}EntityDeclarationList : EntityDeclarationGroup * '';'' ;
\end{rail}

\begin{rail}Equality : Expression Comparison Expression
;
\end{rail}

\begin{rail}Exit : ''until'' BooleanExpression
;
\end{rail}

\begin{rail}Expression : Call \vert OperatorExpression \vert Equality \vert
ManifestConstant \vert ManifestArray \vert
Old \vert Strip
;
\end{rail}

\begin{rail}ExpressionList : Expression * '',''
;
\end{rail}

\begin{rail}External : ''external'' LanguageName
ExternalName ?
;
\end{rail}

\begin{rail}ExternalName : ''alias'' ManifestString
;
\end{rail}

\begin{rail}FeatureAdaptation : Rename ?
NewExports ? \\
Undefine ?
Redefine ?
Select ?
''end''
;
\end{rail}

\begin{rail}FeatureClause : Clients ?
HeaderComment ?\\
FeatureDeclarationList
;
\end{rail}

\begin{rail}FeatureDeclaration : NewFeatureList DeclarationBody
;
\end{rail}

\begin{rail}FeatureDeclarationList : FeatureDeclaration * '';'' ;
\end{rail}

\begin{rail}FeatureList : FeatureName * '',''
;
\end{rail}

\begin{rail}FeatureName : Identifier \vert Prefix \vert Infix
;
\end{rail}

\begin{rail}FeatureSet : FeatureList \vert ''all''
;
\end{rail}

\begin{rail}FeatureValue : ManifestConstant \vert Unique \vert Routine
;
\end{rail}

\begin{rail}Features : ''feature'' FeatureClause + ''feature''
;
\end{rail}

\begin{rail}Formal : Identifier
;
\end{rail}

\begin{rail}FormalArguments : ''('' EntityDeclarationList '')''
;
\end{rail}

\begin{rail}FormalGeneric : FormalGenericName Constraint ?
;
\end{rail}

\begin{rail}FormalGenericList : FormalGeneric * '',''
;
\end{rail}

\begin{rail}FormalGenericName : Identifier
;
\end{rail}

\begin{rail}FormalGenerics : ''['' FormalGenericList '']''
;
\end{rail}

\begin{rail}HeaderComment : Comment
;
\end{rail}

\begin{rail}HeaderMark : ''deferred'' \vert ''expanded''
;
\end{rail}

\begin{rail}IdentifierList : Identifier + '',''
;
\end{rail}

\begin{rail}Index : Identifier '':''
;
\end{rail}

\begin{rail}IndexClause : Index ? IndexTerms
;
\end{rail}

\begin{rail}IndexList : IndexClause * '';'' ;
\end{rail}

\begin{rail}IndexTerms : IndexValue + '',''
;
\end{rail}

\begin{rail}IndexValue : Identifier \vert ManifestConstant
;
\end{rail}

\begin{rail}Indexing : ''indexing'' IndexList
;
\end{rail}

\begin{rail}Infix : ''infix'' '''' InfixOperator ''''
;
\end{rail}

\begin{rail}InfixOperator : Binary \vert FreeOperator
;
\end{rail}

\begin{rail}Inheritance : ''inherit'' ParentList
;
\end{rail}

\begin{rail}Initialization : ''from'' Compound
;
\end{rail}

\begin{rail}Instruction : Creation \vert
Call \vert
Assignment \vert
Assignme...
... \vert MultiBranch \vert Loop \vert
Debug \vert Check \vert Retry
;
\end{rail}

\begin{rail}IntegerConstant : Sign ? Integer
;
\end{rail}

\begin{rail}IntegerInterval : IntegerConstant ''..'' IntegerConstant
;
\end{rail}

\begin{rail}Internal : RoutineMark Compound
;
\end{rail}

\begin{rail}Interval : IntegerInterval \vert CharacterInterval
;
\end{rail}

\begin{rail}Invariant : ''invariant'' Assertion
;
\end{rail}

\begin{rail}LanguageName : ManifestString
;
\end{rail}

\begin{rail}Local : Identifier \vert ''Result''
;
\end{rail}

\begin{rail}LocalDeclarations : ''local'' EntityDeclarationList
;
\end{rail}

\begin{rail}Loop : Initialization\\
Invariant ?
Variant ?\\
LoopBody\\
''end''
;
\end{rail}

\begin{rail}LoopBody : Exit ''loop'' Compound
;
\end{rail}

\begin{rail}ManifestArray : ''<<'' ExpressionList ''>>''
;
\end{rail}

\begin{rail}ManifestConstant : BooleanConstant \vert
CharacterConstant \vert
I...
...onstant \vert RealConstant \vert
ManifestString \vert BitConstant
;
\end{rail}

\begin{rail}ManifestString : '''' SimpleString ''''
;
\end{rail}

\begin{rail}Message : ManifestString
;
\end{rail}

\begin{rail}MultiBranch : ''inspect'' Expression \\
WhenPartList ? \\ ElsePart ?\\ ''end''
;
\end{rail}

\begin{rail}NewExportItem : Clients FeatureSet
;
\end{rail}

\begin{rail}NewExportList : NewExportItem * '';'' ;
\end{rail}

\begin{rail}NewExports : ''export'' NewExportList
;
\end{rail}

\begin{rail}NewFeature : ''frozen'' ? FeatureName
;
\end{rail}

\begin{rail}NewFeatureList : NewFeature + '',''
;
\end{rail}

\begin{rail}Obsolete : ''obsolete'' Message
;
\end{rail}

\begin{rail}Old : ''old'' Expression
;
\end{rail}

\begin{rail}OperatorExpression : Parenthesized \vert
UnaryExpression \vert BinaryExpression
;
\end{rail}

\begin{rail}Parent : ClassType FeatureAdaptation ?
;
\end{rail}

\begin{rail}ParentList : Parent * '';'' ;
\end{rail}

\begin{rail}Parenthesized : ''('' Expression '')''
;
\end{rail}

\begin{rail}ParenthesizedQualifier : Parenthesized ''.''
;
\end{rail}

\begin{rail}Postcondition : ''ensure'' ''then'' ? Assertion
;
\end{rail}

\begin{rail}Precondition : ''require'' ''else'' ? Assertion
;
\end{rail}

\begin{rail}Prefix : ''prefix'' '''' PrefixOperator ''''
;
\end{rail}

\begin{rail}PrefixOperator : Unary \vert FreeOperator
;
\end{rail}

\begin{rail}ReadOnly : Formal \vert ''Current''
;
\end{rail}

\begin{rail}RealConstant : Sign ? Real
;
\end{rail}

\begin{rail}Redefine : ''redefine'' FeatureList
;
\end{rail}

\begin{rail}Rename : ''rename'' RenameList
;
\end{rail}

\begin{rail}RenameList : RenamePair * '',''
;
\end{rail}

\begin{rail}RenamePair : FeatureName ''as'' FeatureName
;
\end{rail}

\begin{rail}Rescue : ''rescue'' Compound
;
\end{rail}

\begin{rail}Retry : ''retry''
;
\end{rail}

\begin{rail}Routine : Obsolete ?
HeaderComment ? \\
Precondition ?
LocalDec...
...ns ? \\
RoutineBody \\
Postcondition ?
Rescue ? \\
''end''
;
\end{rail}

\begin{rail}RoutineBody : Effective \vert Deferred
;
\end{rail}

\begin{rail}RoutineMark : ''do'' \vert ''once''
;
\end{rail}

\begin{rail}Select : ''select'' FeatureList
;
\end{rail}

\begin{rail}Sign : ''+'' \vert ''-''
;
\end{rail}

\begin{rail}Strip : ''strip'' ''('' AttributeList '')''
;
\end{rail}

\begin{rail}Tag : Identifier
;
\end{rail}

\begin{rail}TagMark : Tag '':''
;
\end{rail}

\begin{rail}ThenPart : BooleanExpression ''then'' Compound
;
\end{rail}

\begin{rail}ThenPartList : ThenPart + ''elseif''
;
\end{rail}

\begin{rail}Type : ClassType \vert
ClassTypeExpanded \vert
FormalGenericName \vert
Anchored \vert
BitType
;
\end{rail}

\begin{rail}TypeList : Type * '',''
;
\end{rail}

\begin{rail}TypeMark : '':'' Type
;
\end{rail}

\begin{rail}Unary : ''not'' \vert ''+'' \vert ''-''
;
\end{rail}

\begin{rail}UnaryExpression : PrefixOperator Expression
;
\end{rail}

\begin{rail}Undefine : ''undefine'' FeatureList
;
\end{rail}

\begin{rail}Unique : ''unique''
;
\end{rail}

\begin{rail}UnlabeledAssertionClause : BooleanExpression \vert Comment
;
\end{rail}

\begin{rail}UnqualifiedCall : Entity Actuals ?
;
\end{rail}

\begin{rail}Variant : ''variant'' TagMark ? Expression
;
\end{rail}

\begin{rail}WhenPart : Choices ''then'' Compound
;
\end{rail}

\begin{rail}WhenPartList : ''when'' WhenPart + ''when''
;
\end{rail}

\begin{rail}Writable : Identifier
;
\end{rail}


Richard Walker
1999-01-22