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