type_variables
stvarlist
:=
statements
|
epsilon
statements
|
[
stvar_comma_list
stype_constraint
]
stvar_comma_list
:=
statements
|
stvar
scomma_tvar
*
statements
|
epsilon
()
stvar
:=
statements
|
NAME
seqorin
statements
|
NAME
:
stypeexpr
seqorin
scomma_tvar
:=
statements
|
,
stvar
seqorin
:=
statements
|
=
stypeexpr
statements
|
in
stypeexpr
statements
|
epsilon
NoConstraint
stype_constraint
:=
statements
|
with
squalified_name_comma_list
where
sexpr
statements
|
where
sexpr
with
squalified_name_comma_list
statements
|
where
sexpr
statements
|
with
squalified_name_comma_list
statements
|
epsilon
((ast_tuple())())