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 | epsilonNoConstraint
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())())