-
-%type decl_enum {decl_enum *}
-%destructor decl_enum {free_decl_enum($$);}
-%type decl_enum_items {decl_enum_items*}
-%destructor decl_enum_items {free_decl_enum_items($$);}
-%type decl_enum_item {decl_enum_item*}
-%destructor decl_enum_item {free_decl_enum_item($$);}
-%type decl_struct_args_block {decl_args*}
-%destructor decl_struct_args_block {free_decl_args($$);}
-%type decl_struct_args {decl_args*}
-%destructor decl_struct_args {free_decl_args($$);}
-%type decl_struct {decl_struct*}
-%destructor decl_struct {free_decl_struct($$);}
-%type align_and_size {decl_struct_layout}
-%type decl_union {decl_union*}
-%destructor decl_union {free_decl_union($$);}
-%type const_type {const_type*}
-%destructor const_type {free_const_type($$);}
-%type constant {constant*}
-%destructor constant {free_constant($$);}
-%type decl_typedef {decl_arg*}
-%destructor decl_typedef {free_decl_arg($$);}
-%type decl_typedef_body_ex {decl_arg*}
-%destructor decl_typedef_body_ex {free_decl_arg($$);}
-%type decl_typedef_body {decl_arg*}
-%destructor decl_typedef_body {free_decl_arg($$);}
-%type decl_typedef_body_fn_args {decl_args *}
-%destructor decl_typedef_body_fn_args {free_decl_args($$);}
-%type decl {decl*}
-%destructor decl {free_decl($$);}
-%type decl_func {decl_arg*}
-%destructor decl_func {free_decl_arg($$);}
-%type decl_abi {decl_abi*}
-%destructor decl_abi {free_decl_abi($$);}
-%type decl_var {decl_var*}
-%destructor decl_var {free_decl_var($$);}
-%type decl_vars {decl_vars*}
-%destructor decl_vars {free_decl_vars($$);}
-%type decl_arg {decl_arg*}
-%destructor decl_arg {free_decl_arg($$);}
-%type decl_args {decl_args*}
-%destructor decl_args {free_decl_args($$);}
-%type struct_args {decl_args*}
-%destructor struct_args {free_decl_args($$);}
-%type struct_arg {decl_arg*}
-%destructor struct_arg {free_decl_arg($$);}
-%type struct_layout {decl_struct_layout*}
-%destructor struct_layout {free_decl_struct_layout($$);}
-%type decl_type {decl_type*}
-%destructor decl_type {free_decl_type($$);}
-%type const_decl_type {decl_type*}
-%destructor const_decl_type {free_decl_type($$);}
-%type impl {impl*}
-%destructor impl {free_impl($$);}
-%type impl_func {impl_func*}
-%destructor impl_func {free_impl_func($$);}
-%type impl_def_val {impl_def_val*}
-%destructor impl_def_val {free_impl_def_val($$);}
-%type impl_var {impl_var*}
-%destructor impl_var {free_impl_var($$);}
-%type impl_arg {impl_arg*}
-%destructor impl_arg {free_impl_arg($$);}
-%type impl_args {impl_args*}
-%destructor impl_args {free_impl_args($$);}
-%type impl_vararg {impl_arg*}
-%destructor impl_vararg {free_impl_arg($$);}
-%type impl_arg_list {impl_args*}
-%destructor impl_arg_list {free_impl_args($$);}
-%type impl_stmts {impl_stmts*}
-%destructor impl_stmts {free_impl_stmts($$);}
-%type impl_stmt {impl_stmt*}
-%destructor impl_stmt {free_impl_stmt($$);}
-%type num_exp {num_exp*}
-%destructor num_exp {free_num_exp($$);}
-%type let_stmt {let_stmt*}
-%destructor let_stmt {free_let_stmt($$);}
-%type let_calloc {let_calloc*}
-%destructor let_calloc {free_let_calloc($$);}
-%type let_func {let_func*}
-%destructor let_func {free_let_func($$);}
-%type callback_arg_list {set_values *}
-%destructor callback_arg_list {free_set_values($$);}
-%type callback_args {set_values *}
-%destructor callback_args {free_set_values($$);}
-%type let_val {let_val*}
-%destructor let_val {free_let_val($$);}
-%type let_vals {let_vals*}
-%destructor let_vals {free_let_vals($$);}
-%type set_stmt {set_stmt*}
-%destructor set_stmt {free_set_stmt($$);}
-%type set_value {set_value*}
-%destructor set_value {free_set_value($$);}
-%type set_vals {set_value*}
-%destructor set_vals {free_set_value($$);}
-%type set_func {set_func*}
-%destructor set_func {free_set_func($$);}
-%type return_stmt {return_stmt*}
-%destructor return_stmt {free_return_stmt($$);}
-%type free_stmt {free_stmt*}
-%destructor free_stmt {free_free_stmt($$);}
-%type free_calls {free_calls*}
-%destructor free_calls {free_free_calls($$);}
-%type free_call {free_call*}
-%destructor free_call {free_free_call($$);}
-%type impl_type {impl_type*}
-%destructor impl_type {free_impl_type($$);}
-%type reference {char}
+%nonassoc NAME.
+%right NOT TILDE.
+%left PIPE.
+%left CARET.
+%left AMPERSAND.
+%left LSHIFT RSHIFT.
+%left PLUS MINUS.
+%left ASTERISK SLASH MODULO.
+%fallback NAME TEMP FREE SET LET RETURN CALLOC CALLBACK ZVAL LIB STRING COUNT.
+%type decl_enum {struct psi_decl_enum *}
+%destructor decl_enum {psi_decl_enum_free(&$$);}
+%type decl_enum_items {struct psi_plist*}
+%destructor decl_enum_items {psi_plist_free($$);}
+%type decl_enum_item {struct psi_decl_enum_item*}
+%destructor decl_enum_item {psi_decl_enum_item_free(&$$);}
+%type decl_struct_args_block {struct psi_plist*}
+%destructor decl_struct_args_block {psi_plist_free($$);}
+%type decl_struct_args {struct psi_plist*}
+%destructor decl_struct_args {psi_plist_free($$);}
+%type decl_struct {struct psi_decl_struct*}
+%destructor decl_struct {psi_decl_struct_free(&$$);}
+%type align_and_size {struct psi_layout}
+%type decl_union {struct psi_decl_union*}
+%destructor decl_union {psi_decl_union_free(&$$);}
+%type const_type {struct psi_const_type*}
+%destructor const_type {psi_const_type_free(&$$);}
+%type constant {struct psi_const*}
+%destructor constant {psi_const_free(&$$);}
+%type decl_typedef {struct psi_decl_arg*}
+%destructor decl_typedef {psi_decl_arg_free(&$$);}
+%type decl_typedef_body_ex {struct psi_decl_arg*}
+%destructor decl_typedef_body_ex {psi_decl_arg_free(&$$);}
+%type decl_typedef_body {struct psi_decl_arg*}
+%destructor decl_typedef_body {psi_decl_arg_free(&$$);}
+%type decl_typedef_body_fn_args {struct psi_plist*}
+%destructor decl_typedef_body_fn_args {psi_plist_free($$);}
+%type decl {struct psi_decl*}
+%destructor decl {psi_decl_free(&$$);}
+%type decl_func {struct psi_decl_arg*}
+%destructor decl_func {psi_decl_arg_free(&$$);}
+%type decl_abi {struct psi_decl_abi*}
+%destructor decl_abi {psi_decl_abi_free(&$$);}
+%type decl_var {struct psi_decl_var*}
+%destructor decl_var {psi_decl_var_free(&$$);}
+%type decl_vars {struct psi_plist*}
+%destructor decl_vars {psi_plist_free($$);}
+%type decl_arg {struct psi_decl_arg*}
+%destructor decl_arg {psi_decl_arg_free(&$$);}
+%type decl_args {struct psi_plist*}
+%destructor decl_args {psi_plist_free($$);}
+%type struct_args {struct psi_plist*}
+%destructor struct_args {psi_plist_free($$);}
+%type struct_arg {struct psi_decl_arg*}
+%destructor struct_arg {psi_decl_arg_free(&$$);}
+%type decl_layout {struct psi_layout*}
+%destructor decl_layout {psi_layout_free(&$$);}
+%type decl_type {struct psi_decl_type*}
+%destructor decl_type {psi_decl_type_free(&$$);}
+%type const_decl_type {struct psi_decl_type*}
+%destructor const_decl_type {psi_decl_type_free(&$$);}
+%type impl {struct psi_impl*}
+%destructor impl {psi_impl_free(&$$);}
+%type impl_func {struct psi_impl_func*}
+%destructor impl_func {psi_impl_func_free(&$$);}
+%type impl_def_val {struct psi_impl_def_val*}
+%destructor impl_def_val {psi_impl_def_val_free(&$$);}
+%type impl_var {struct psi_impl_var*}
+%destructor impl_var {psi_impl_var_free(&$$);}
+%type impl_arg {struct psi_impl_arg*}
+%destructor impl_arg {psi_impl_arg_free(&$$);}
+%type impl_args {struct psi_plist*}
+%destructor impl_args {psi_plist_free($$);}
+%type impl_vararg {struct psi_impl_arg*}
+%destructor impl_vararg {psi_impl_arg_free(&$$);}
+%type impl_stmts {struct psi_plist*}
+%destructor impl_stmts {psi_plist_free($$);}
+%type impl_stmt {struct psi_token**}
+%destructor impl_stmt {psi_impl_stmt_free(&$$);}
+%type number {struct psi_number*}
+%destructor number {psi_number_free(&$$);}
+%type num_exp {struct psi_num_exp*}
+%destructor num_exp {psi_num_exp_free(&$$);}
+%type let_stmt {struct psi_let_stmt*}
+%destructor let_stmt {psi_let_stmt_free(&$$);}
+%type let_calloc {struct psi_let_calloc*}
+%destructor let_calloc {psi_let_calloc_free(&$$);}
+%type let_func {struct psi_let_func*}
+%destructor let_func {psi_let_func_free(&$$);}
+%type callback_arg_list {struct psi_plist *}
+%destructor callback_arg_list {psi_plist_free($$);}
+%type callback_args {struct psi_plist *}
+%destructor callback_args {psi_plist_free($$);}
+%type let_callback {struct psi_let_callback*}
+%destructor let_callback {psi_let_callback_free(&$$);}
+%type let_exp {struct psi_let_exp*}
+%destructor let_exp {psi_let_exp_free(&$$);}
+%type let_exps {struct psi_plist*}
+%destructor let_exps {psi_plist_free($$);}
+%type set_stmt {struct psi_set_stmt*}
+%destructor set_stmt {psi_set_stmt_free(&$$);}
+%type set_exp {struct psi_set_exp*}
+%destructor set_exp {psi_set_exp_free(&$$);}
+%type set_exps {struct psi_plist*}
+%destructor set_exps {psi_plist_free($$);}
+%type set_func {struct psi_set_func*}
+%destructor set_func {psi_set_func_free(&$$);}
+%type return_stmt {struct psi_return_stmt*}
+%destructor return_stmt {psi_return_stmt_free(&$$);}
+%type free_stmt {struct psi_free_stmt*}
+%destructor free_stmt {psi_free_stmt_free(&$$);}
+%type free_exps {struct psi_plist*}
+%destructor free_exps {psi_plist_free($$);}
+%type free_exp {struct psi_free_exp*}
+%destructor free_exp {psi_free_exp_free(&$$);}
+%type impl_type {struct psi_impl_type*}
+%destructor impl_type {psi_impl_type_free(&$$);}
+%type reference {bool}