bound_create_expr => ________'bind'_'(' ________('_'_[':'_type_spec]_'.'_call_expr_|_expr1) ________[':'_type_spec]_')' '#' already seen and stripped away next is one of ROUT_tok, bind_tok, ITER_tok (guaranteed)
const_def => ________['private']_'const'_ident ________(':'_type_spec_'_:=_'_expr_|_['_:=_'_expr][','_ident_list]) private_tok already seen and stripped if present.
expr0 => ______self_expr_|_local_expr_|_void_expr_|_new_expr_| ______create_expr_|_array_expr_|_bound_create_expr_| ______except_expr_|_initial_expr_|_result_expr_|_while!_expr_| ______until!_expr_|_break!_expr_|_bool_lit_expr_|_char_lit_expr_| ______str_lit_expr_|_int_lit_expr_|_flt_lit_expr_|_'('_expr_')'_| ______'['_expr_list_']'_| ______here_expr_|_where_expr_|_near_expr_|_far_expr_|_any_expr ______cluster_expr_|_cluster_bang_expr_|_|_cluster_size|_cohort_expr local_expr accepts also type_spec, filtered out here or in expr1
expr3 => '-' expr3 | '~' expr3 | exp2. in case of literals and '-' do the negation directly to prevent overflow in case of minint (e.g. -5 gets translated into 5.negate)