Home | History | Annotate | Line # | Download | only in config
loongarch-parse.c revision 1.1.1.1.2.1
      1          1.1  christos /* A Bison parser, made by GNU Bison 3.8.2.  */
      2          1.1  christos 
      3          1.1  christos /* Bison implementation for Yacc-like parsers in C
      4          1.1  christos 
      5          1.1  christos    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
      6          1.1  christos    Inc.
      7          1.1  christos 
      8          1.1  christos    This program is free software: you can redistribute it and/or modify
      9          1.1  christos    it under the terms of the GNU General Public License as published by
     10          1.1  christos    the Free Software Foundation, either version 3 of the License, or
     11          1.1  christos    (at your option) any later version.
     12          1.1  christos 
     13          1.1  christos    This program is distributed in the hope that it will be useful,
     14          1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     15          1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16          1.1  christos    GNU General Public License for more details.
     17          1.1  christos 
     18          1.1  christos    You should have received a copy of the GNU General Public License
     19          1.1  christos    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
     20          1.1  christos 
     21          1.1  christos /* As a special exception, you may create a larger work that contains
     22          1.1  christos    part or all of the Bison parser skeleton and distribute that work
     23          1.1  christos    under terms of your choice, so long as that work isn't itself a
     24          1.1  christos    parser generator using the skeleton or a modified version thereof
     25          1.1  christos    as a parser skeleton.  Alternatively, if you modify or redistribute
     26          1.1  christos    the parser skeleton itself, you may (at your option) remove this
     27          1.1  christos    special exception, which will cause the skeleton and the resulting
     28          1.1  christos    Bison output files to be licensed under the GNU General Public
     29          1.1  christos    License without this special exception.
     30          1.1  christos 
     31          1.1  christos    This special exception was added by the Free Software Foundation in
     32          1.1  christos    version 2.2 of Bison.  */
     33          1.1  christos 
     34          1.1  christos /* C LALR(1) parser skeleton written by Richard Stallman, by
     35          1.1  christos    simplifying the original so-called "semantic" parser.  */
     36          1.1  christos 
     37          1.1  christos /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
     38          1.1  christos    especially those whose name start with YY_ or yy_.  They are
     39          1.1  christos    private implementation details that can be changed or removed.  */
     40          1.1  christos 
     41          1.1  christos /* All symbols defined below should begin with yy or YY, to avoid
     42          1.1  christos    infringing on user name space.  This should be done even for local
     43          1.1  christos    variables, as they might otherwise be expanded by user macros.
     44          1.1  christos    There are some unavoidable exceptions within include files to
     45          1.1  christos    define necessary library symbols; they are noted "INFRINGES ON
     46          1.1  christos    USER NAME SPACE" below.  */
     47          1.1  christos 
     48          1.1  christos /* Identify Bison output, and Bison version.  */
     49          1.1  christos #define YYBISON 30802
     50          1.1  christos 
     51          1.1  christos /* Bison version string.  */
     52          1.1  christos #define YYBISON_VERSION "3.8.2"
     53          1.1  christos 
     54          1.1  christos /* Skeleton name.  */
     55          1.1  christos #define YYSKELETON_NAME "yacc.c"
     56          1.1  christos 
     57          1.1  christos /* Pure parsers.  */
     58          1.1  christos #define YYPURE 0
     59          1.1  christos 
     60          1.1  christos /* Push parsers.  */
     61          1.1  christos #define YYPUSH 0
     62          1.1  christos 
     63          1.1  christos /* Pull parsers.  */
     64          1.1  christos #define YYPULL 1
     65          1.1  christos 
     66          1.1  christos 
     67          1.1  christos 
     68          1.1  christos 
     69          1.1  christos /* First part of user prologue.  */
     70          1.1  christos #line 19 "./config/loongarch-parse.y"
     71          1.1  christos 
     72          1.1  christos #include "as.h"
     73          1.1  christos #include "loongarch-lex.h"
     74          1.1  christos #include "loongarch-parse.h"
     75          1.1  christos static void yyerror (const char *s ATTRIBUTE_UNUSED)
     76          1.1  christos {
     77          1.1  christos };
     78          1.1  christos int yylex (void);
     79          1.1  christos 
     80          1.1  christos 
     81          1.1  christos static struct reloc_info *top, *end;
     82          1.1  christos 
     83          1.1  christos static expressionS const_0 =
     84          1.1  christos {
     85          1.1  christos   .X_op = O_constant,
     86          1.1  christos   .X_add_number = 0
     87          1.1  christos };
     88          1.1  christos 
     89          1.1  christos static int
     90          1.1  christos is_const (struct reloc_info *info)
     91          1.1  christos {
     92          1.1  christos   return (info->type == BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE
     93          1.1  christos 	  && info->value.X_op == O_constant);
     94          1.1  christos }
     95          1.1  christos 
     96          1.1  christos int
     97          1.1  christos loongarch_parse_expr (const char *expr,
     98          1.1  christos 		      struct reloc_info *reloc_stack_top,
     99          1.1  christos 		      size_t max_reloc_num,
    100          1.1  christos 		      size_t *reloc_num,
    101          1.1  christos 		      offsetT *imm)
    102          1.1  christos {
    103          1.1  christos   int ret;
    104          1.1  christos   struct yy_buffer_state *buffstate;
    105          1.1  christos   top = reloc_stack_top;
    106          1.1  christos   end = top + max_reloc_num;
    107          1.1  christos   buffstate = yy_scan_string (expr);
    108          1.1  christos   ret = yyparse ();
    109          1.1  christos 
    110          1.1  christos   if (ret == 0)
    111          1.1  christos     {
    112          1.1  christos       if (is_const (top - 1))
    113          1.1  christos 	*imm = (--top)->value.X_add_number;
    114          1.1  christos       else
    115          1.1  christos 	*imm = 0;
    116          1.1  christos       *reloc_num = top - reloc_stack_top;
    117          1.1  christos     }
    118          1.1  christos   yy_delete_buffer (buffstate);
    119          1.1  christos 
    120          1.1  christos   return ret;
    121          1.1  christos }
    122          1.1  christos 
    123          1.1  christos static void
    124          1.1  christos emit_const (offsetT imm)
    125          1.1  christos {
    126          1.1  christos   if (end <= top)
    127          1.1  christos     as_fatal (_("expr too huge"));
    128          1.1  christos   top->type = BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE;
    129          1.1  christos   top->value.X_op = O_constant;
    130          1.1  christos   top->value.X_add_number = imm;
    131          1.1  christos   top++;
    132          1.1  christos }
    133          1.1  christos 
    134          1.1  christos static const char *
    135          1.1  christos my_getExpression (expressionS *ep, const char *str)
    136          1.1  christos {
    137          1.1  christos   char *save_in, *ret;
    138  1.1.1.1.2.1  perseant 
    139          1.1  christos   if (*str == ':')
    140          1.1  christos     {
    141          1.1  christos       unsigned long j;
    142          1.1  christos       char *str_1 = (char *) str;
    143          1.1  christos       j = strtol (str_1, &str_1, 10);
    144          1.1  christos       get_internal_label (ep, j, *str_1 == 'f');
    145          1.1  christos       return NULL;
    146          1.1  christos     }
    147          1.1  christos   save_in = input_line_pointer;
    148          1.1  christos   input_line_pointer = (char *)str;
    149          1.1  christos   expression (ep);
    150          1.1  christos   ret = input_line_pointer;
    151          1.1  christos   input_line_pointer = save_in;
    152          1.1  christos   return ret;
    153          1.1  christos }
    154          1.1  christos 
    155          1.1  christos static void
    156  1.1.1.1.2.1  perseant emit_const_var (const char *op)
    157  1.1.1.1.2.1  perseant {
    158  1.1.1.1.2.1  perseant   expressionS ep;
    159  1.1.1.1.2.1  perseant 
    160  1.1.1.1.2.1  perseant   if (end <= top)
    161  1.1.1.1.2.1  perseant     as_fatal (_("expr too huge"));
    162  1.1.1.1.2.1  perseant 
    163  1.1.1.1.2.1  perseant   my_getExpression (&ep, op);
    164  1.1.1.1.2.1  perseant 
    165  1.1.1.1.2.1  perseant   if (ep.X_op != O_constant)
    166  1.1.1.1.2.1  perseant     as_bad ("illegal operand: %s", op);
    167  1.1.1.1.2.1  perseant 
    168  1.1.1.1.2.1  perseant   top->value.X_op = O_constant;
    169  1.1.1.1.2.1  perseant   top->value.X_add_number = ep.X_add_number;
    170  1.1.1.1.2.1  perseant   top->type = BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE;
    171  1.1.1.1.2.1  perseant   top++;
    172  1.1.1.1.2.1  perseant }
    173  1.1.1.1.2.1  perseant 
    174  1.1.1.1.2.1  perseant static void
    175          1.1  christos reloc (const char *op_c_str, const char *id_c_str, offsetT addend)
    176          1.1  christos {
    177          1.1  christos   expressionS id_sym_expr;
    178  1.1.1.1.2.1  perseant   bfd_reloc_code_real_type btype;
    179          1.1  christos 
    180          1.1  christos   if (end <= top)
    181          1.1  christos     as_fatal (_("expr too huge"));
    182          1.1  christos 
    183  1.1.1.1.2.1  perseant   /* For compatible old asm code.  */
    184  1.1.1.1.2.1  perseant   if (0 == strcmp (op_c_str, "plt"))
    185  1.1.1.1.2.1  perseant     btype = BFD_RELOC_LARCH_B26;
    186          1.1  christos   else
    187          1.1  christos     {
    188  1.1.1.1.2.1  perseant       btype = loongarch_larch_reloc_name_lookup (NULL, op_c_str);
    189  1.1.1.1.2.1  perseant       if (btype == BFD_RELOC_NONE)
    190  1.1.1.1.2.1  perseant 	as_fatal (_("unsupported modifier %s"), op_c_str);
    191          1.1  christos     }
    192          1.1  christos 
    193  1.1.1.1.2.1  perseant   if (id_c_str)
    194  1.1.1.1.2.1  perseant   {
    195  1.1.1.1.2.1  perseant     my_getExpression (&id_sym_expr, id_c_str);
    196  1.1.1.1.2.1  perseant     id_sym_expr.X_add_number += addend;
    197  1.1.1.1.2.1  perseant   }
    198          1.1  christos   else
    199  1.1.1.1.2.1  perseant   {
    200  1.1.1.1.2.1  perseant     id_sym_expr.X_op = O_constant;
    201  1.1.1.1.2.1  perseant     id_sym_expr.X_add_number = addend;
    202  1.1.1.1.2.1  perseant   }
    203  1.1.1.1.2.1  perseant 
    204  1.1.1.1.2.1  perseant   top->value = id_sym_expr;
    205  1.1.1.1.2.1  perseant   top->type = btype;
    206  1.1.1.1.2.1  perseant   top++;
    207          1.1  christos }
    208          1.1  christos 
    209          1.1  christos static void
    210          1.1  christos emit_unary (char op)
    211          1.1  christos {
    212          1.1  christos   struct reloc_info *s_top = top - 1;
    213          1.1  christos   if (is_const (s_top))
    214          1.1  christos     {
    215          1.1  christos       offsetT opr = s_top->value.X_add_number;
    216          1.1  christos       switch (op)
    217          1.1  christos 	{
    218          1.1  christos 	case '+':
    219          1.1  christos 	  break;
    220          1.1  christos 	case '-':
    221          1.1  christos 	  opr = -opr;
    222          1.1  christos 	  break;
    223          1.1  christos 	case '~':
    224          1.1  christos 	  opr = ~opr;
    225          1.1  christos 	  break;
    226          1.1  christos 	case '!':
    227          1.1  christos 	  opr = !opr;
    228          1.1  christos 	  break;
    229          1.1  christos 	default:
    230          1.1  christos 	  abort ();
    231          1.1  christos 	}
    232          1.1  christos       s_top->value.X_add_number = opr;
    233          1.1  christos     }
    234          1.1  christos   else
    235          1.1  christos     {
    236          1.1  christos       if (end <= top)
    237          1.1  christos 	as_fatal (_("expr too huge"));
    238          1.1  christos       switch (op)
    239          1.1  christos 	{
    240          1.1  christos 	case '!':
    241          1.1  christos 	  top->type = BFD_RELOC_LARCH_SOP_NOT;
    242          1.1  christos 	  break;
    243          1.1  christos 	default:
    244          1.1  christos 	  abort ();
    245          1.1  christos 	}
    246          1.1  christos       top->value = const_0;
    247          1.1  christos       top++;
    248          1.1  christos     }
    249          1.1  christos }
    250          1.1  christos 
    251          1.1  christos static void
    252          1.1  christos emit_bin (int op)
    253          1.1  christos {
    254          1.1  christos   struct reloc_info *last_1st = top - 1, *last_2nd = top - 2;
    255          1.1  christos   if (is_const (last_1st) && is_const (last_2nd))
    256          1.1  christos     {
    257          1.1  christos       offsetT opr1 = last_2nd->value.X_add_number;
    258          1.1  christos       offsetT opr2 = last_1st->value.X_add_number;
    259          1.1  christos       switch (op)
    260          1.1  christos 	{
    261          1.1  christos 	case '*':
    262          1.1  christos 	  opr1 = opr1 * opr2;
    263          1.1  christos 	  break;
    264          1.1  christos 	case '/':
    265          1.1  christos 	  opr1 = opr1 / opr2;
    266          1.1  christos 	  break;
    267          1.1  christos 	case '%':
    268          1.1  christos 	  opr1 = opr1 % opr2;
    269          1.1  christos 	  break;
    270          1.1  christos 	case '+':
    271          1.1  christos 	  opr1 = opr1 + opr2;
    272          1.1  christos 	  break;
    273          1.1  christos 	case '-':
    274          1.1  christos 	  opr1 = opr1 - opr2;
    275          1.1  christos 	  break;
    276          1.1  christos 	case LEFT_OP:
    277          1.1  christos 	  opr1 = opr1 << opr2;
    278          1.1  christos 	  break;
    279          1.1  christos 	case RIGHT_OP:
    280          1.1  christos 	  /* Algorithm right shift.  */
    281          1.1  christos 	  opr1 = (offsetT)opr1 >> (offsetT)opr2;
    282          1.1  christos 	  break;
    283          1.1  christos 	case '<':
    284          1.1  christos 	  opr1 = opr1 < opr2;
    285          1.1  christos 	  break;
    286          1.1  christos 	case '>':
    287          1.1  christos 	  opr1 = opr1 > opr2;
    288          1.1  christos 	  break;
    289          1.1  christos 	case LE_OP:
    290          1.1  christos 	  opr1 = opr1 <= opr2;
    291          1.1  christos 	  break;
    292          1.1  christos 	case GE_OP:
    293          1.1  christos 	  opr1 = opr1 >= opr2;
    294          1.1  christos 	  break;
    295          1.1  christos 	case EQ_OP:
    296          1.1  christos 	  opr1 = opr1 == opr2;
    297          1.1  christos 	  break;
    298          1.1  christos 	case NE_OP:
    299          1.1  christos 	  opr1 = opr1 != opr2;
    300          1.1  christos 	  break;
    301          1.1  christos 	case '&':
    302          1.1  christos 	  opr1 = opr1 & opr2;
    303          1.1  christos 	  break;
    304          1.1  christos 	case '^':
    305          1.1  christos 	  opr1 = opr1 ^ opr2;
    306          1.1  christos 	  break;
    307          1.1  christos 	case '|':
    308          1.1  christos 	  opr1 = opr1 | opr2;
    309          1.1  christos 	  break;
    310          1.1  christos 	case AND_OP:
    311          1.1  christos 	  opr1 = opr1 && opr2;
    312          1.1  christos 	  break;
    313          1.1  christos 	case OR_OP:
    314          1.1  christos 	  opr1 = opr1 || opr2;
    315          1.1  christos 	  break;
    316          1.1  christos 	default:
    317          1.1  christos 	  abort ();
    318          1.1  christos 	}
    319          1.1  christos       last_2nd->value.X_add_number = opr1;
    320          1.1  christos       last_1st->type = 0;
    321          1.1  christos       top--;
    322          1.1  christos     }
    323          1.1  christos   else
    324          1.1  christos     {
    325          1.1  christos       if (end <= top)
    326          1.1  christos 	as_fatal (_("expr too huge"));
    327          1.1  christos       switch (op)
    328          1.1  christos 	{
    329          1.1  christos 	case '+':
    330          1.1  christos 	  top->type = BFD_RELOC_LARCH_SOP_ADD;
    331          1.1  christos 	  break;
    332          1.1  christos 	case '-':
    333          1.1  christos 	  top->type = BFD_RELOC_LARCH_SOP_SUB;
    334          1.1  christos 	  break;
    335          1.1  christos 	case LEFT_OP:
    336          1.1  christos 	  top->type = BFD_RELOC_LARCH_SOP_SL;
    337          1.1  christos 	  break;
    338          1.1  christos 	case RIGHT_OP:
    339          1.1  christos 	  top->type = BFD_RELOC_LARCH_SOP_SR;
    340          1.1  christos 	  break;
    341          1.1  christos 	case '&':
    342          1.1  christos 	  top->type = BFD_RELOC_LARCH_SOP_AND;
    343          1.1  christos 	  break;
    344          1.1  christos 	default:
    345          1.1  christos 	  abort ();
    346          1.1  christos 	}
    347          1.1  christos       top->value = const_0;
    348          1.1  christos       top++;
    349          1.1  christos     }
    350          1.1  christos }
    351          1.1  christos 
    352          1.1  christos static void
    353          1.1  christos emit_if_else (void)
    354          1.1  christos {
    355          1.1  christos   struct reloc_info *last_1st = top - 1;
    356          1.1  christos   struct reloc_info *last_2nd = top - 2;
    357          1.1  christos   struct reloc_info *last_3rd = top - 3;
    358          1.1  christos   if (is_const (last_1st) && is_const (last_2nd) && is_const (last_3rd))
    359          1.1  christos     {
    360          1.1  christos       offsetT opr1 = last_3rd->value.X_add_number;
    361          1.1  christos       offsetT opr2 = last_2nd->value.X_add_number;
    362          1.1  christos       offsetT opr3 = last_1st->value.X_add_number;
    363          1.1  christos       opr1 = opr1 ? opr2 : opr3;
    364          1.1  christos       last_3rd->value.X_add_number = opr1;
    365          1.1  christos       last_2nd->type = 0;
    366          1.1  christos       last_1st->type = 0;
    367          1.1  christos       top -= 2;
    368          1.1  christos     }
    369          1.1  christos   else
    370          1.1  christos     {
    371          1.1  christos       if (end <= top)
    372          1.1  christos 	as_fatal (_("expr too huge"));
    373          1.1  christos       top->type = BFD_RELOC_LARCH_SOP_IF_ELSE;
    374          1.1  christos       top->value = const_0;
    375          1.1  christos       top++;
    376          1.1  christos     }
    377          1.1  christos }
    378          1.1  christos 
    379          1.1  christos 
    380  1.1.1.1.2.1  perseant #line 381 "config/loongarch-parse.c"
    381          1.1  christos 
    382          1.1  christos # ifndef YY_CAST
    383          1.1  christos #  ifdef __cplusplus
    384          1.1  christos #   define YY_CAST(Type, Val) static_cast<Type> (Val)
    385          1.1  christos #   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
    386          1.1  christos #  else
    387          1.1  christos #   define YY_CAST(Type, Val) ((Type) (Val))
    388          1.1  christos #   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
    389          1.1  christos #  endif
    390          1.1  christos # endif
    391          1.1  christos # ifndef YY_NULLPTR
    392          1.1  christos #  if defined __cplusplus
    393          1.1  christos #   if 201103L <= __cplusplus
    394          1.1  christos #    define YY_NULLPTR nullptr
    395          1.1  christos #   else
    396          1.1  christos #    define YY_NULLPTR 0
    397          1.1  christos #   endif
    398          1.1  christos #  else
    399          1.1  christos #   define YY_NULLPTR ((void*)0)
    400          1.1  christos #  endif
    401          1.1  christos # endif
    402          1.1  christos 
    403          1.1  christos /* Use api.header.include to #include this header
    404          1.1  christos    instead of duplicating it here.  */
    405          1.1  christos #ifndef YY_YY_CONFIG_LOONGARCH_PARSE_H_INCLUDED
    406          1.1  christos # define YY_YY_CONFIG_LOONGARCH_PARSE_H_INCLUDED
    407          1.1  christos /* Debug traces.  */
    408          1.1  christos #ifndef YYDEBUG
    409          1.1  christos # define YYDEBUG 0
    410          1.1  christos #endif
    411          1.1  christos #if YYDEBUG
    412          1.1  christos extern int yydebug;
    413          1.1  christos #endif
    414          1.1  christos 
    415          1.1  christos /* Token kinds.  */
    416          1.1  christos #ifndef YYTOKENTYPE
    417          1.1  christos # define YYTOKENTYPE
    418          1.1  christos   enum yytokentype
    419          1.1  christos   {
    420          1.1  christos     YYEMPTY = -2,
    421          1.1  christos     YYEOF = 0,                     /* "end of file"  */
    422          1.1  christos     YYerror = 256,                 /* error  */
    423          1.1  christos     YYUNDEF = 257,                 /* "invalid token"  */
    424          1.1  christos     INTEGER = 258,                 /* INTEGER  */
    425          1.1  christos     IDENTIFIER = 259,              /* IDENTIFIER  */
    426          1.1  christos     LEFT_OP = 260,                 /* LEFT_OP  */
    427          1.1  christos     RIGHT_OP = 261,                /* RIGHT_OP  */
    428          1.1  christos     LE_OP = 262,                   /* LE_OP  */
    429          1.1  christos     GE_OP = 263,                   /* GE_OP  */
    430          1.1  christos     EQ_OP = 264,                   /* EQ_OP  */
    431          1.1  christos     NE_OP = 265,                   /* NE_OP  */
    432          1.1  christos     AND_OP = 266,                  /* AND_OP  */
    433          1.1  christos     OR_OP = 267                    /* OR_OP  */
    434          1.1  christos   };
    435          1.1  christos   typedef enum yytokentype yytoken_kind_t;
    436          1.1  christos #endif
    437          1.1  christos /* Token kinds.  */
    438          1.1  christos #define YYEMPTY -2
    439          1.1  christos #define YYEOF 0
    440          1.1  christos #define YYerror 256
    441          1.1  christos #define YYUNDEF 257
    442          1.1  christos #define INTEGER 258
    443          1.1  christos #define IDENTIFIER 259
    444          1.1  christos #define LEFT_OP 260
    445          1.1  christos #define RIGHT_OP 261
    446          1.1  christos #define LE_OP 262
    447          1.1  christos #define GE_OP 263
    448          1.1  christos #define EQ_OP 264
    449          1.1  christos #define NE_OP 265
    450          1.1  christos #define AND_OP 266
    451          1.1  christos #define OR_OP 267
    452          1.1  christos 
    453          1.1  christos /* Value type.  */
    454          1.1  christos #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
    455          1.1  christos union YYSTYPE
    456          1.1  christos {
    457  1.1.1.1.2.1  perseant #line 329 "./config/loongarch-parse.y"
    458          1.1  christos 
    459          1.1  christos char *c_str;
    460          1.1  christos offsetT imm;
    461          1.1  christos 
    462  1.1.1.1.2.1  perseant #line 463 "config/loongarch-parse.c"
    463          1.1  christos 
    464          1.1  christos };
    465          1.1  christos typedef union YYSTYPE YYSTYPE;
    466          1.1  christos # define YYSTYPE_IS_TRIVIAL 1
    467          1.1  christos # define YYSTYPE_IS_DECLARED 1
    468          1.1  christos #endif
    469          1.1  christos 
    470          1.1  christos 
    471          1.1  christos extern YYSTYPE yylval;
    472          1.1  christos 
    473          1.1  christos 
    474          1.1  christos int yyparse (void);
    475          1.1  christos 
    476          1.1  christos 
    477          1.1  christos #endif /* !YY_YY_CONFIG_LOONGARCH_PARSE_H_INCLUDED  */
    478          1.1  christos /* Symbol kind.  */
    479          1.1  christos enum yysymbol_kind_t
    480          1.1  christos {
    481          1.1  christos   YYSYMBOL_YYEMPTY = -2,
    482          1.1  christos   YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
    483          1.1  christos   YYSYMBOL_YYerror = 1,                    /* error  */
    484          1.1  christos   YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
    485          1.1  christos   YYSYMBOL_INTEGER = 3,                    /* INTEGER  */
    486          1.1  christos   YYSYMBOL_IDENTIFIER = 4,                 /* IDENTIFIER  */
    487          1.1  christos   YYSYMBOL_LEFT_OP = 5,                    /* LEFT_OP  */
    488          1.1  christos   YYSYMBOL_RIGHT_OP = 6,                   /* RIGHT_OP  */
    489          1.1  christos   YYSYMBOL_LE_OP = 7,                      /* LE_OP  */
    490          1.1  christos   YYSYMBOL_GE_OP = 8,                      /* GE_OP  */
    491          1.1  christos   YYSYMBOL_EQ_OP = 9,                      /* EQ_OP  */
    492          1.1  christos   YYSYMBOL_NE_OP = 10,                     /* NE_OP  */
    493          1.1  christos   YYSYMBOL_AND_OP = 11,                    /* AND_OP  */
    494          1.1  christos   YYSYMBOL_OR_OP = 12,                     /* OR_OP  */
    495          1.1  christos   YYSYMBOL_13_ = 13,                       /* '('  */
    496          1.1  christos   YYSYMBOL_14_ = 14,                       /* ')'  */
    497          1.1  christos   YYSYMBOL_15_ = 15,                       /* '%'  */
    498          1.1  christos   YYSYMBOL_16_ = 16,                       /* '-'  */
    499          1.1  christos   YYSYMBOL_17_ = 17,                       /* '+'  */
    500          1.1  christos   YYSYMBOL_18_ = 18,                       /* '~'  */
    501          1.1  christos   YYSYMBOL_19_ = 19,                       /* '!'  */
    502          1.1  christos   YYSYMBOL_20_ = 20,                       /* '*'  */
    503          1.1  christos   YYSYMBOL_21_ = 21,                       /* '/'  */
    504          1.1  christos   YYSYMBOL_22_ = 22,                       /* '<'  */
    505          1.1  christos   YYSYMBOL_23_ = 23,                       /* '>'  */
    506          1.1  christos   YYSYMBOL_24_ = 24,                       /* '&'  */
    507          1.1  christos   YYSYMBOL_25_ = 25,                       /* '^'  */
    508          1.1  christos   YYSYMBOL_26_ = 26,                       /* '|'  */
    509          1.1  christos   YYSYMBOL_27_ = 27,                       /* '?'  */
    510          1.1  christos   YYSYMBOL_28_ = 28,                       /* ':'  */
    511          1.1  christos   YYSYMBOL_YYACCEPT = 29,                  /* $accept  */
    512          1.1  christos   YYSYMBOL_primary_expression = 30,        /* primary_expression  */
    513          1.1  christos   YYSYMBOL_addend = 31,                    /* addend  */
    514          1.1  christos   YYSYMBOL_unary_expression = 32,          /* unary_expression  */
    515          1.1  christos   YYSYMBOL_multiplicative_expression = 33, /* multiplicative_expression  */
    516          1.1  christos   YYSYMBOL_additive_expression = 34,       /* additive_expression  */
    517          1.1  christos   YYSYMBOL_shift_expression = 35,          /* shift_expression  */
    518          1.1  christos   YYSYMBOL_relational_expression = 36,     /* relational_expression  */
    519          1.1  christos   YYSYMBOL_equality_expression = 37,       /* equality_expression  */
    520          1.1  christos   YYSYMBOL_and_expression = 38,            /* and_expression  */
    521          1.1  christos   YYSYMBOL_exclusive_or_expression = 39,   /* exclusive_or_expression  */
    522          1.1  christos   YYSYMBOL_inclusive_or_expression = 40,   /* inclusive_or_expression  */
    523          1.1  christos   YYSYMBOL_logical_and_expression = 41,    /* logical_and_expression  */
    524          1.1  christos   YYSYMBOL_logical_or_expression = 42,     /* logical_or_expression  */
    525          1.1  christos   YYSYMBOL_conditional_expression = 43,    /* conditional_expression  */
    526          1.1  christos   YYSYMBOL_expression = 44                 /* expression  */
    527          1.1  christos };
    528          1.1  christos typedef enum yysymbol_kind_t yysymbol_kind_t;
    529          1.1  christos 
    530          1.1  christos 
    531          1.1  christos 
    532          1.1  christos 
    533          1.1  christos #ifdef short
    534          1.1  christos # undef short
    535          1.1  christos #endif
    536          1.1  christos 
    537          1.1  christos /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
    538          1.1  christos    <limits.h> and (if available) <stdint.h> are included
    539          1.1  christos    so that the code can choose integer types of a good width.  */
    540          1.1  christos 
    541          1.1  christos #ifndef __PTRDIFF_MAX__
    542          1.1  christos # include <limits.h> /* INFRINGES ON USER NAME SPACE */
    543          1.1  christos # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
    544          1.1  christos #  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
    545          1.1  christos #  define YY_STDINT_H
    546          1.1  christos # endif
    547          1.1  christos #endif
    548          1.1  christos 
    549          1.1  christos /* Narrow types that promote to a signed type and that can represent a
    550          1.1  christos    signed or unsigned integer of at least N bits.  In tables they can
    551          1.1  christos    save space and decrease cache pressure.  Promoting to a signed type
    552          1.1  christos    helps avoid bugs in integer arithmetic.  */
    553          1.1  christos 
    554          1.1  christos #ifdef __INT_LEAST8_MAX__
    555          1.1  christos typedef __INT_LEAST8_TYPE__ yytype_int8;
    556          1.1  christos #elif defined YY_STDINT_H
    557          1.1  christos typedef int_least8_t yytype_int8;
    558          1.1  christos #else
    559          1.1  christos typedef signed char yytype_int8;
    560          1.1  christos #endif
    561          1.1  christos 
    562          1.1  christos #ifdef __INT_LEAST16_MAX__
    563          1.1  christos typedef __INT_LEAST16_TYPE__ yytype_int16;
    564          1.1  christos #elif defined YY_STDINT_H
    565          1.1  christos typedef int_least16_t yytype_int16;
    566          1.1  christos #else
    567          1.1  christos typedef short yytype_int16;
    568          1.1  christos #endif
    569          1.1  christos 
    570          1.1  christos /* Work around bug in HP-UX 11.23, which defines these macros
    571          1.1  christos    incorrectly for preprocessor constants.  This workaround can likely
    572          1.1  christos    be removed in 2023, as HPE has promised support for HP-UX 11.23
    573          1.1  christos    (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
    574          1.1  christos    <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>.  */
    575          1.1  christos #ifdef __hpux
    576          1.1  christos # undef UINT_LEAST8_MAX
    577          1.1  christos # undef UINT_LEAST16_MAX
    578          1.1  christos # define UINT_LEAST8_MAX 255
    579          1.1  christos # define UINT_LEAST16_MAX 65535
    580          1.1  christos #endif
    581          1.1  christos 
    582          1.1  christos #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
    583          1.1  christos typedef __UINT_LEAST8_TYPE__ yytype_uint8;
    584          1.1  christos #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
    585          1.1  christos        && UINT_LEAST8_MAX <= INT_MAX)
    586          1.1  christos typedef uint_least8_t yytype_uint8;
    587          1.1  christos #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
    588          1.1  christos typedef unsigned char yytype_uint8;
    589          1.1  christos #else
    590          1.1  christos typedef short yytype_uint8;
    591          1.1  christos #endif
    592          1.1  christos 
    593          1.1  christos #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
    594          1.1  christos typedef __UINT_LEAST16_TYPE__ yytype_uint16;
    595          1.1  christos #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
    596          1.1  christos        && UINT_LEAST16_MAX <= INT_MAX)
    597          1.1  christos typedef uint_least16_t yytype_uint16;
    598          1.1  christos #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
    599          1.1  christos typedef unsigned short yytype_uint16;
    600          1.1  christos #else
    601          1.1  christos typedef int yytype_uint16;
    602          1.1  christos #endif
    603          1.1  christos 
    604          1.1  christos #ifndef YYPTRDIFF_T
    605          1.1  christos # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
    606          1.1  christos #  define YYPTRDIFF_T __PTRDIFF_TYPE__
    607          1.1  christos #  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
    608          1.1  christos # elif defined PTRDIFF_MAX
    609          1.1  christos #  ifndef ptrdiff_t
    610          1.1  christos #   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
    611          1.1  christos #  endif
    612          1.1  christos #  define YYPTRDIFF_T ptrdiff_t
    613          1.1  christos #  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
    614          1.1  christos # else
    615          1.1  christos #  define YYPTRDIFF_T long
    616          1.1  christos #  define YYPTRDIFF_MAXIMUM LONG_MAX
    617          1.1  christos # endif
    618          1.1  christos #endif
    619          1.1  christos 
    620          1.1  christos #ifndef YYSIZE_T
    621          1.1  christos # ifdef __SIZE_TYPE__
    622          1.1  christos #  define YYSIZE_T __SIZE_TYPE__
    623          1.1  christos # elif defined size_t
    624          1.1  christos #  define YYSIZE_T size_t
    625          1.1  christos # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
    626          1.1  christos #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
    627          1.1  christos #  define YYSIZE_T size_t
    628          1.1  christos # else
    629          1.1  christos #  define YYSIZE_T unsigned
    630          1.1  christos # endif
    631          1.1  christos #endif
    632          1.1  christos 
    633          1.1  christos #define YYSIZE_MAXIMUM                                  \
    634          1.1  christos   YY_CAST (YYPTRDIFF_T,                                 \
    635          1.1  christos            (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
    636          1.1  christos             ? YYPTRDIFF_MAXIMUM                         \
    637          1.1  christos             : YY_CAST (YYSIZE_T, -1)))
    638          1.1  christos 
    639          1.1  christos #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
    640          1.1  christos 
    641          1.1  christos 
    642          1.1  christos /* Stored state numbers (used for stacks). */
    643          1.1  christos typedef yytype_int8 yy_state_t;
    644          1.1  christos 
    645          1.1  christos /* State numbers in computations.  */
    646          1.1  christos typedef int yy_state_fast_t;
    647          1.1  christos 
    648          1.1  christos #ifndef YY_
    649          1.1  christos # if defined YYENABLE_NLS && YYENABLE_NLS
    650          1.1  christos #  if ENABLE_NLS
    651          1.1  christos #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
    652          1.1  christos #   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
    653          1.1  christos #  endif
    654          1.1  christos # endif
    655          1.1  christos # ifndef YY_
    656          1.1  christos #  define YY_(Msgid) Msgid
    657          1.1  christos # endif
    658          1.1  christos #endif
    659          1.1  christos 
    660          1.1  christos 
    661          1.1  christos #ifndef YY_ATTRIBUTE_PURE
    662          1.1  christos # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
    663          1.1  christos #  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
    664          1.1  christos # else
    665          1.1  christos #  define YY_ATTRIBUTE_PURE
    666          1.1  christos # endif
    667          1.1  christos #endif
    668          1.1  christos 
    669          1.1  christos #ifndef YY_ATTRIBUTE_UNUSED
    670          1.1  christos # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
    671          1.1  christos #  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
    672          1.1  christos # else
    673          1.1  christos #  define YY_ATTRIBUTE_UNUSED
    674          1.1  christos # endif
    675          1.1  christos #endif
    676          1.1  christos 
    677          1.1  christos /* Suppress unused-variable warnings by "using" E.  */
    678          1.1  christos #if ! defined lint || defined __GNUC__
    679          1.1  christos # define YY_USE(E) ((void) (E))
    680          1.1  christos #else
    681          1.1  christos # define YY_USE(E) /* empty */
    682          1.1  christos #endif
    683          1.1  christos 
    684          1.1  christos /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
    685          1.1  christos #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
    686          1.1  christos # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
    687          1.1  christos #  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
    688          1.1  christos     _Pragma ("GCC diagnostic push")                                     \
    689          1.1  christos     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
    690          1.1  christos # else
    691          1.1  christos #  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
    692          1.1  christos     _Pragma ("GCC diagnostic push")                                     \
    693          1.1  christos     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
    694          1.1  christos     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
    695          1.1  christos # endif
    696          1.1  christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
    697          1.1  christos     _Pragma ("GCC diagnostic pop")
    698          1.1  christos #else
    699          1.1  christos # define YY_INITIAL_VALUE(Value) Value
    700          1.1  christos #endif
    701          1.1  christos #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    702          1.1  christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    703          1.1  christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END
    704          1.1  christos #endif
    705          1.1  christos #ifndef YY_INITIAL_VALUE
    706          1.1  christos # define YY_INITIAL_VALUE(Value) /* Nothing. */
    707          1.1  christos #endif
    708          1.1  christos 
    709          1.1  christos #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
    710          1.1  christos # define YY_IGNORE_USELESS_CAST_BEGIN                          \
    711          1.1  christos     _Pragma ("GCC diagnostic push")                            \
    712          1.1  christos     _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
    713          1.1  christos # define YY_IGNORE_USELESS_CAST_END            \
    714          1.1  christos     _Pragma ("GCC diagnostic pop")
    715          1.1  christos #endif
    716          1.1  christos #ifndef YY_IGNORE_USELESS_CAST_BEGIN
    717          1.1  christos # define YY_IGNORE_USELESS_CAST_BEGIN
    718          1.1  christos # define YY_IGNORE_USELESS_CAST_END
    719          1.1  christos #endif
    720          1.1  christos 
    721          1.1  christos 
    722          1.1  christos #define YY_ASSERT(E) ((void) (0 && (E)))
    723          1.1  christos 
    724          1.1  christos #if !defined yyoverflow
    725          1.1  christos 
    726          1.1  christos /* The parser invokes alloca or malloc; define the necessary symbols.  */
    727          1.1  christos 
    728          1.1  christos # ifdef YYSTACK_USE_ALLOCA
    729          1.1  christos #  if YYSTACK_USE_ALLOCA
    730          1.1  christos #   ifdef __GNUC__
    731          1.1  christos #    define YYSTACK_ALLOC __builtin_alloca
    732          1.1  christos #   elif defined __BUILTIN_VA_ARG_INCR
    733          1.1  christos #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
    734          1.1  christos #   elif defined _AIX
    735          1.1  christos #    define YYSTACK_ALLOC __alloca
    736          1.1  christos #   elif defined _MSC_VER
    737          1.1  christos #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
    738          1.1  christos #    define alloca _alloca
    739          1.1  christos #   else
    740          1.1  christos #    define YYSTACK_ALLOC alloca
    741          1.1  christos #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
    742          1.1  christos #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    743          1.1  christos       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
    744          1.1  christos #     ifndef EXIT_SUCCESS
    745          1.1  christos #      define EXIT_SUCCESS 0
    746          1.1  christos #     endif
    747          1.1  christos #    endif
    748          1.1  christos #   endif
    749          1.1  christos #  endif
    750          1.1  christos # endif
    751          1.1  christos 
    752          1.1  christos # ifdef YYSTACK_ALLOC
    753          1.1  christos    /* Pacify GCC's 'empty if-body' warning.  */
    754          1.1  christos #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
    755          1.1  christos #  ifndef YYSTACK_ALLOC_MAXIMUM
    756          1.1  christos     /* The OS might guarantee only one guard page at the bottom of the stack,
    757          1.1  christos        and a page size can be as small as 4096 bytes.  So we cannot safely
    758          1.1  christos        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
    759          1.1  christos        to allow for a few compiler-allocated temporary stack slots.  */
    760          1.1  christos #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
    761          1.1  christos #  endif
    762          1.1  christos # else
    763          1.1  christos #  define YYSTACK_ALLOC YYMALLOC
    764          1.1  christos #  define YYSTACK_FREE YYFREE
    765          1.1  christos #  ifndef YYSTACK_ALLOC_MAXIMUM
    766          1.1  christos #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
    767          1.1  christos #  endif
    768          1.1  christos #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
    769          1.1  christos        && ! ((defined YYMALLOC || defined malloc) \
    770          1.1  christos              && (defined YYFREE || defined free)))
    771          1.1  christos #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    772          1.1  christos #   ifndef EXIT_SUCCESS
    773          1.1  christos #    define EXIT_SUCCESS 0
    774          1.1  christos #   endif
    775          1.1  christos #  endif
    776          1.1  christos #  ifndef YYMALLOC
    777          1.1  christos #   define YYMALLOC malloc
    778          1.1  christos #   if ! defined malloc && ! defined EXIT_SUCCESS
    779          1.1  christos void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
    780          1.1  christos #   endif
    781          1.1  christos #  endif
    782          1.1  christos #  ifndef YYFREE
    783          1.1  christos #   define YYFREE free
    784          1.1  christos #   if ! defined free && ! defined EXIT_SUCCESS
    785          1.1  christos void free (void *); /* INFRINGES ON USER NAME SPACE */
    786          1.1  christos #   endif
    787          1.1  christos #  endif
    788          1.1  christos # endif
    789          1.1  christos #endif /* !defined yyoverflow */
    790          1.1  christos 
    791          1.1  christos #if (! defined yyoverflow \
    792          1.1  christos      && (! defined __cplusplus \
    793          1.1  christos          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
    794          1.1  christos 
    795          1.1  christos /* A type that is properly aligned for any stack member.  */
    796          1.1  christos union yyalloc
    797          1.1  christos {
    798          1.1  christos   yy_state_t yyss_alloc;
    799          1.1  christos   YYSTYPE yyvs_alloc;
    800          1.1  christos };
    801          1.1  christos 
    802          1.1  christos /* The size of the maximum gap between one aligned stack and the next.  */
    803          1.1  christos # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
    804          1.1  christos 
    805          1.1  christos /* The size of an array large to enough to hold all stacks, each with
    806          1.1  christos    N elements.  */
    807          1.1  christos # define YYSTACK_BYTES(N) \
    808          1.1  christos      ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
    809          1.1  christos       + YYSTACK_GAP_MAXIMUM)
    810          1.1  christos 
    811          1.1  christos # define YYCOPY_NEEDED 1
    812          1.1  christos 
    813          1.1  christos /* Relocate STACK from its old location to the new one.  The
    814          1.1  christos    local variables YYSIZE and YYSTACKSIZE give the old and new number of
    815          1.1  christos    elements in the stack, and YYPTR gives the new location of the
    816          1.1  christos    stack.  Advance YYPTR to a properly aligned location for the next
    817          1.1  christos    stack.  */
    818          1.1  christos # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
    819          1.1  christos     do                                                                  \
    820          1.1  christos       {                                                                 \
    821          1.1  christos         YYPTRDIFF_T yynewbytes;                                         \
    822          1.1  christos         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
    823          1.1  christos         Stack = &yyptr->Stack_alloc;                                    \
    824          1.1  christos         yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
    825          1.1  christos         yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
    826          1.1  christos       }                                                                 \
    827          1.1  christos     while (0)
    828          1.1  christos 
    829          1.1  christos #endif
    830          1.1  christos 
    831          1.1  christos #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
    832          1.1  christos /* Copy COUNT objects from SRC to DST.  The source and destination do
    833          1.1  christos    not overlap.  */
    834          1.1  christos # ifndef YYCOPY
    835          1.1  christos #  if defined __GNUC__ && 1 < __GNUC__
    836          1.1  christos #   define YYCOPY(Dst, Src, Count) \
    837          1.1  christos       __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
    838          1.1  christos #  else
    839          1.1  christos #   define YYCOPY(Dst, Src, Count)              \
    840          1.1  christos       do                                        \
    841          1.1  christos         {                                       \
    842          1.1  christos           YYPTRDIFF_T yyi;                      \
    843          1.1  christos           for (yyi = 0; yyi < (Count); yyi++)   \
    844          1.1  christos             (Dst)[yyi] = (Src)[yyi];            \
    845          1.1  christos         }                                       \
    846          1.1  christos       while (0)
    847          1.1  christos #  endif
    848          1.1  christos # endif
    849          1.1  christos #endif /* !YYCOPY_NEEDED */
    850          1.1  christos 
    851          1.1  christos /* YYFINAL -- State number of the termination state.  */
    852  1.1.1.1.2.1  perseant #define YYFINAL  48
    853          1.1  christos /* YYLAST -- Last index in YYTABLE.  */
    854  1.1.1.1.2.1  perseant #define YYLAST   74
    855          1.1  christos 
    856          1.1  christos /* YYNTOKENS -- Number of terminals.  */
    857          1.1  christos #define YYNTOKENS  29
    858          1.1  christos /* YYNNTS -- Number of nonterminals.  */
    859          1.1  christos #define YYNNTS  16
    860          1.1  christos /* YYNRULES -- Number of rules.  */
    861  1.1.1.1.2.1  perseant #define YYNRULES  45
    862          1.1  christos /* YYNSTATES -- Number of states.  */
    863  1.1.1.1.2.1  perseant #define YYNSTATES  82
    864          1.1  christos 
    865          1.1  christos /* YYMAXUTOK -- Last valid token kind.  */
    866          1.1  christos #define YYMAXUTOK   267
    867          1.1  christos 
    868          1.1  christos 
    869          1.1  christos /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
    870          1.1  christos    as returned by yylex, with out-of-bounds checking.  */
    871          1.1  christos #define YYTRANSLATE(YYX)                                \
    872          1.1  christos   (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
    873          1.1  christos    ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
    874          1.1  christos    : YYSYMBOL_YYUNDEF)
    875          1.1  christos 
    876          1.1  christos /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
    877          1.1  christos    as returned by yylex.  */
    878          1.1  christos static const yytype_int8 yytranslate[] =
    879          1.1  christos {
    880          1.1  christos        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    881          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    882          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    883          1.1  christos        2,     2,     2,    19,     2,     2,     2,    15,    24,     2,
    884          1.1  christos       13,    14,    20,    17,     2,    16,     2,    21,     2,     2,
    885          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,    28,     2,
    886          1.1  christos       22,     2,    23,    27,     2,     2,     2,     2,     2,     2,
    887          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    888          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    889          1.1  christos        2,     2,     2,     2,    25,     2,     2,     2,     2,     2,
    890          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    891          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    892          1.1  christos        2,     2,     2,     2,    26,     2,    18,     2,     2,     2,
    893          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    894          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    895          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    896          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    897          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    898          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    899          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    900          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    901          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    902          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    903          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    904          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    905          1.1  christos        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
    906          1.1  christos        5,     6,     7,     8,     9,    10,    11,    12
    907          1.1  christos };
    908          1.1  christos 
    909          1.1  christos #if YYDEBUG
    910          1.1  christos /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
    911          1.1  christos static const yytype_int16 yyrline[] =
    912          1.1  christos {
    913  1.1.1.1.2.1  perseant        0,   343,   343,   344,   345,   346,   347,   351,   352,   353,
    914  1.1.1.1.2.1  perseant      357,   358,   359,   360,   361,   365,   366,   367,   368,   372,
    915  1.1.1.1.2.1  perseant      373,   374,   378,   379,   380,   384,   385,   386,   387,   388,
    916  1.1.1.1.2.1  perseant      392,   393,   394,   398,   399,   403,   404,   408,   409,   413,
    917  1.1.1.1.2.1  perseant      414,   418,   419,   423,   424,   428
    918          1.1  christos };
    919          1.1  christos #endif
    920          1.1  christos 
    921          1.1  christos /** Accessing symbol of state STATE.  */
    922          1.1  christos #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
    923          1.1  christos 
    924          1.1  christos #if YYDEBUG || 0
    925          1.1  christos /* The user-facing name of the symbol whose (internal) number is
    926          1.1  christos    YYSYMBOL.  No bounds checking.  */
    927          1.1  christos static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
    928          1.1  christos 
    929          1.1  christos /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    930          1.1  christos    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
    931          1.1  christos static const char *const yytname[] =
    932          1.1  christos {
    933          1.1  christos   "\"end of file\"", "error", "\"invalid token\"", "INTEGER",
    934          1.1  christos   "IDENTIFIER", "LEFT_OP", "RIGHT_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP",
    935          1.1  christos   "AND_OP", "OR_OP", "'('", "')'", "'%'", "'-'", "'+'", "'~'", "'!'",
    936          1.1  christos   "'*'", "'/'", "'<'", "'>'", "'&'", "'^'", "'|'", "'?'", "':'", "$accept",
    937          1.1  christos   "primary_expression", "addend", "unary_expression",
    938          1.1  christos   "multiplicative_expression", "additive_expression", "shift_expression",
    939          1.1  christos   "relational_expression", "equality_expression", "and_expression",
    940          1.1  christos   "exclusive_or_expression", "inclusive_or_expression",
    941          1.1  christos   "logical_and_expression", "logical_or_expression",
    942          1.1  christos   "conditional_expression", "expression", YY_NULLPTR
    943          1.1  christos };
    944          1.1  christos 
    945          1.1  christos static const char *
    946          1.1  christos yysymbol_name (yysymbol_kind_t yysymbol)
    947          1.1  christos {
    948          1.1  christos   return yytname[yysymbol];
    949          1.1  christos }
    950          1.1  christos #endif
    951          1.1  christos 
    952  1.1.1.1.2.1  perseant #define YYPACT_NINF (-28)
    953          1.1  christos 
    954          1.1  christos #define yypact_value_is_default(Yyn) \
    955          1.1  christos   ((Yyn) == YYPACT_NINF)
    956          1.1  christos 
    957          1.1  christos #define YYTABLE_NINF (-1)
    958          1.1  christos 
    959          1.1  christos #define yytable_value_is_error(Yyn) \
    960          1.1  christos   0
    961          1.1  christos 
    962          1.1  christos /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    963          1.1  christos    STATE-NUM.  */
    964          1.1  christos static const yytype_int8 yypact[] =
    965          1.1  christos {
    966  1.1.1.1.2.1  perseant        2,   -28,   -28,     2,    10,     2,     2,     2,     2,   -28,
    967  1.1.1.1.2.1  perseant      -28,     9,    23,    36,     0,    37,    -8,     7,    26,    25,
    968  1.1.1.1.2.1  perseant        1,   -28,    43,    31,    44,   -28,   -28,   -28,   -28,     2,
    969          1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    970  1.1.1.1.2.1  perseant        2,     2,     2,     2,     2,     2,     2,     2,   -28,   -28,
    971  1.1.1.1.2.1  perseant       45,   -28,   -28,   -28,     9,     9,    23,    23,    36,    36,
    972  1.1.1.1.2.1  perseant       36,    36,     0,     0,    37,    -8,     7,    26,    25,    30,
    973  1.1.1.1.2.1  perseant      -28,   -28,     2,    17,    21,   -28,   -28,    56,    57,   -28,
    974  1.1.1.1.2.1  perseant      -28,   -28
    975          1.1  christos };
    976          1.1  christos 
    977          1.1  christos /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
    978          1.1  christos    Performed when YYTABLE does not specify something else to do.  Zero
    979          1.1  christos    means the default is an error.  */
    980          1.1  christos static const yytype_int8 yydefact[] =
    981          1.1  christos {
    982  1.1.1.1.2.1  perseant        0,     2,     3,     0,     0,     0,     0,     0,     0,    10,
    983  1.1.1.1.2.1  perseant       15,    19,    22,    25,    30,    33,    35,    37,    39,    41,
    984  1.1.1.1.2.1  perseant       43,    45,     0,     0,     0,    12,    11,    13,    14,     0,
    985          1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    986  1.1.1.1.2.1  perseant        0,     0,     0,     0,     0,     0,     0,     0,     1,     4,
    987  1.1.1.1.2.1  perseant        0,    18,    16,    17,    21,    20,    23,    24,    28,    29,
    988  1.1.1.1.2.1  perseant       26,    27,    31,    32,    34,    36,    38,    40,    42,     0,
    989  1.1.1.1.2.1  perseant        9,     9,     0,     0,     0,    44,     6,     0,     0,     5,
    990  1.1.1.1.2.1  perseant        7,     8
    991          1.1  christos };
    992          1.1  christos 
    993          1.1  christos /* YYPGOTO[NTERM-NUM].  */
    994          1.1  christos static const yytype_int8 yypgoto[] =
    995          1.1  christos {
    996  1.1.1.1.2.1  perseant      -28,   -28,   -10,    -4,    18,    19,   -27,    15,    20,    22,
    997  1.1.1.1.2.1  perseant       24,    27,    28,   -28,    -9,    -3
    998          1.1  christos };
    999          1.1  christos 
   1000          1.1  christos /* YYDEFGOTO[NTERM-NUM].  */
   1001          1.1  christos static const yytype_int8 yydefgoto[] =
   1002          1.1  christos {
   1003  1.1.1.1.2.1  perseant        0,     9,    73,    10,    11,    12,    13,    14,    15,    16,
   1004  1.1.1.1.2.1  perseant       17,    18,    19,    20,    21,    22
   1005          1.1  christos };
   1006          1.1  christos 
   1007          1.1  christos /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
   1008          1.1  christos    positive, shift that token.  If negative, reduce the rule whose
   1009          1.1  christos    number is the opposite.  If YYTABLE_NINF, syntax error.  */
   1010          1.1  christos static const yytype_int8 yytable[] =
   1011          1.1  christos {
   1012  1.1.1.1.2.1  perseant       23,    25,    26,    27,    28,     1,     2,    36,    37,    58,
   1013  1.1.1.1.2.1  perseant       59,    60,    61,    46,    24,     3,    42,     4,     5,     6,
   1014  1.1.1.1.2.1  perseant        7,     8,    38,    39,    29,    51,    52,    53,    47,    30,
   1015  1.1.1.1.2.1  perseant       31,    76,    43,    77,    78,    79,    45,    77,    78,    32,
   1016  1.1.1.1.2.1  perseant       33,    34,    35,    48,    69,    49,    40,    41,    70,    71,
   1017  1.1.1.1.2.1  perseant       54,    55,    44,    56,    57,    62,    63,    50,    72,    80,
   1018  1.1.1.1.2.1  perseant       81,    74,    64,    75,     0,    65,     0,     0,    66,     0,
   1019  1.1.1.1.2.1  perseant        0,     0,    67,     0,    68
   1020          1.1  christos };
   1021          1.1  christos 
   1022          1.1  christos static const yytype_int8 yycheck[] =
   1023          1.1  christos {
   1024  1.1.1.1.2.1  perseant        3,     5,     6,     7,     8,     3,     4,     7,     8,    36,
   1025  1.1.1.1.2.1  perseant       37,    38,    39,    12,     4,    13,    24,    15,    16,    17,
   1026  1.1.1.1.2.1  perseant       18,    19,    22,    23,    15,    29,    30,    31,    27,    20,
   1027  1.1.1.1.2.1  perseant       21,    14,    25,    16,    17,    14,    11,    16,    17,    16,
   1028  1.1.1.1.2.1  perseant       17,     5,     6,     0,    47,    14,     9,    10,     3,     4,
   1029  1.1.1.1.2.1  perseant       32,    33,    26,    34,    35,    40,    41,    13,    28,     3,
   1030  1.1.1.1.2.1  perseant        3,    71,    42,    72,    -1,    43,    -1,    -1,    44,    -1,
   1031  1.1.1.1.2.1  perseant       -1,    -1,    45,    -1,    46
   1032          1.1  christos };
   1033          1.1  christos 
   1034          1.1  christos /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
   1035          1.1  christos    state STATE-NUM.  */
   1036          1.1  christos static const yytype_int8 yystos[] =
   1037          1.1  christos {
   1038  1.1.1.1.2.1  perseant        0,     3,     4,    13,    15,    16,    17,    18,    19,    30,
   1039  1.1.1.1.2.1  perseant       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
   1040  1.1.1.1.2.1  perseant       42,    43,    44,    44,     4,    32,    32,    32,    32,    15,
   1041  1.1.1.1.2.1  perseant       20,    21,    16,    17,     5,     6,     7,     8,    22,    23,
   1042  1.1.1.1.2.1  perseant        9,    10,    24,    25,    26,    11,    12,    27,     0,    14,
   1043  1.1.1.1.2.1  perseant       13,    32,    32,    32,    33,    33,    34,    34,    35,    35,
   1044  1.1.1.1.2.1  perseant       35,    35,    36,    36,    37,    38,    39,    40,    41,    44,
   1045  1.1.1.1.2.1  perseant        3,     4,    28,    31,    31,    43,    14,    16,    17,    14,
   1046  1.1.1.1.2.1  perseant        3,     3
   1047          1.1  christos };
   1048          1.1  christos 
   1049          1.1  christos /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
   1050          1.1  christos static const yytype_int8 yyr1[] =
   1051          1.1  christos {
   1052  1.1.1.1.2.1  perseant        0,    29,    30,    30,    30,    30,    30,    31,    31,    31,
   1053  1.1.1.1.2.1  perseant       32,    32,    32,    32,    32,    33,    33,    33,    33,    34,
   1054  1.1.1.1.2.1  perseant       34,    34,    35,    35,    35,    36,    36,    36,    36,    36,
   1055  1.1.1.1.2.1  perseant       37,    37,    37,    38,    38,    39,    39,    40,    40,    41,
   1056  1.1.1.1.2.1  perseant       41,    42,    42,    43,    43,    44
   1057          1.1  christos };
   1058          1.1  christos 
   1059          1.1  christos /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
   1060          1.1  christos static const yytype_int8 yyr2[] =
   1061          1.1  christos {
   1062  1.1.1.1.2.1  perseant        0,     2,     1,     1,     3,     6,     6,     3,     3,     0,
   1063  1.1.1.1.2.1  perseant        1,     2,     2,     2,     2,     1,     3,     3,     3,     1,
   1064  1.1.1.1.2.1  perseant        3,     3,     1,     3,     3,     1,     3,     3,     3,     3,
   1065  1.1.1.1.2.1  perseant        1,     3,     3,     1,     3,     1,     3,     1,     3,     1,
   1066  1.1.1.1.2.1  perseant        3,     1,     3,     1,     5,     1
   1067          1.1  christos };
   1068          1.1  christos 
   1069          1.1  christos 
   1070          1.1  christos enum { YYENOMEM = -2 };
   1071          1.1  christos 
   1072          1.1  christos #define yyerrok         (yyerrstatus = 0)
   1073          1.1  christos #define yyclearin       (yychar = YYEMPTY)
   1074          1.1  christos 
   1075          1.1  christos #define YYACCEPT        goto yyacceptlab
   1076          1.1  christos #define YYABORT         goto yyabortlab
   1077          1.1  christos #define YYERROR         goto yyerrorlab
   1078          1.1  christos #define YYNOMEM         goto yyexhaustedlab
   1079          1.1  christos 
   1080          1.1  christos 
   1081          1.1  christos #define YYRECOVERING()  (!!yyerrstatus)
   1082          1.1  christos 
   1083          1.1  christos #define YYBACKUP(Token, Value)                                    \
   1084          1.1  christos   do                                                              \
   1085          1.1  christos     if (yychar == YYEMPTY)                                        \
   1086          1.1  christos       {                                                           \
   1087          1.1  christos         yychar = (Token);                                         \
   1088          1.1  christos         yylval = (Value);                                         \
   1089          1.1  christos         YYPOPSTACK (yylen);                                       \
   1090          1.1  christos         yystate = *yyssp;                                         \
   1091          1.1  christos         goto yybackup;                                            \
   1092          1.1  christos       }                                                           \
   1093          1.1  christos     else                                                          \
   1094          1.1  christos       {                                                           \
   1095          1.1  christos         yyerror (YY_("syntax error: cannot back up")); \
   1096          1.1  christos         YYERROR;                                                  \
   1097          1.1  christos       }                                                           \
   1098          1.1  christos   while (0)
   1099          1.1  christos 
   1100          1.1  christos /* Backward compatibility with an undocumented macro.
   1101          1.1  christos    Use YYerror or YYUNDEF. */
   1102          1.1  christos #define YYERRCODE YYUNDEF
   1103          1.1  christos 
   1104          1.1  christos 
   1105          1.1  christos /* Enable debugging if requested.  */
   1106          1.1  christos #if YYDEBUG
   1107          1.1  christos 
   1108          1.1  christos # ifndef YYFPRINTF
   1109          1.1  christos #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
   1110          1.1  christos #  define YYFPRINTF fprintf
   1111          1.1  christos # endif
   1112          1.1  christos 
   1113          1.1  christos # define YYDPRINTF(Args)                        \
   1114          1.1  christos do {                                            \
   1115          1.1  christos   if (yydebug)                                  \
   1116          1.1  christos     YYFPRINTF Args;                             \
   1117          1.1  christos } while (0)
   1118          1.1  christos 
   1119          1.1  christos 
   1120          1.1  christos 
   1121          1.1  christos 
   1122          1.1  christos # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
   1123          1.1  christos do {                                                                      \
   1124          1.1  christos   if (yydebug)                                                            \
   1125          1.1  christos     {                                                                     \
   1126          1.1  christos       YYFPRINTF (stderr, "%s ", Title);                                   \
   1127          1.1  christos       yy_symbol_print (stderr,                                            \
   1128          1.1  christos                   Kind, Value); \
   1129          1.1  christos       YYFPRINTF (stderr, "\n");                                           \
   1130          1.1  christos     }                                                                     \
   1131          1.1  christos } while (0)
   1132          1.1  christos 
   1133          1.1  christos 
   1134          1.1  christos /*-----------------------------------.
   1135          1.1  christos | Print this symbol's value on YYO.  |
   1136          1.1  christos `-----------------------------------*/
   1137          1.1  christos 
   1138          1.1  christos static void
   1139          1.1  christos yy_symbol_value_print (FILE *yyo,
   1140          1.1  christos                        yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
   1141          1.1  christos {
   1142          1.1  christos   FILE *yyoutput = yyo;
   1143          1.1  christos   YY_USE (yyoutput);
   1144          1.1  christos   if (!yyvaluep)
   1145          1.1  christos     return;
   1146          1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1147          1.1  christos   YY_USE (yykind);
   1148          1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1149          1.1  christos }
   1150          1.1  christos 
   1151          1.1  christos 
   1152          1.1  christos /*---------------------------.
   1153          1.1  christos | Print this symbol on YYO.  |
   1154          1.1  christos `---------------------------*/
   1155          1.1  christos 
   1156          1.1  christos static void
   1157          1.1  christos yy_symbol_print (FILE *yyo,
   1158          1.1  christos                  yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
   1159          1.1  christos {
   1160          1.1  christos   YYFPRINTF (yyo, "%s %s (",
   1161          1.1  christos              yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
   1162          1.1  christos 
   1163          1.1  christos   yy_symbol_value_print (yyo, yykind, yyvaluep);
   1164          1.1  christos   YYFPRINTF (yyo, ")");
   1165          1.1  christos }
   1166          1.1  christos 
   1167          1.1  christos /*------------------------------------------------------------------.
   1168          1.1  christos | yy_stack_print -- Print the state stack from its BOTTOM up to its |
   1169          1.1  christos | TOP (included).                                                   |
   1170          1.1  christos `------------------------------------------------------------------*/
   1171          1.1  christos 
   1172          1.1  christos static void
   1173          1.1  christos yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
   1174          1.1  christos {
   1175          1.1  christos   YYFPRINTF (stderr, "Stack now");
   1176          1.1  christos   for (; yybottom <= yytop; yybottom++)
   1177          1.1  christos     {
   1178          1.1  christos       int yybot = *yybottom;
   1179          1.1  christos       YYFPRINTF (stderr, " %d", yybot);
   1180          1.1  christos     }
   1181          1.1  christos   YYFPRINTF (stderr, "\n");
   1182          1.1  christos }
   1183          1.1  christos 
   1184          1.1  christos # define YY_STACK_PRINT(Bottom, Top)                            \
   1185          1.1  christos do {                                                            \
   1186          1.1  christos   if (yydebug)                                                  \
   1187          1.1  christos     yy_stack_print ((Bottom), (Top));                           \
   1188          1.1  christos } while (0)
   1189          1.1  christos 
   1190          1.1  christos 
   1191          1.1  christos /*------------------------------------------------.
   1192          1.1  christos | Report that the YYRULE is going to be reduced.  |
   1193          1.1  christos `------------------------------------------------*/
   1194          1.1  christos 
   1195          1.1  christos static void
   1196          1.1  christos yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
   1197          1.1  christos                  int yyrule)
   1198          1.1  christos {
   1199          1.1  christos   int yylno = yyrline[yyrule];
   1200          1.1  christos   int yynrhs = yyr2[yyrule];
   1201          1.1  christos   int yyi;
   1202          1.1  christos   YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
   1203          1.1  christos              yyrule - 1, yylno);
   1204          1.1  christos   /* The symbols being reduced.  */
   1205          1.1  christos   for (yyi = 0; yyi < yynrhs; yyi++)
   1206          1.1  christos     {
   1207          1.1  christos       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
   1208          1.1  christos       yy_symbol_print (stderr,
   1209          1.1  christos                        YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
   1210          1.1  christos                        &yyvsp[(yyi + 1) - (yynrhs)]);
   1211          1.1  christos       YYFPRINTF (stderr, "\n");
   1212          1.1  christos     }
   1213          1.1  christos }
   1214          1.1  christos 
   1215          1.1  christos # define YY_REDUCE_PRINT(Rule)          \
   1216          1.1  christos do {                                    \
   1217          1.1  christos   if (yydebug)                          \
   1218          1.1  christos     yy_reduce_print (yyssp, yyvsp, Rule); \
   1219          1.1  christos } while (0)
   1220          1.1  christos 
   1221          1.1  christos /* Nonzero means print parse trace.  It is left uninitialized so that
   1222          1.1  christos    multiple parsers can coexist.  */
   1223          1.1  christos int yydebug;
   1224          1.1  christos #else /* !YYDEBUG */
   1225          1.1  christos # define YYDPRINTF(Args) ((void) 0)
   1226          1.1  christos # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
   1227          1.1  christos # define YY_STACK_PRINT(Bottom, Top)
   1228          1.1  christos # define YY_REDUCE_PRINT(Rule)
   1229          1.1  christos #endif /* !YYDEBUG */
   1230          1.1  christos 
   1231          1.1  christos 
   1232          1.1  christos /* YYINITDEPTH -- initial size of the parser's stacks.  */
   1233          1.1  christos #ifndef YYINITDEPTH
   1234          1.1  christos # define YYINITDEPTH 200
   1235          1.1  christos #endif
   1236          1.1  christos 
   1237          1.1  christos /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
   1238          1.1  christos    if the built-in stack extension method is used).
   1239          1.1  christos 
   1240          1.1  christos    Do not make this value too large; the results are undefined if
   1241          1.1  christos    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
   1242          1.1  christos    evaluated with infinite-precision integer arithmetic.  */
   1243          1.1  christos 
   1244          1.1  christos #ifndef YYMAXDEPTH
   1245          1.1  christos # define YYMAXDEPTH 10000
   1246          1.1  christos #endif
   1247          1.1  christos 
   1248          1.1  christos 
   1249          1.1  christos 
   1250          1.1  christos 
   1251          1.1  christos 
   1252          1.1  christos 
   1253          1.1  christos /*-----------------------------------------------.
   1254          1.1  christos | Release the memory associated to this symbol.  |
   1255          1.1  christos `-----------------------------------------------*/
   1256          1.1  christos 
   1257          1.1  christos static void
   1258          1.1  christos yydestruct (const char *yymsg,
   1259          1.1  christos             yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
   1260          1.1  christos {
   1261          1.1  christos   YY_USE (yyvaluep);
   1262          1.1  christos   if (!yymsg)
   1263          1.1  christos     yymsg = "Deleting";
   1264          1.1  christos   YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
   1265          1.1  christos 
   1266          1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1267          1.1  christos   YY_USE (yykind);
   1268          1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1269          1.1  christos }
   1270          1.1  christos 
   1271          1.1  christos 
   1272          1.1  christos /* Lookahead token kind.  */
   1273          1.1  christos int yychar;
   1274          1.1  christos 
   1275          1.1  christos /* The semantic value of the lookahead symbol.  */
   1276          1.1  christos YYSTYPE yylval;
   1277          1.1  christos /* Number of syntax errors so far.  */
   1278          1.1  christos int yynerrs;
   1279          1.1  christos 
   1280          1.1  christos 
   1281          1.1  christos 
   1282          1.1  christos 
   1283          1.1  christos /*----------.
   1284          1.1  christos | yyparse.  |
   1285          1.1  christos `----------*/
   1286          1.1  christos 
   1287          1.1  christos int
   1288          1.1  christos yyparse (void)
   1289          1.1  christos {
   1290          1.1  christos     yy_state_fast_t yystate = 0;
   1291          1.1  christos     /* Number of tokens to shift before error messages enabled.  */
   1292          1.1  christos     int yyerrstatus = 0;
   1293          1.1  christos 
   1294          1.1  christos     /* Refer to the stacks through separate pointers, to allow yyoverflow
   1295          1.1  christos        to reallocate them elsewhere.  */
   1296          1.1  christos 
   1297          1.1  christos     /* Their size.  */
   1298          1.1  christos     YYPTRDIFF_T yystacksize = YYINITDEPTH;
   1299          1.1  christos 
   1300          1.1  christos     /* The state stack: array, bottom, top.  */
   1301          1.1  christos     yy_state_t yyssa[YYINITDEPTH];
   1302          1.1  christos     yy_state_t *yyss = yyssa;
   1303          1.1  christos     yy_state_t *yyssp = yyss;
   1304          1.1  christos 
   1305          1.1  christos     /* The semantic value stack: array, bottom, top.  */
   1306          1.1  christos     YYSTYPE yyvsa[YYINITDEPTH];
   1307          1.1  christos     YYSTYPE *yyvs = yyvsa;
   1308          1.1  christos     YYSTYPE *yyvsp = yyvs;
   1309          1.1  christos 
   1310          1.1  christos   int yyn;
   1311          1.1  christos   /* The return value of yyparse.  */
   1312          1.1  christos   int yyresult;
   1313          1.1  christos   /* Lookahead symbol kind.  */
   1314          1.1  christos   yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   1315          1.1  christos   /* The variables used to return semantic value and location from the
   1316          1.1  christos      action routines.  */
   1317          1.1  christos   YYSTYPE yyval;
   1318          1.1  christos 
   1319          1.1  christos 
   1320          1.1  christos 
   1321          1.1  christos #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
   1322          1.1  christos 
   1323          1.1  christos   /* The number of symbols on the RHS of the reduced rule.
   1324          1.1  christos      Keep to zero when no symbol should be popped.  */
   1325          1.1  christos   int yylen = 0;
   1326          1.1  christos 
   1327          1.1  christos   YYDPRINTF ((stderr, "Starting parse\n"));
   1328          1.1  christos 
   1329          1.1  christos   yychar = YYEMPTY; /* Cause a token to be read.  */
   1330          1.1  christos 
   1331          1.1  christos   goto yysetstate;
   1332          1.1  christos 
   1333          1.1  christos 
   1334          1.1  christos /*------------------------------------------------------------.
   1335          1.1  christos | yynewstate -- push a new state, which is found in yystate.  |
   1336          1.1  christos `------------------------------------------------------------*/
   1337          1.1  christos yynewstate:
   1338          1.1  christos   /* In all cases, when you get here, the value and location stacks
   1339          1.1  christos      have just been pushed.  So pushing a state here evens the stacks.  */
   1340          1.1  christos   yyssp++;
   1341          1.1  christos 
   1342          1.1  christos 
   1343          1.1  christos /*--------------------------------------------------------------------.
   1344          1.1  christos | yysetstate -- set current state (the top of the stack) to yystate.  |
   1345          1.1  christos `--------------------------------------------------------------------*/
   1346          1.1  christos yysetstate:
   1347          1.1  christos   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
   1348          1.1  christos   YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
   1349          1.1  christos   YY_IGNORE_USELESS_CAST_BEGIN
   1350          1.1  christos   *yyssp = YY_CAST (yy_state_t, yystate);
   1351          1.1  christos   YY_IGNORE_USELESS_CAST_END
   1352          1.1  christos   YY_STACK_PRINT (yyss, yyssp);
   1353          1.1  christos 
   1354          1.1  christos   if (yyss + yystacksize - 1 <= yyssp)
   1355          1.1  christos #if !defined yyoverflow && !defined YYSTACK_RELOCATE
   1356          1.1  christos     YYNOMEM;
   1357          1.1  christos #else
   1358          1.1  christos     {
   1359          1.1  christos       /* Get the current used size of the three stacks, in elements.  */
   1360          1.1  christos       YYPTRDIFF_T yysize = yyssp - yyss + 1;
   1361          1.1  christos 
   1362          1.1  christos # if defined yyoverflow
   1363          1.1  christos       {
   1364          1.1  christos         /* Give user a chance to reallocate the stack.  Use copies of
   1365          1.1  christos            these so that the &'s don't force the real ones into
   1366          1.1  christos            memory.  */
   1367          1.1  christos         yy_state_t *yyss1 = yyss;
   1368          1.1  christos         YYSTYPE *yyvs1 = yyvs;
   1369          1.1  christos 
   1370          1.1  christos         /* Each stack pointer address is followed by the size of the
   1371          1.1  christos            data in use in that stack, in bytes.  This used to be a
   1372          1.1  christos            conditional around just the two extra args, but that might
   1373          1.1  christos            be undefined if yyoverflow is a macro.  */
   1374          1.1  christos         yyoverflow (YY_("memory exhausted"),
   1375          1.1  christos                     &yyss1, yysize * YYSIZEOF (*yyssp),
   1376          1.1  christos                     &yyvs1, yysize * YYSIZEOF (*yyvsp),
   1377          1.1  christos                     &yystacksize);
   1378          1.1  christos         yyss = yyss1;
   1379          1.1  christos         yyvs = yyvs1;
   1380          1.1  christos       }
   1381          1.1  christos # else /* defined YYSTACK_RELOCATE */
   1382          1.1  christos       /* Extend the stack our own way.  */
   1383          1.1  christos       if (YYMAXDEPTH <= yystacksize)
   1384          1.1  christos         YYNOMEM;
   1385          1.1  christos       yystacksize *= 2;
   1386          1.1  christos       if (YYMAXDEPTH < yystacksize)
   1387          1.1  christos         yystacksize = YYMAXDEPTH;
   1388          1.1  christos 
   1389          1.1  christos       {
   1390          1.1  christos         yy_state_t *yyss1 = yyss;
   1391          1.1  christos         union yyalloc *yyptr =
   1392          1.1  christos           YY_CAST (union yyalloc *,
   1393          1.1  christos                    YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
   1394          1.1  christos         if (! yyptr)
   1395          1.1  christos           YYNOMEM;
   1396          1.1  christos         YYSTACK_RELOCATE (yyss_alloc, yyss);
   1397          1.1  christos         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
   1398          1.1  christos #  undef YYSTACK_RELOCATE
   1399          1.1  christos         if (yyss1 != yyssa)
   1400          1.1  christos           YYSTACK_FREE (yyss1);
   1401          1.1  christos       }
   1402          1.1  christos # endif
   1403          1.1  christos 
   1404          1.1  christos       yyssp = yyss + yysize - 1;
   1405          1.1  christos       yyvsp = yyvs + yysize - 1;
   1406          1.1  christos 
   1407          1.1  christos       YY_IGNORE_USELESS_CAST_BEGIN
   1408          1.1  christos       YYDPRINTF ((stderr, "Stack size increased to %ld\n",
   1409          1.1  christos                   YY_CAST (long, yystacksize)));
   1410          1.1  christos       YY_IGNORE_USELESS_CAST_END
   1411          1.1  christos 
   1412          1.1  christos       if (yyss + yystacksize - 1 <= yyssp)
   1413          1.1  christos         YYABORT;
   1414          1.1  christos     }
   1415          1.1  christos #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
   1416          1.1  christos 
   1417          1.1  christos 
   1418          1.1  christos   if (yystate == YYFINAL)
   1419          1.1  christos     YYACCEPT;
   1420          1.1  christos 
   1421          1.1  christos   goto yybackup;
   1422          1.1  christos 
   1423          1.1  christos 
   1424          1.1  christos /*-----------.
   1425          1.1  christos | yybackup.  |
   1426          1.1  christos `-----------*/
   1427          1.1  christos yybackup:
   1428          1.1  christos   /* Do appropriate processing given the current state.  Read a
   1429          1.1  christos      lookahead token if we need one and don't already have one.  */
   1430          1.1  christos 
   1431          1.1  christos   /* First try to decide what to do without reference to lookahead token.  */
   1432          1.1  christos   yyn = yypact[yystate];
   1433          1.1  christos   if (yypact_value_is_default (yyn))
   1434          1.1  christos     goto yydefault;
   1435          1.1  christos 
   1436          1.1  christos   /* Not known => get a lookahead token if don't already have one.  */
   1437          1.1  christos 
   1438          1.1  christos   /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   1439          1.1  christos   if (yychar == YYEMPTY)
   1440          1.1  christos     {
   1441          1.1  christos       YYDPRINTF ((stderr, "Reading a token\n"));
   1442          1.1  christos       yychar = yylex ();
   1443          1.1  christos     }
   1444          1.1  christos 
   1445          1.1  christos   if (yychar <= YYEOF)
   1446          1.1  christos     {
   1447          1.1  christos       yychar = YYEOF;
   1448          1.1  christos       yytoken = YYSYMBOL_YYEOF;
   1449          1.1  christos       YYDPRINTF ((stderr, "Now at end of input.\n"));
   1450          1.1  christos     }
   1451          1.1  christos   else if (yychar == YYerror)
   1452          1.1  christos     {
   1453          1.1  christos       /* The scanner already issued an error message, process directly
   1454          1.1  christos          to error recovery.  But do not keep the error token as
   1455          1.1  christos          lookahead, it is too special and may lead us to an endless
   1456          1.1  christos          loop in error recovery. */
   1457          1.1  christos       yychar = YYUNDEF;
   1458          1.1  christos       yytoken = YYSYMBOL_YYerror;
   1459          1.1  christos       goto yyerrlab1;
   1460          1.1  christos     }
   1461          1.1  christos   else
   1462          1.1  christos     {
   1463          1.1  christos       yytoken = YYTRANSLATE (yychar);
   1464          1.1  christos       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
   1465          1.1  christos     }
   1466          1.1  christos 
   1467          1.1  christos   /* If the proper action on seeing token YYTOKEN is to reduce or to
   1468          1.1  christos      detect an error, take that action.  */
   1469          1.1  christos   yyn += yytoken;
   1470          1.1  christos   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
   1471          1.1  christos     goto yydefault;
   1472          1.1  christos   yyn = yytable[yyn];
   1473          1.1  christos   if (yyn <= 0)
   1474          1.1  christos     {
   1475          1.1  christos       if (yytable_value_is_error (yyn))
   1476          1.1  christos         goto yyerrlab;
   1477          1.1  christos       yyn = -yyn;
   1478          1.1  christos       goto yyreduce;
   1479          1.1  christos     }
   1480          1.1  christos 
   1481          1.1  christos   /* Count tokens shifted since error; after three, turn off error
   1482          1.1  christos      status.  */
   1483          1.1  christos   if (yyerrstatus)
   1484          1.1  christos     yyerrstatus--;
   1485          1.1  christos 
   1486          1.1  christos   /* Shift the lookahead token.  */
   1487          1.1  christos   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
   1488          1.1  christos   yystate = yyn;
   1489          1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1490          1.1  christos   *++yyvsp = yylval;
   1491          1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1492          1.1  christos 
   1493          1.1  christos   /* Discard the shifted token.  */
   1494          1.1  christos   yychar = YYEMPTY;
   1495          1.1  christos   goto yynewstate;
   1496          1.1  christos 
   1497          1.1  christos 
   1498          1.1  christos /*-----------------------------------------------------------.
   1499          1.1  christos | yydefault -- do the default action for the current state.  |
   1500          1.1  christos `-----------------------------------------------------------*/
   1501          1.1  christos yydefault:
   1502          1.1  christos   yyn = yydefact[yystate];
   1503          1.1  christos   if (yyn == 0)
   1504          1.1  christos     goto yyerrlab;
   1505          1.1  christos   goto yyreduce;
   1506          1.1  christos 
   1507          1.1  christos 
   1508          1.1  christos /*-----------------------------.
   1509          1.1  christos | yyreduce -- do a reduction.  |
   1510          1.1  christos `-----------------------------*/
   1511          1.1  christos yyreduce:
   1512          1.1  christos   /* yyn is the number of a rule to reduce with.  */
   1513          1.1  christos   yylen = yyr2[yyn];
   1514          1.1  christos 
   1515          1.1  christos   /* If YYLEN is nonzero, implement the default value of the action:
   1516          1.1  christos      '$$ = $1'.
   1517          1.1  christos 
   1518          1.1  christos      Otherwise, the following line sets YYVAL to garbage.
   1519          1.1  christos      This behavior is undocumented and Bison
   1520          1.1  christos      users should not rely upon it.  Assigning to YYVAL
   1521          1.1  christos      unconditionally makes the parser a bit smaller, and it avoids a
   1522          1.1  christos      GCC warning that YYVAL may be used uninitialized.  */
   1523          1.1  christos   yyval = yyvsp[1-yylen];
   1524          1.1  christos 
   1525          1.1  christos 
   1526          1.1  christos   YY_REDUCE_PRINT (yyn);
   1527          1.1  christos   switch (yyn)
   1528          1.1  christos     {
   1529          1.1  christos   case 2: /* primary_expression: INTEGER  */
   1530  1.1.1.1.2.1  perseant #line 343 "./config/loongarch-parse.y"
   1531          1.1  christos                   {emit_const ((yyvsp[0].imm));}
   1532  1.1.1.1.2.1  perseant #line 1533 "config/loongarch-parse.c"
   1533  1.1.1.1.2.1  perseant     break;
   1534  1.1.1.1.2.1  perseant 
   1535  1.1.1.1.2.1  perseant   case 3: /* primary_expression: IDENTIFIER  */
   1536  1.1.1.1.2.1  perseant #line 344 "./config/loongarch-parse.y"
   1537  1.1.1.1.2.1  perseant                      {emit_const_var ((yyvsp[0].c_str));}
   1538  1.1.1.1.2.1  perseant #line 1539 "config/loongarch-parse.c"
   1539          1.1  christos     break;
   1540          1.1  christos 
   1541  1.1.1.1.2.1  perseant   case 5: /* primary_expression: '%' IDENTIFIER '(' IDENTIFIER addend ')'  */
   1542  1.1.1.1.2.1  perseant #line 346 "./config/loongarch-parse.y"
   1543          1.1  christos                                                    {reloc ((yyvsp[-4].c_str), (yyvsp[-2].c_str), (yyvsp[-1].imm)); free ((yyvsp[-4].c_str)); free ((yyvsp[-2].c_str));}
   1544  1.1.1.1.2.1  perseant #line 1545 "config/loongarch-parse.c"
   1545          1.1  christos     break;
   1546          1.1  christos 
   1547  1.1.1.1.2.1  perseant   case 6: /* primary_expression: '%' IDENTIFIER '(' INTEGER addend ')'  */
   1548  1.1.1.1.2.1  perseant #line 347 "./config/loongarch-parse.y"
   1549          1.1  christos                                                 {reloc ((yyvsp[-4].c_str), NULL, (yyvsp[-2].imm) + (yyvsp[-1].imm)); free ((yyvsp[-4].c_str));}
   1550  1.1.1.1.2.1  perseant #line 1551 "config/loongarch-parse.c"
   1551          1.1  christos     break;
   1552          1.1  christos 
   1553  1.1.1.1.2.1  perseant   case 7: /* addend: addend '-' INTEGER  */
   1554  1.1.1.1.2.1  perseant #line 351 "./config/loongarch-parse.y"
   1555          1.1  christos                              {(yyval.imm) -= (yyvsp[0].imm);}
   1556  1.1.1.1.2.1  perseant #line 1557 "config/loongarch-parse.c"
   1557          1.1  christos     break;
   1558          1.1  christos 
   1559  1.1.1.1.2.1  perseant   case 8: /* addend: addend '+' INTEGER  */
   1560  1.1.1.1.2.1  perseant #line 352 "./config/loongarch-parse.y"
   1561          1.1  christos                              {(yyval.imm) += (yyvsp[0].imm);}
   1562  1.1.1.1.2.1  perseant #line 1563 "config/loongarch-parse.c"
   1563          1.1  christos     break;
   1564          1.1  christos 
   1565  1.1.1.1.2.1  perseant   case 9: /* addend: %empty  */
   1566  1.1.1.1.2.1  perseant #line 353 "./config/loongarch-parse.y"
   1567          1.1  christos           {(yyval.imm) = 0;}
   1568  1.1.1.1.2.1  perseant #line 1569 "config/loongarch-parse.c"
   1569          1.1  christos     break;
   1570          1.1  christos 
   1571  1.1.1.1.2.1  perseant   case 11: /* unary_expression: '+' unary_expression  */
   1572  1.1.1.1.2.1  perseant #line 358 "./config/loongarch-parse.y"
   1573          1.1  christos                                {emit_unary ('+');}
   1574  1.1.1.1.2.1  perseant #line 1575 "config/loongarch-parse.c"
   1575          1.1  christos     break;
   1576          1.1  christos 
   1577  1.1.1.1.2.1  perseant   case 12: /* unary_expression: '-' unary_expression  */
   1578  1.1.1.1.2.1  perseant #line 359 "./config/loongarch-parse.y"
   1579          1.1  christos                                {emit_unary ('-');}
   1580  1.1.1.1.2.1  perseant #line 1581 "config/loongarch-parse.c"
   1581          1.1  christos     break;
   1582          1.1  christos 
   1583  1.1.1.1.2.1  perseant   case 13: /* unary_expression: '~' unary_expression  */
   1584  1.1.1.1.2.1  perseant #line 360 "./config/loongarch-parse.y"
   1585          1.1  christos                                {emit_unary ('~');}
   1586  1.1.1.1.2.1  perseant #line 1587 "config/loongarch-parse.c"
   1587          1.1  christos     break;
   1588          1.1  christos 
   1589  1.1.1.1.2.1  perseant   case 14: /* unary_expression: '!' unary_expression  */
   1590  1.1.1.1.2.1  perseant #line 361 "./config/loongarch-parse.y"
   1591          1.1  christos                                {emit_unary ('!');}
   1592  1.1.1.1.2.1  perseant #line 1593 "config/loongarch-parse.c"
   1593          1.1  christos     break;
   1594          1.1  christos 
   1595  1.1.1.1.2.1  perseant   case 16: /* multiplicative_expression: multiplicative_expression '*' unary_expression  */
   1596  1.1.1.1.2.1  perseant #line 366 "./config/loongarch-parse.y"
   1597          1.1  christos                                                          {emit_bin ('*');}
   1598  1.1.1.1.2.1  perseant #line 1599 "config/loongarch-parse.c"
   1599          1.1  christos     break;
   1600          1.1  christos 
   1601  1.1.1.1.2.1  perseant   case 17: /* multiplicative_expression: multiplicative_expression '/' unary_expression  */
   1602  1.1.1.1.2.1  perseant #line 367 "./config/loongarch-parse.y"
   1603          1.1  christos                                                          {emit_bin ('/');}
   1604  1.1.1.1.2.1  perseant #line 1605 "config/loongarch-parse.c"
   1605          1.1  christos     break;
   1606          1.1  christos 
   1607  1.1.1.1.2.1  perseant   case 18: /* multiplicative_expression: multiplicative_expression '%' unary_expression  */
   1608  1.1.1.1.2.1  perseant #line 368 "./config/loongarch-parse.y"
   1609          1.1  christos                                                          {emit_bin ('%');}
   1610  1.1.1.1.2.1  perseant #line 1611 "config/loongarch-parse.c"
   1611          1.1  christos     break;
   1612          1.1  christos 
   1613  1.1.1.1.2.1  perseant   case 20: /* additive_expression: additive_expression '+' multiplicative_expression  */
   1614  1.1.1.1.2.1  perseant #line 373 "./config/loongarch-parse.y"
   1615          1.1  christos                                                             {emit_bin ('+');}
   1616  1.1.1.1.2.1  perseant #line 1617 "config/loongarch-parse.c"
   1617          1.1  christos     break;
   1618          1.1  christos 
   1619  1.1.1.1.2.1  perseant   case 21: /* additive_expression: additive_expression '-' multiplicative_expression  */
   1620  1.1.1.1.2.1  perseant #line 374 "./config/loongarch-parse.y"
   1621          1.1  christos                                                             {emit_bin ('-');}
   1622  1.1.1.1.2.1  perseant #line 1623 "config/loongarch-parse.c"
   1623          1.1  christos     break;
   1624          1.1  christos 
   1625  1.1.1.1.2.1  perseant   case 23: /* shift_expression: shift_expression LEFT_OP additive_expression  */
   1626  1.1.1.1.2.1  perseant #line 379 "./config/loongarch-parse.y"
   1627          1.1  christos                                                        {emit_bin (LEFT_OP);}
   1628  1.1.1.1.2.1  perseant #line 1629 "config/loongarch-parse.c"
   1629          1.1  christos     break;
   1630          1.1  christos 
   1631  1.1.1.1.2.1  perseant   case 24: /* shift_expression: shift_expression RIGHT_OP additive_expression  */
   1632  1.1.1.1.2.1  perseant #line 380 "./config/loongarch-parse.y"
   1633          1.1  christos                                                         {emit_bin (RIGHT_OP);}
   1634  1.1.1.1.2.1  perseant #line 1635 "config/loongarch-parse.c"
   1635          1.1  christos     break;
   1636          1.1  christos 
   1637  1.1.1.1.2.1  perseant   case 26: /* relational_expression: relational_expression '<' shift_expression  */
   1638  1.1.1.1.2.1  perseant #line 385 "./config/loongarch-parse.y"
   1639          1.1  christos                                                      {emit_bin ('<');}
   1640  1.1.1.1.2.1  perseant #line 1641 "config/loongarch-parse.c"
   1641          1.1  christos     break;
   1642          1.1  christos 
   1643  1.1.1.1.2.1  perseant   case 27: /* relational_expression: relational_expression '>' shift_expression  */
   1644  1.1.1.1.2.1  perseant #line 386 "./config/loongarch-parse.y"
   1645          1.1  christos                                                      {emit_bin ('>');}
   1646  1.1.1.1.2.1  perseant #line 1647 "config/loongarch-parse.c"
   1647          1.1  christos     break;
   1648          1.1  christos 
   1649  1.1.1.1.2.1  perseant   case 28: /* relational_expression: relational_expression LE_OP shift_expression  */
   1650  1.1.1.1.2.1  perseant #line 387 "./config/loongarch-parse.y"
   1651          1.1  christos                                                        {emit_bin (LE_OP);}
   1652  1.1.1.1.2.1  perseant #line 1653 "config/loongarch-parse.c"
   1653          1.1  christos     break;
   1654          1.1  christos 
   1655  1.1.1.1.2.1  perseant   case 29: /* relational_expression: relational_expression GE_OP shift_expression  */
   1656  1.1.1.1.2.1  perseant #line 388 "./config/loongarch-parse.y"
   1657          1.1  christos                                                        {emit_bin (GE_OP);}
   1658  1.1.1.1.2.1  perseant #line 1659 "config/loongarch-parse.c"
   1659          1.1  christos     break;
   1660          1.1  christos 
   1661  1.1.1.1.2.1  perseant   case 31: /* equality_expression: equality_expression EQ_OP relational_expression  */
   1662  1.1.1.1.2.1  perseant #line 393 "./config/loongarch-parse.y"
   1663          1.1  christos                                                           {emit_bin (EQ_OP);}
   1664  1.1.1.1.2.1  perseant #line 1665 "config/loongarch-parse.c"
   1665          1.1  christos     break;
   1666          1.1  christos 
   1667  1.1.1.1.2.1  perseant   case 32: /* equality_expression: equality_expression NE_OP relational_expression  */
   1668  1.1.1.1.2.1  perseant #line 394 "./config/loongarch-parse.y"
   1669          1.1  christos                                                           {emit_bin (NE_OP);}
   1670  1.1.1.1.2.1  perseant #line 1671 "config/loongarch-parse.c"
   1671          1.1  christos     break;
   1672          1.1  christos 
   1673  1.1.1.1.2.1  perseant   case 34: /* and_expression: and_expression '&' equality_expression  */
   1674  1.1.1.1.2.1  perseant #line 399 "./config/loongarch-parse.y"
   1675          1.1  christos                                                  {emit_bin ('&');}
   1676  1.1.1.1.2.1  perseant #line 1677 "config/loongarch-parse.c"
   1677          1.1  christos     break;
   1678          1.1  christos 
   1679  1.1.1.1.2.1  perseant   case 36: /* exclusive_or_expression: exclusive_or_expression '^' and_expression  */
   1680  1.1.1.1.2.1  perseant #line 404 "./config/loongarch-parse.y"
   1681          1.1  christos                                                      {emit_bin ('^');}
   1682  1.1.1.1.2.1  perseant #line 1683 "config/loongarch-parse.c"
   1683          1.1  christos     break;
   1684          1.1  christos 
   1685  1.1.1.1.2.1  perseant   case 38: /* inclusive_or_expression: inclusive_or_expression '|' exclusive_or_expression  */
   1686  1.1.1.1.2.1  perseant #line 409 "./config/loongarch-parse.y"
   1687          1.1  christos                                                               {emit_bin ('|');}
   1688  1.1.1.1.2.1  perseant #line 1689 "config/loongarch-parse.c"
   1689          1.1  christos     break;
   1690          1.1  christos 
   1691  1.1.1.1.2.1  perseant   case 40: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression  */
   1692  1.1.1.1.2.1  perseant #line 414 "./config/loongarch-parse.y"
   1693          1.1  christos                                                                 {emit_bin (AND_OP);}
   1694  1.1.1.1.2.1  perseant #line 1695 "config/loongarch-parse.c"
   1695          1.1  christos     break;
   1696          1.1  christos 
   1697  1.1.1.1.2.1  perseant   case 42: /* logical_or_expression: logical_or_expression OR_OP logical_and_expression  */
   1698  1.1.1.1.2.1  perseant #line 419 "./config/loongarch-parse.y"
   1699          1.1  christos                                                              {emit_bin (OR_OP);}
   1700  1.1.1.1.2.1  perseant #line 1701 "config/loongarch-parse.c"
   1701          1.1  christos     break;
   1702          1.1  christos 
   1703  1.1.1.1.2.1  perseant   case 44: /* conditional_expression: logical_or_expression '?' expression ':' conditional_expression  */
   1704  1.1.1.1.2.1  perseant #line 424 "./config/loongarch-parse.y"
   1705          1.1  christos                                                                           {emit_if_else ();}
   1706  1.1.1.1.2.1  perseant #line 1707 "config/loongarch-parse.c"
   1707          1.1  christos     break;
   1708          1.1  christos 
   1709          1.1  christos 
   1710  1.1.1.1.2.1  perseant #line 1711 "config/loongarch-parse.c"
   1711          1.1  christos 
   1712          1.1  christos       default: break;
   1713          1.1  christos     }
   1714          1.1  christos   /* User semantic actions sometimes alter yychar, and that requires
   1715          1.1  christos      that yytoken be updated with the new translation.  We take the
   1716          1.1  christos      approach of translating immediately before every use of yytoken.
   1717          1.1  christos      One alternative is translating here after every semantic action,
   1718          1.1  christos      but that translation would be missed if the semantic action invokes
   1719          1.1  christos      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
   1720          1.1  christos      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
   1721          1.1  christos      incorrect destructor might then be invoked immediately.  In the
   1722          1.1  christos      case of YYERROR or YYBACKUP, subsequent parser actions might lead
   1723          1.1  christos      to an incorrect destructor call or verbose syntax error message
   1724          1.1  christos      before the lookahead is translated.  */
   1725          1.1  christos   YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
   1726          1.1  christos 
   1727          1.1  christos   YYPOPSTACK (yylen);
   1728          1.1  christos   yylen = 0;
   1729          1.1  christos 
   1730          1.1  christos   *++yyvsp = yyval;
   1731          1.1  christos 
   1732          1.1  christos   /* Now 'shift' the result of the reduction.  Determine what state
   1733          1.1  christos      that goes to, based on the state we popped back to and the rule
   1734          1.1  christos      number reduced by.  */
   1735          1.1  christos   {
   1736          1.1  christos     const int yylhs = yyr1[yyn] - YYNTOKENS;
   1737          1.1  christos     const int yyi = yypgoto[yylhs] + *yyssp;
   1738          1.1  christos     yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
   1739          1.1  christos                ? yytable[yyi]
   1740          1.1  christos                : yydefgoto[yylhs]);
   1741          1.1  christos   }
   1742          1.1  christos 
   1743          1.1  christos   goto yynewstate;
   1744          1.1  christos 
   1745          1.1  christos 
   1746          1.1  christos /*--------------------------------------.
   1747          1.1  christos | yyerrlab -- here on detecting error.  |
   1748          1.1  christos `--------------------------------------*/
   1749          1.1  christos yyerrlab:
   1750          1.1  christos   /* Make sure we have latest lookahead translation.  See comments at
   1751          1.1  christos      user semantic actions for why this is necessary.  */
   1752          1.1  christos   yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   1753          1.1  christos   /* If not already recovering from an error, report this error.  */
   1754          1.1  christos   if (!yyerrstatus)
   1755          1.1  christos     {
   1756          1.1  christos       ++yynerrs;
   1757          1.1  christos       yyerror (YY_("syntax error"));
   1758          1.1  christos     }
   1759          1.1  christos 
   1760          1.1  christos   if (yyerrstatus == 3)
   1761          1.1  christos     {
   1762          1.1  christos       /* If just tried and failed to reuse lookahead token after an
   1763          1.1  christos          error, discard it.  */
   1764          1.1  christos 
   1765          1.1  christos       if (yychar <= YYEOF)
   1766          1.1  christos         {
   1767          1.1  christos           /* Return failure if at end of input.  */
   1768          1.1  christos           if (yychar == YYEOF)
   1769          1.1  christos             YYABORT;
   1770          1.1  christos         }
   1771          1.1  christos       else
   1772          1.1  christos         {
   1773          1.1  christos           yydestruct ("Error: discarding",
   1774          1.1  christos                       yytoken, &yylval);
   1775          1.1  christos           yychar = YYEMPTY;
   1776          1.1  christos         }
   1777          1.1  christos     }
   1778          1.1  christos 
   1779          1.1  christos   /* Else will try to reuse lookahead token after shifting the error
   1780          1.1  christos      token.  */
   1781          1.1  christos   goto yyerrlab1;
   1782          1.1  christos 
   1783          1.1  christos 
   1784          1.1  christos /*---------------------------------------------------.
   1785          1.1  christos | yyerrorlab -- error raised explicitly by YYERROR.  |
   1786          1.1  christos `---------------------------------------------------*/
   1787          1.1  christos yyerrorlab:
   1788          1.1  christos   /* Pacify compilers when the user code never invokes YYERROR and the
   1789          1.1  christos      label yyerrorlab therefore never appears in user code.  */
   1790          1.1  christos   if (0)
   1791          1.1  christos     YYERROR;
   1792          1.1  christos   ++yynerrs;
   1793          1.1  christos 
   1794          1.1  christos   /* Do not reclaim the symbols of the rule whose action triggered
   1795          1.1  christos      this YYERROR.  */
   1796          1.1  christos   YYPOPSTACK (yylen);
   1797          1.1  christos   yylen = 0;
   1798          1.1  christos   YY_STACK_PRINT (yyss, yyssp);
   1799          1.1  christos   yystate = *yyssp;
   1800          1.1  christos   goto yyerrlab1;
   1801          1.1  christos 
   1802          1.1  christos 
   1803          1.1  christos /*-------------------------------------------------------------.
   1804          1.1  christos | yyerrlab1 -- common code for both syntax error and YYERROR.  |
   1805          1.1  christos `-------------------------------------------------------------*/
   1806          1.1  christos yyerrlab1:
   1807          1.1  christos   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
   1808          1.1  christos 
   1809          1.1  christos   /* Pop stack until we find a state that shifts the error token.  */
   1810          1.1  christos   for (;;)
   1811          1.1  christos     {
   1812          1.1  christos       yyn = yypact[yystate];
   1813          1.1  christos       if (!yypact_value_is_default (yyn))
   1814          1.1  christos         {
   1815          1.1  christos           yyn += YYSYMBOL_YYerror;
   1816          1.1  christos           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
   1817          1.1  christos             {
   1818          1.1  christos               yyn = yytable[yyn];
   1819          1.1  christos               if (0 < yyn)
   1820          1.1  christos                 break;
   1821          1.1  christos             }
   1822          1.1  christos         }
   1823          1.1  christos 
   1824          1.1  christos       /* Pop the current state because it cannot handle the error token.  */
   1825          1.1  christos       if (yyssp == yyss)
   1826          1.1  christos         YYABORT;
   1827          1.1  christos 
   1828          1.1  christos 
   1829          1.1  christos       yydestruct ("Error: popping",
   1830          1.1  christos                   YY_ACCESSING_SYMBOL (yystate), yyvsp);
   1831          1.1  christos       YYPOPSTACK (1);
   1832          1.1  christos       yystate = *yyssp;
   1833          1.1  christos       YY_STACK_PRINT (yyss, yyssp);
   1834          1.1  christos     }
   1835          1.1  christos 
   1836          1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1837          1.1  christos   *++yyvsp = yylval;
   1838          1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1839          1.1  christos 
   1840          1.1  christos 
   1841          1.1  christos   /* Shift the error token.  */
   1842          1.1  christos   YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
   1843          1.1  christos 
   1844          1.1  christos   yystate = yyn;
   1845          1.1  christos   goto yynewstate;
   1846          1.1  christos 
   1847          1.1  christos 
   1848          1.1  christos /*-------------------------------------.
   1849          1.1  christos | yyacceptlab -- YYACCEPT comes here.  |
   1850          1.1  christos `-------------------------------------*/
   1851          1.1  christos yyacceptlab:
   1852          1.1  christos   yyresult = 0;
   1853          1.1  christos   goto yyreturnlab;
   1854          1.1  christos 
   1855          1.1  christos 
   1856          1.1  christos /*-----------------------------------.
   1857          1.1  christos | yyabortlab -- YYABORT comes here.  |
   1858          1.1  christos `-----------------------------------*/
   1859          1.1  christos yyabortlab:
   1860          1.1  christos   yyresult = 1;
   1861          1.1  christos   goto yyreturnlab;
   1862          1.1  christos 
   1863          1.1  christos 
   1864          1.1  christos /*-----------------------------------------------------------.
   1865          1.1  christos | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here.  |
   1866          1.1  christos `-----------------------------------------------------------*/
   1867          1.1  christos yyexhaustedlab:
   1868          1.1  christos   yyerror (YY_("memory exhausted"));
   1869          1.1  christos   yyresult = 2;
   1870          1.1  christos   goto yyreturnlab;
   1871          1.1  christos 
   1872          1.1  christos 
   1873          1.1  christos /*----------------------------------------------------------.
   1874          1.1  christos | yyreturnlab -- parsing is finished, clean up and return.  |
   1875          1.1  christos `----------------------------------------------------------*/
   1876          1.1  christos yyreturnlab:
   1877          1.1  christos   if (yychar != YYEMPTY)
   1878          1.1  christos     {
   1879          1.1  christos       /* Make sure we have latest lookahead translation.  See comments at
   1880          1.1  christos          user semantic actions for why this is necessary.  */
   1881          1.1  christos       yytoken = YYTRANSLATE (yychar);
   1882          1.1  christos       yydestruct ("Cleanup: discarding lookahead",
   1883          1.1  christos                   yytoken, &yylval);
   1884          1.1  christos     }
   1885          1.1  christos   /* Do not reclaim the symbols of the rule whose action triggered
   1886          1.1  christos      this YYABORT or YYACCEPT.  */
   1887          1.1  christos   YYPOPSTACK (yylen);
   1888          1.1  christos   YY_STACK_PRINT (yyss, yyssp);
   1889          1.1  christos   while (yyssp != yyss)
   1890          1.1  christos     {
   1891          1.1  christos       yydestruct ("Cleanup: popping",
   1892          1.1  christos                   YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
   1893          1.1  christos       YYPOPSTACK (1);
   1894          1.1  christos     }
   1895          1.1  christos #ifndef yyoverflow
   1896          1.1  christos   if (yyss != yyssa)
   1897          1.1  christos     YYSTACK_FREE (yyss);
   1898          1.1  christos #endif
   1899          1.1  christos 
   1900          1.1  christos   return yyresult;
   1901          1.1  christos }
   1902          1.1  christos 
   1903  1.1.1.1.2.1  perseant #line 430 "./config/loongarch-parse.y"
   1904          1.1  christos 
   1905          1.1  christos 
   1906