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