<< Prev | - Up - | Next >> |
<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>
)
<< Prev | - Up - | Next >> |