6 Abstract Syntax

<program> ::= emptyProgram
 | program([<Topdec><Tag>)
<Equal> ::= id('=' <Tag>)
 | id('='#<Directive>#<Precedence> <Tag>)
<Identifier> ::= id(<atom> <Tag>)
<Identifier__withoutAsterisk> ::= id(<atom> <Tag>)      % where <atom>is no asterisk
<QualifiedIdentifier> ::= id(long([<atom>]) <Tag>)
<LongIdentifier> ::= <Identifier>
 | <QualifiedIdentifier>
<LongIdentifier__withoutAstersisk> ::= <LongIdentifier>      % where no asterisks as <atom> are allowed
<Scon> ::= integer(<integer> <Tag>)
 | word(<word> <Tag>)
 | real(<real> <Tag>)
 | string(<string> <Tag>)
 | char(<char> <Tag>)
<OpOperator> ::= <Identifier>
<Atpat> ::= wildcard(<Tag>
 | scon(<Scon> <Tag>
 | <LongIdentifier>
 | record([<Patrow><Tag>)
 | tuple(nil <Tag>)
 | tuple([<Pat><Tag>)      % where [<Pat>] has at least 2 elements
 | list([<Pat><Tag>)
<Label> ::= <integer>      % where <integer> is greather then zero
 | <Identifier>
<Patrow> ::= '...'(<Tag>)
 | lab(<Label> <Pat> <Tag>)
 | <Identifier>
 | <OpOperator>
 | as(<Identifier> <Pat> <Tag>)
 | as(<OpOperator> <Pat> <Tag>)
 | <Identifier>
 | <OpOperator>
 | ty(<Identifier> <Ty> <Tag>)
 | ty(<OpOperator> <Ty> <Tag>)
 | tyas(<Identifier> <Ty> <Pat> <Tag>)
 | tyas(<OpOperator> <Ty> <Pat> <Tag>)
<Pat> ::= pat(<Atpat> <Tag>)
 | pat(<OpOperator> <Atpat> <Tag>)
 | pat(<QualifiedIdentifier> <Atpat> <Tag>)
 | pat(<LongIdentifier> <Atpat> <Tag>)
 | pat(typed(<Pat> <Ty><Tag>)
 | pat(id(<atom>#<Directive>#<Precedence> <Tag>)
<Pat> <Pat> <Tag>)
 | pat(as(<Identifier> <Pat> <Tag>)
 | pat(as(<OpOperator> <Pat> <Tag>)
 | pat(as(<Identifier> <Ty> <Pat><Tag>)
<TyRow> ::= <Label>#<Ty> | nil
 | <Label>#<Ty> | <TyRow>
<Ty__withoutTuple> ::= <type_variable>
 | record([<Tyrow>])
 | <Ty>
 | <LongIdentifier__withoutAstersisk>
 | cons([<Ty><LongIdentifier__withoutAstersisk>)      % where [<Ty>] is not empty
<Ty> ::= ty(<Ty__withoutTuple>)
 | tuple([<Ty__withoutTuple>])      % [<Ty__withoutTuple>] must contain at least 2 elements
 | function(<Ty> <Ty>)


Andreas Simon and Gerhard Schneider
Generated on Thursday, November 26th 1998, 23:35:32