]> git.saurik.com Git - bison.git/blob - src/parse-gram.c
7ad37c6fc3f643b1b36c4a62da68993fa3433104
[bison.git] / src / parse-gram.c
1 /* A Bison parser, made by GNU Bison 2.3+. */
2
3 /* Skeleton implementation for Bison's Yacc-like parsers in C
4
5 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
6 Free Software Foundation, Inc.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
22
23 /* As a special exception, you may create a larger work that contains
24 part or all of the Bison parser skeleton and distribute that work
25 under terms of your choice, so long as that work isn't itself a
26 parser generator using the skeleton or a modified version thereof
27 as a parser skeleton. Alternatively, if you modify or redistribute
28 the parser skeleton itself, you may (at your option) remove this
29 special exception, which will cause the skeleton and the resulting
30 Bison output files to be licensed under the GNU General Public
31 License without this special exception.
32
33 This special exception was added by the Free Software Foundation in
34 version 2.2 of Bison. */
35
36 /* C LALR(1) parser skeleton written by Richard Stallman, by
37 simplifying the original so-called "semantic" parser. */
38
39 /* All symbols defined below should begin with yy or YY, to avoid
40 infringing on user name space. This should be done even for local
41 variables, as they might otherwise be expanded by user macros.
42 There are some unavoidable exceptions within include files to
43 define necessary library symbols; they are noted "INFRINGES ON
44 USER NAME SPACE" below. */
45
46 /* Identify Bison output. */
47 #define YYBISON 1
48
49 /* Bison version. */
50 #define YYBISON_VERSION "2.3+"
51
52 /* Skeleton name. */
53 #define YYSKELETON_NAME "yacc.c"
54
55 /* Pure parsers. */
56 #define YYPURE 1
57
58 /* Using locations. */
59 #define YYLSP_NEEDED 1
60
61 /* Substitute the variable and function names. */
62 #define yyparse gram_parse
63 #define yylex gram_lex
64 #define yyerror gram_error
65 #define yylval gram_lval
66 #define yychar gram_char
67 #define yydebug gram_debug
68 #define yynerrs gram_nerrs
69 #define yylloc gram_lloc
70
71 /* Tokens. */
72 #ifndef YYTOKENTYPE
73 # define YYTOKENTYPE
74 /* Put the tokens into the symbol table, so that GDB and other debuggers
75 know about them. */
76 enum yytokentype {
77 GRAM_EOF = 0,
78 STRING = 258,
79 INT = 259,
80 PERCENT_TOKEN = 260,
81 PERCENT_NTERM = 261,
82 PERCENT_TYPE = 262,
83 PERCENT_DESTRUCTOR = 263,
84 PERCENT_PRINTER = 264,
85 PERCENT_LEFT = 265,
86 PERCENT_RIGHT = 266,
87 PERCENT_NONASSOC = 267,
88 PERCENT_PREC = 268,
89 PERCENT_DPREC = 269,
90 PERCENT_MERGE = 270,
91 PERCENT_DEBUG = 271,
92 PERCENT_DEFAULT_PREC = 272,
93 PERCENT_DEFINE = 273,
94 PERCENT_DEFINES = 274,
95 PERCENT_ERROR_VERBOSE = 275,
96 PERCENT_EXPECT = 276,
97 PERCENT_EXPECT_RR = 277,
98 PERCENT_FILE_PREFIX = 278,
99 PERCENT_GLR_PARSER = 279,
100 PERCENT_INITIAL_ACTION = 280,
101 PERCENT_LEX_PARAM = 281,
102 PERCENT_LOCATIONS = 282,
103 PERCENT_NAME_PREFIX = 283,
104 PERCENT_NO_DEFAULT_PREC = 284,
105 PERCENT_NO_LINES = 285,
106 PERCENT_NONDETERMINISTIC_PARSER = 286,
107 PERCENT_OUTPUT = 287,
108 PERCENT_PARSE_PARAM = 288,
109 PERCENT_PURE_PARSER = 289,
110 PERCENT_REQUIRE = 290,
111 PERCENT_SKELETON = 291,
112 PERCENT_START = 292,
113 PERCENT_TOKEN_TABLE = 293,
114 PERCENT_VERBOSE = 294,
115 PERCENT_YACC = 295,
116 BRACED_CODE = 296,
117 CHAR = 297,
118 EPILOGUE = 298,
119 EQUAL = 299,
120 ID = 300,
121 ID_COLON = 301,
122 PERCENT_PERCENT = 302,
123 PIPE = 303,
124 PROLOGUE = 304,
125 SEMICOLON = 305,
126 TYPE = 306,
127 PERCENT_UNION = 307
128 };
129 #endif
130 /* Tokens. */
131 #define GRAM_EOF 0
132 #define STRING 258
133 #define INT 259
134 #define PERCENT_TOKEN 260
135 #define PERCENT_NTERM 261
136 #define PERCENT_TYPE 262
137 #define PERCENT_DESTRUCTOR 263
138 #define PERCENT_PRINTER 264
139 #define PERCENT_LEFT 265
140 #define PERCENT_RIGHT 266
141 #define PERCENT_NONASSOC 267
142 #define PERCENT_PREC 268
143 #define PERCENT_DPREC 269
144 #define PERCENT_MERGE 270
145 #define PERCENT_DEBUG 271
146 #define PERCENT_DEFAULT_PREC 272
147 #define PERCENT_DEFINE 273
148 #define PERCENT_DEFINES 274
149 #define PERCENT_ERROR_VERBOSE 275
150 #define PERCENT_EXPECT 276
151 #define PERCENT_EXPECT_RR 277
152 #define PERCENT_FILE_PREFIX 278
153 #define PERCENT_GLR_PARSER 279
154 #define PERCENT_INITIAL_ACTION 280
155 #define PERCENT_LEX_PARAM 281
156 #define PERCENT_LOCATIONS 282
157 #define PERCENT_NAME_PREFIX 283
158 #define PERCENT_NO_DEFAULT_PREC 284
159 #define PERCENT_NO_LINES 285
160 #define PERCENT_NONDETERMINISTIC_PARSER 286
161 #define PERCENT_OUTPUT 287
162 #define PERCENT_PARSE_PARAM 288
163 #define PERCENT_PURE_PARSER 289
164 #define PERCENT_REQUIRE 290
165 #define PERCENT_SKELETON 291
166 #define PERCENT_START 292
167 #define PERCENT_TOKEN_TABLE 293
168 #define PERCENT_VERBOSE 294
169 #define PERCENT_YACC 295
170 #define BRACED_CODE 296
171 #define CHAR 297
172 #define EPILOGUE 298
173 #define EQUAL 299
174 #define ID 300
175 #define ID_COLON 301
176 #define PERCENT_PERCENT 302
177 #define PIPE 303
178 #define PROLOGUE 304
179 #define SEMICOLON 305
180 #define TYPE 306
181 #define PERCENT_UNION 307
182
183
184
185
186 /* Copy the first part of user declarations. */
187 #line 1 "parse-gram.y"
188 /* Bison Grammar Parser -*- C -*-
189
190 Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
191
192 This file is part of Bison, the GNU Compiler Compiler.
193
194 This program is free software; you can redistribute it and/or modify
195 it under the terms of the GNU General Public License as published by
196 the Free Software Foundation; either version 2 of the License, or
197 (at your option) any later version.
198
199 This program is distributed in the hope that it will be useful,
200 but WITHOUT ANY WARRANTY; without even the implied warranty of
201 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
202 GNU General Public License for more details.
203
204 You should have received a copy of the GNU General Public License
205 along with this program; if not, write to the Free Software
206 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
207 02110-1301 USA
208 */
209
210 #include <config.h>
211 #include "system.h"
212
213 #include "complain.h"
214 #include "conflicts.h"
215 #include "files.h"
216 #include "getargs.h"
217 #include "gram.h"
218 #include "muscle_tab.h"
219 #include "quotearg.h"
220 #include "reader.h"
221 #include "symlist.h"
222 #include "scan-gram.h"
223 #include "scan-code.h"
224 #include "strverscmp.h"
225
226 #define YYLLOC_DEFAULT(Current, Rhs, N) (Current) = lloc_default (Rhs, N)
227 static YYLTYPE lloc_default (YYLTYPE const *, int);
228
229 #define YY_LOCATION_PRINT(File, Loc) \
230 location_print (File, Loc)
231
232 static void version_check (location const *loc, char const *version);
233
234 /* Request detailed syntax error messages, and pass them to GRAM_ERROR.
235 FIXME: depends on the undocumented availability of YYLLOC. */
236 #undef yyerror
237 #define yyerror(Msg) \
238 gram_error (&yylloc, Msg)
239 static void gram_error (location const *, char const *);
240
241 static char const *char_name (char);
242
243 static void add_param (char const *, char *, location);
244
245 static symbol_class current_class = unknown_sym;
246 static uniqstr current_type = 0;
247 static symbol *current_lhs;
248 static location current_lhs_location;
249 static int current_prec = 0;
250
251 #ifdef UINT_FAST8_MAX
252 # define YYTYPE_UINT8 uint_fast8_t
253 #endif
254 #ifdef INT_FAST8_MAX
255 # define YYTYPE_INT8 int_fast8_t
256 #endif
257 #ifdef UINT_FAST16_MAX
258 # define YYTYPE_UINT16 uint_fast16_t
259 #endif
260 #ifdef INT_FAST16_MAX
261 # define YYTYPE_INT16 int_fast16_t
262 #endif
263
264
265 /* Enabling traces. */
266 #ifndef YYDEBUG
267 # define YYDEBUG 1
268 #endif
269
270 /* Enabling verbose error messages. */
271 #ifdef YYERROR_VERBOSE
272 # undef YYERROR_VERBOSE
273 # define YYERROR_VERBOSE 1
274 #else
275 # define YYERROR_VERBOSE 1
276 #endif
277
278 /* Enabling the token table. */
279 #ifndef YYTOKEN_TABLE
280 # define YYTOKEN_TABLE 0
281 #endif
282
283 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
284 typedef union YYSTYPE
285 #line 97 "parse-gram.y"
286 {
287 symbol *symbol;
288 symbol_list *list;
289 int integer;
290 char *chars;
291 assoc assoc;
292 uniqstr uniqstr;
293 unsigned char character;
294 }
295 /* Line 193 of yacc.c. */
296 #line 297 "parse-gram.c"
297 YYSTYPE;
298 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
299 # define YYSTYPE_IS_DECLARED 1
300 # define YYSTYPE_IS_TRIVIAL 1
301 #endif
302
303 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
304 typedef struct YYLTYPE
305 {
306 int first_line;
307 int first_column;
308 int last_line;
309 int last_column;
310 } YYLTYPE;
311 # define yyltype YYLTYPE /* obsolescent; will be withdrawn */
312 # define YYLTYPE_IS_DECLARED 1
313 # define YYLTYPE_IS_TRIVIAL 1
314 #endif
315
316
317 /* Copy the second part of user declarations. */
318
319
320 /* Line 216 of yacc.c. */
321 #line 322 "parse-gram.c"
322
323 #ifdef short
324 # undef short
325 #endif
326
327 #ifdef YYTYPE_UINT8
328 typedef YYTYPE_UINT8 yytype_uint8;
329 #else
330 typedef unsigned char yytype_uint8;
331 #endif
332
333 #ifdef YYTYPE_INT8
334 typedef YYTYPE_INT8 yytype_int8;
335 #elif (defined __STDC__ || defined __C99__FUNC__ \
336 || defined __cplusplus || defined _MSC_VER)
337 typedef signed char yytype_int8;
338 #else
339 typedef short int yytype_int8;
340 #endif
341
342 #ifdef YYTYPE_UINT16
343 typedef YYTYPE_UINT16 yytype_uint16;
344 #else
345 typedef unsigned short int yytype_uint16;
346 #endif
347
348 #ifdef YYTYPE_INT16
349 typedef YYTYPE_INT16 yytype_int16;
350 #else
351 typedef short int yytype_int16;
352 #endif
353
354 #ifndef YYSIZE_T
355 # ifdef __SIZE_TYPE__
356 # define YYSIZE_T __SIZE_TYPE__
357 # elif defined size_t
358 # define YYSIZE_T size_t
359 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
360 || defined __cplusplus || defined _MSC_VER)
361 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
362 # define YYSIZE_T size_t
363 # else
364 # define YYSIZE_T unsigned int
365 # endif
366 #endif
367
368 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
369
370 #ifndef YY_
371 # if YYENABLE_NLS
372 # if ENABLE_NLS
373 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
374 # define YY_(msgid) dgettext ("bison-runtime", msgid)
375 # endif
376 # endif
377 # ifndef YY_
378 # define YY_(msgid) msgid
379 # endif
380 #endif
381
382 /* Suppress unused-variable warnings by "using" E. */
383 #if ! defined lint || defined __GNUC__
384 # define YYUSE(e) ((void) (e))
385 #else
386 # define YYUSE(e) /* empty */
387 #endif
388
389 /* Identity function, used to suppress warnings about constant conditions. */
390 #ifndef lint
391 # define YYID(n) (n)
392 #else
393 #if (defined __STDC__ || defined __C99__FUNC__ \
394 || defined __cplusplus || defined _MSC_VER)
395 static int
396 YYID (int i)
397 #else
398 static int
399 YYID (i)
400 int i;
401 #endif
402 {
403 return i;
404 }
405 #endif
406
407 #if ! defined yyoverflow || YYERROR_VERBOSE
408
409 /* The parser invokes alloca or malloc; define the necessary symbols. */
410
411 # ifdef YYSTACK_USE_ALLOCA
412 # if YYSTACK_USE_ALLOCA
413 # ifdef __GNUC__
414 # define YYSTACK_ALLOC __builtin_alloca
415 # elif defined __BUILTIN_VA_ARG_INCR
416 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
417 # elif defined _AIX
418 # define YYSTACK_ALLOC __alloca
419 # elif defined _MSC_VER
420 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
421 # define alloca _alloca
422 # else
423 # define YYSTACK_ALLOC alloca
424 # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
425 || defined __cplusplus || defined _MSC_VER)
426 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
427 # ifndef _STDLIB_H
428 # define _STDLIB_H 1
429 # endif
430 # endif
431 # endif
432 # endif
433 # endif
434
435 # ifdef YYSTACK_ALLOC
436 /* Pacify GCC's `empty if-body' warning. */
437 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
438 # ifndef YYSTACK_ALLOC_MAXIMUM
439 /* The OS might guarantee only one guard page at the bottom of the stack,
440 and a page size can be as small as 4096 bytes. So we cannot safely
441 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
442 to allow for a few compiler-allocated temporary stack slots. */
443 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
444 # endif
445 # else
446 # define YYSTACK_ALLOC YYMALLOC
447 # define YYSTACK_FREE YYFREE
448 # ifndef YYSTACK_ALLOC_MAXIMUM
449 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
450 # endif
451 # if (defined __cplusplus && ! defined _STDLIB_H \
452 && ! ((defined YYMALLOC || defined malloc) \
453 && (defined YYFREE || defined free)))
454 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
455 # ifndef _STDLIB_H
456 # define _STDLIB_H 1
457 # endif
458 # endif
459 # ifndef YYMALLOC
460 # define YYMALLOC malloc
461 # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
462 || defined __cplusplus || defined _MSC_VER)
463 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
464 # endif
465 # endif
466 # ifndef YYFREE
467 # define YYFREE free
468 # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
469 || defined __cplusplus || defined _MSC_VER)
470 void free (void *); /* INFRINGES ON USER NAME SPACE */
471 # endif
472 # endif
473 # endif
474 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
475
476
477 #if (! defined yyoverflow \
478 && (! defined __cplusplus \
479 || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
480 && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
481
482 /* A type that is properly aligned for any stack member. */
483 union yyalloc
484 {
485 yytype_int16 yyss;
486 YYSTYPE yyvs;
487 YYLTYPE yyls;
488 };
489
490 /* The size of the maximum gap between one aligned stack and the next. */
491 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
492
493 /* The size of an array large to enough to hold all stacks, each with
494 N elements. */
495 # define YYSTACK_BYTES(N) \
496 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
497 + 2 * YYSTACK_GAP_MAXIMUM)
498
499 /* Copy COUNT objects from FROM to TO. The source and destination do
500 not overlap. */
501 # ifndef YYCOPY
502 # if defined __GNUC__ && 1 < __GNUC__
503 # define YYCOPY(To, From, Count) \
504 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
505 # else
506 # define YYCOPY(To, From, Count) \
507 do \
508 { \
509 YYSIZE_T yyi; \
510 for (yyi = 0; yyi < (Count); yyi++) \
511 (To)[yyi] = (From)[yyi]; \
512 } \
513 while (YYID (0))
514 # endif
515 # endif
516
517 /* Relocate STACK from its old location to the new one. The
518 local variables YYSIZE and YYSTACKSIZE give the old and new number of
519 elements in the stack, and YYPTR gives the new location of the
520 stack. Advance YYPTR to a properly aligned location for the next
521 stack. */
522 # define YYSTACK_RELOCATE(Stack) \
523 do \
524 { \
525 YYSIZE_T yynewbytes; \
526 YYCOPY (&yyptr->Stack, Stack, yysize); \
527 Stack = &yyptr->Stack; \
528 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
529 yyptr += yynewbytes / sizeof (*yyptr); \
530 } \
531 while (YYID (0))
532
533 #endif
534
535 /* YYFINAL -- State number of the termination state. */
536 #define YYFINAL 3
537 /* YYLAST -- Last index in YYTABLE. */
538 #define YYLAST 134
539
540 /* YYNTOKENS -- Number of terminals. */
541 #define YYNTOKENS 53
542 /* YYNNTS -- Number of nonterminals. */
543 #define YYNNTS 27
544 /* YYNRULES -- Number of rules. */
545 #define YYNRULES 85
546 /* YYNRULES -- Number of states. */
547 #define YYNSTATES 120
548
549 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
550 #define YYUNDEFTOK 2
551 #define YYMAXUTOK 307
552
553 #define YYTRANSLATE(YYX) \
554 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
555
556 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
557 static const yytype_uint8 yytranslate[] =
558 {
559 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
560 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
561 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
562 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
563 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
564 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
565 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
566 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
567 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
568 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
569 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
570 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
571 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
572 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
573 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
574 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
575 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
576 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
577 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
578 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
579 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
580 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
581 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
582 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
583 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
584 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
585 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
586 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
587 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
588 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
589 45, 46, 47, 48, 49, 50, 51, 52
590 };
591
592 #if YYDEBUG
593 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
594 YYRHS. */
595 static const yytype_uint8 yyprhs[] =
596 {
597 0, 0, 3, 8, 9, 12, 14, 16, 18, 21,
598 25, 27, 29, 32, 35, 39, 41, 44, 47, 49,
599 53, 55, 57, 61, 64, 66, 69, 72, 74, 76,
600 78, 80, 82, 84, 87, 91, 95, 97, 99, 100,
601 102, 106, 107, 111, 112, 116, 120, 124, 126, 128,
602 130, 131, 133, 135, 138, 140, 142, 145, 148, 152,
603 154, 157, 159, 162, 164, 167, 170, 171, 175, 177,
604 181, 184, 185, 188, 191, 195, 199, 203, 205, 207,
605 209, 211, 213, 215, 217, 218
606 };
607
608 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
609 static const yytype_int8 yyrhs[] =
610 {
611 54, 0, -1, 55, 47, 68, 79, -1, -1, 55,
612 56, -1, 57, -1, 49, -1, 16, -1, 18, 78,
613 -1, 18, 78, 78, -1, 19, -1, 20, -1, 21,
614 4, -1, 22, 4, -1, 23, 44, 78, -1, 24,
615 -1, 25, 41, -1, 26, 41, -1, 27, -1, 28,
616 44, 78, -1, 30, -1, 31, -1, 32, 44, 78,
617 -1, 33, 41, -1, 34, -1, 35, 78, -1, 36,
618 78, -1, 38, -1, 39, -1, 40, -1, 50, -1,
619 62, -1, 59, -1, 37, 76, -1, 8, 41, 65,
620 -1, 9, 41, 65, -1, 17, -1, 29, -1, -1,
621 45, -1, 52, 58, 41, -1, -1, 6, 60, 67,
622 -1, -1, 5, 61, 67, -1, 7, 51, 65, -1,
623 63, 64, 65, -1, 10, -1, 11, -1, 12, -1,
624 -1, 51, -1, 76, -1, 65, 76, -1, 51, -1,
625 74, -1, 74, 4, -1, 74, 77, -1, 74, 4,
626 77, -1, 66, -1, 67, 66, -1, 69, -1, 68,
627 69, -1, 70, -1, 57, 50, -1, 1, 50, -1,
628 -1, 75, 71, 72, -1, 73, -1, 72, 48, 73,
629 -1, 72, 50, -1, -1, 73, 76, -1, 73, 41,
630 -1, 73, 13, 76, -1, 73, 14, 4, -1, 73,
631 15, 51, -1, 45, -1, 42, -1, 46, -1, 74,
632 -1, 77, -1, 3, -1, 3, -1, -1, 47, 43,
633 -1
634 };
635
636 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
637 static const yytype_uint16 yyrline[] =
638 {
639 0, 198, 198, 206, 208, 212, 213, 215, 216, 221,
640 222, 223, 224, 225, 226, 227, 232, 236, 237, 238,
641 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
642 249, 253, 254, 255, 259, 267, 275, 279, 293, 294,
643 298, 320, 320, 325, 325, 330, 340, 355, 356, 357,
644 361, 362, 367, 368, 373, 377, 382, 388, 394, 405,
645 406, 415, 416, 422, 423, 424, 431, 431, 435, 436,
646 437, 442, 443, 445, 448, 450, 452, 465, 467, 476,
647 481, 482, 487, 496, 501, 503
648 };
649 #endif
650
651 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
652 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
653 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
654 static const char *const yytname[] =
655 {
656 "\"end of file\"", "error", "$undefined", "\"string\"", "\"integer\"",
657 "\"%token\"", "\"%nterm\"", "\"%type\"", "\"%destructor\"",
658 "\"%printer\"", "\"%left\"", "\"%right\"", "\"%nonassoc\"", "\"%prec\"",
659 "\"%dprec\"", "\"%merge\"", "\"%debug\"", "\"%default-prec\"",
660 "\"%define\"", "\"%defines\"", "\"%error-verbose\"", "\"%expect\"",
661 "\"%expect-rr\"", "\"%file-prefix\"", "\"%glr-parser\"",
662 "\"%initial-action\"", "\"%lex-param\"", "\"%locations\"",
663 "\"%name-prefix\"", "\"%no-default-prec\"", "\"%no-lines\"",
664 "\"%nondeterministic-parser\"", "\"%output\"", "\"%parse-param\"",
665 "\"%pure-parser\"", "\"%require\"", "\"%skeleton\"", "\"%start\"",
666 "\"%token-table\"", "\"%verbose\"", "\"%yacc\"", "\"{...}\"", "\"char\"",
667 "\"epilogue\"", "\"=\"", "\"identifier\"", "\"identifier:\"", "\"%%\"",
668 "\"|\"", "\"%{...%}\"", "\";\"", "\"type\"", "\"%union\"", "$accept",
669 "input", "declarations", "declaration", "grammar_declaration",
670 "union_name", "symbol_declaration", "@1", "@2", "precedence_declaration",
671 "precedence_declarator", "type.opt", "symbols.1", "symbol_def",
672 "symbol_defs.1", "grammar", "rules_or_grammar_declaration", "rules",
673 "@3", "rhses.1", "rhs", "id", "id_colon", "symbol", "string_as_id",
674 "string_content", "epilogue.opt", 0
675 };
676 #endif
677
678 # ifdef YYPRINT
679 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
680 token YYLEX-NUM. */
681 static const yytype_uint16 yytoknum[] =
682 {
683 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
684 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
685 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
686 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
687 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
688 305, 306, 307
689 };
690 # endif
691
692 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
693 static const yytype_uint8 yyr1[] =
694 {
695 0, 53, 54, 55, 55, 56, 56, 56, 56, 56,
696 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
697 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
698 56, 57, 57, 57, 57, 57, 57, 57, 58, 58,
699 57, 60, 59, 61, 59, 59, 62, 63, 63, 63,
700 64, 64, 65, 65, 66, 66, 66, 66, 66, 67,
701 67, 68, 68, 69, 69, 69, 71, 70, 72, 72,
702 72, 73, 73, 73, 73, 73, 73, 74, 74, 75,
703 76, 76, 77, 78, 79, 79
704 };
705
706 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
707 static const yytype_uint8 yyr2[] =
708 {
709 0, 2, 4, 0, 2, 1, 1, 1, 2, 3,
710 1, 1, 2, 2, 3, 1, 2, 2, 1, 3,
711 1, 1, 3, 2, 1, 2, 2, 1, 1, 1,
712 1, 1, 1, 2, 3, 3, 1, 1, 0, 1,
713 3, 0, 3, 0, 3, 3, 3, 1, 1, 1,
714 0, 1, 1, 2, 1, 1, 2, 2, 3, 1,
715 2, 1, 2, 1, 2, 2, 0, 3, 1, 3,
716 2, 0, 2, 2, 3, 3, 3, 1, 1, 1,
717 1, 1, 1, 1, 0, 2
718 };
719
720 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
721 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
722 means the default is an error. */
723 static const yytype_uint8 yydefact[] =
724 {
725 3, 0, 0, 1, 43, 41, 0, 0, 0, 47,
726 48, 49, 7, 36, 0, 10, 11, 0, 0, 0,
727 15, 0, 0, 18, 0, 37, 20, 21, 0, 0,
728 24, 0, 0, 0, 27, 28, 29, 0, 6, 30,
729 38, 4, 5, 32, 31, 50, 0, 0, 0, 0,
730 0, 83, 8, 12, 13, 0, 16, 17, 0, 0,
731 23, 25, 26, 82, 78, 77, 80, 33, 81, 0,
732 79, 0, 0, 61, 63, 66, 39, 0, 51, 0,
733 54, 59, 44, 55, 42, 45, 52, 34, 35, 9,
734 14, 19, 22, 65, 64, 0, 62, 2, 71, 40,
735 46, 60, 56, 57, 53, 85, 67, 68, 58, 71,
736 70, 0, 0, 0, 73, 72, 69, 74, 75, 76
737 };
738
739 /* YYDEFGOTO[NTERM-NUM]. */
740 static const yytype_int8 yydefgoto[] =
741 {
742 -1, 1, 2, 41, 71, 77, 43, 47, 46, 44,
743 45, 79, 85, 81, 82, 72, 73, 74, 98, 106,
744 107, 66, 75, 86, 68, 52, 97
745 };
746
747 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
748 STATE-NUM. */
749 #define YYPACT_NINF -70
750 static const yytype_int8 yypact[] =
751 {
752 -70, 5, 79, -70, -70, -70, -19, -4, 8, -70,
753 -70, -70, -70, -70, 47, -70, -70, 54, 61, 25,
754 -70, 38, 39, -70, 37, -70, -70, -70, 48, 41,
755 -70, 47, 47, 26, -70, -70, -70, 14, -70, -70,
756 49, -70, -70, -70, -70, 42, 19, 19, 26, 26,
757 26, -70, 47, -70, -70, 47, -70, -70, 47, 47,
758 -70, -70, -70, -70, -70, -70, -70, -70, -70, 70,
759 -70, 71, 1, -70, -70, -70, -70, 81, -70, 26,
760 -70, -70, 19, 13, 19, 26, -70, 26, 26, -70,
761 -70, -70, -70, -70, -70, 80, -70, -70, -70, -70,
762 26, -70, 121, -70, -70, -70, -8, 31, -70, -70,
763 -70, 26, 123, 74, -70, -70, 31, -70, -70, -70
764 };
765
766 /* YYPGOTO[NTERM-NUM]. */
767 static const yytype_int16 yypgoto[] =
768 {
769 -70, -70, -70, -70, 128, -70, -70, -70, -70, -70,
770 -70, -70, -22, -7, 85, -70, 62, -70, -70, -70,
771 24, -43, -70, -33, -69, 4, -70
772 };
773
774 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
775 positive, shift that token. If negative, reduce the rule which
776 number is the opposite. If zero, do what YYDEFACT says.
777 If YYTABLE_NINF, syntax error. */
778 #define YYTABLE_NINF -85
779 static const yytype_int8 yytable[] =
780 {
781 67, -84, 69, 83, 83, 3, 4, 5, 6, 7,
782 8, 9, 10, 11, 103, 69, 63, 102, 13, 4,
783 5, 6, 7, 8, 9, 10, 11, 87, 88, 63,
784 25, 13, 48, 108, 63, 61, 62, 49, 33, 83,
785 109, 83, 110, 25, 111, 112, 113, 70, 95, 50,
786 51, 33, 104, 40, 104, 104, 89, 100, 53, 90,
787 70, 64, 91, 92, 65, 54, 40, 104, 64, 55,
788 80, 65, 114, 64, 115, 101, 65, 101, 117, 56,
789 57, 58, 60, 115, 4, 5, 6, 7, 8, 9,
790 10, 11, 59, 78, 76, 12, 13, 14, 15, 16,
791 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
792 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
793 93, 94, 99, 105, 63, 119, 37, 118, 38, 39,
794 42, 40, 84, 116, 96
795 };
796
797 static const yytype_uint8 yycheck[] =
798 {
799 33, 0, 1, 46, 47, 0, 5, 6, 7, 8,
800 9, 10, 11, 12, 83, 1, 3, 4, 17, 5,
801 6, 7, 8, 9, 10, 11, 12, 49, 50, 3,
802 29, 17, 51, 102, 3, 31, 32, 41, 37, 82,
803 48, 84, 50, 29, 13, 14, 15, 46, 47, 41,
804 3, 37, 85, 52, 87, 88, 52, 79, 4, 55,
805 46, 42, 58, 59, 45, 4, 52, 100, 42, 44,
806 51, 45, 41, 42, 107, 82, 45, 84, 111, 41,
807 41, 44, 41, 116, 5, 6, 7, 8, 9, 10,
808 11, 12, 44, 51, 45, 16, 17, 18, 19, 20,
809 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
810 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
811 50, 50, 41, 43, 3, 51, 47, 4, 49, 50,
812 2, 52, 47, 109, 72
813 };
814
815 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
816 symbol of state STATE-NUM. */
817 static const yytype_uint8 yystos[] =
818 {
819 0, 54, 55, 0, 5, 6, 7, 8, 9, 10,
820 11, 12, 16, 17, 18, 19, 20, 21, 22, 23,
821 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
822 34, 35, 36, 37, 38, 39, 40, 47, 49, 50,
823 52, 56, 57, 59, 62, 63, 61, 60, 51, 41,
824 41, 3, 78, 4, 4, 44, 41, 41, 44, 44,
825 41, 78, 78, 3, 42, 45, 74, 76, 77, 1,
826 46, 57, 68, 69, 70, 75, 45, 58, 51, 64,
827 51, 66, 67, 74, 67, 65, 76, 65, 65, 78,
828 78, 78, 78, 50, 50, 47, 69, 79, 71, 41,
829 65, 66, 4, 77, 76, 43, 72, 73, 77, 48,
830 50, 13, 14, 15, 41, 76, 73, 76, 4, 51
831 };
832
833 #define yyerrok (yyerrstatus = 0)
834 #define yyclearin (yychar = YYEMPTY)
835 #define YYEMPTY (-2)
836 #define YYEOF 0
837
838 #define YYACCEPT goto yyacceptlab
839 #define YYABORT goto yyabortlab
840 #define YYERROR goto yyerrorlab
841
842
843 /* Like YYERROR except do call yyerror. This remains here temporarily
844 to ease the transition to the new meaning of YYERROR, for GCC.
845 Once GCC version 2 has supplanted version 1, this can go. */
846
847 #define YYFAIL goto yyerrlab
848
849 #define YYRECOVERING() (!!yyerrstatus)
850
851 #define YYBACKUP(Token, Value) \
852 do \
853 if (yychar == YYEMPTY && yylen == 1) \
854 { \
855 yychar = (Token); \
856 yylval = (Value); \
857 yytoken = YYTRANSLATE (yychar); \
858 YYPOPSTACK (1); \
859 goto yybackup; \
860 } \
861 else \
862 { \
863 yyerror (YY_("syntax error: cannot back up")); \
864 YYERROR; \
865 } \
866 while (YYID (0))
867
868
869 #define YYTERROR 1
870 #define YYERRCODE 256
871
872
873 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
874 If N is 0, then set CURRENT to the empty location which ends
875 the previous symbol: RHS[0] (always defined). */
876
877 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
878 #ifndef YYLLOC_DEFAULT
879 # define YYLLOC_DEFAULT(Current, Rhs, N) \
880 do \
881 if (YYID (N)) \
882 { \
883 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
884 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
885 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
886 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
887 } \
888 else \
889 { \
890 (Current).first_line = (Current).last_line = \
891 YYRHSLOC (Rhs, 0).last_line; \
892 (Current).first_column = (Current).last_column = \
893 YYRHSLOC (Rhs, 0).last_column; \
894 } \
895 while (YYID (0))
896 #endif
897
898
899 /* YY_LOCATION_PRINT -- Print the location on the stream.
900 This macro was not mandated originally: define only if we know
901 we won't break user code: when these are the locations we know. */
902
903 #ifndef YY_LOCATION_PRINT
904 # if YYLTYPE_IS_TRIVIAL
905 # define YY_LOCATION_PRINT(File, Loc) \
906 fprintf (File, "%d.%d-%d.%d", \
907 (Loc).first_line, (Loc).first_column, \
908 (Loc).last_line, (Loc).last_column)
909 # else
910 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
911 # endif
912 #endif
913
914
915 /* YYLEX -- calling `yylex' with the right arguments. */
916
917 #ifdef YYLEX_PARAM
918 # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
919 #else
920 # define YYLEX yylex (&yylval, &yylloc)
921 #endif
922
923 /* Enable debugging if requested. */
924 #if YYDEBUG
925
926 # ifndef YYFPRINTF
927 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
928 # define YYFPRINTF fprintf
929 # endif
930
931 # define YYDPRINTF(Args) \
932 do { \
933 if (yydebug) \
934 YYFPRINTF Args; \
935 } while (YYID (0))
936
937 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
938 do { \
939 if (yydebug) \
940 { \
941 YYFPRINTF (stderr, "%s ", Title); \
942 yy_symbol_print (stderr, \
943 Type, Value, Location); \
944 YYFPRINTF (stderr, "\n"); \
945 } \
946 } while (YYID (0))
947
948
949 /*--------------------------------.
950 | Print this symbol on YYOUTPUT. |
951 `--------------------------------*/
952
953 /*ARGSUSED*/
954 #if (defined __STDC__ || defined __C99__FUNC__ \
955 || defined __cplusplus || defined _MSC_VER)
956 static void
957 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp)
958 #else
959 static void
960 yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
961 FILE *yyoutput;
962 int yytype;
963 YYSTYPE const * const yyvaluep;
964 YYLTYPE const * const yylocationp;
965 #endif
966 {
967 if (!yyvaluep)
968 return;
969 YYUSE (yylocationp);
970 # ifdef YYPRINT
971 if (yytype < YYNTOKENS)
972 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
973 # else
974 YYUSE (yyoutput);
975 # endif
976 switch (yytype)
977 {
978 case 3: /* "\"string\"" */
979 #line 177 "parse-gram.y"
980 { fputs (quotearg_style (c_quoting_style, (yyvaluep->chars)), stderr); };
981 #line 982 "parse-gram.c"
982 break;
983 case 4: /* "\"integer\"" */
984 #line 187 "parse-gram.y"
985 { fprintf (stderr, "%d", (yyvaluep->integer)); };
986 #line 987 "parse-gram.c"
987 break;
988 case 41: /* "\"{...}\"" */
989 #line 179 "parse-gram.y"
990 { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
991 #line 992 "parse-gram.c"
992 break;
993 case 42: /* "\"char\"" */
994 #line 174 "parse-gram.y"
995 { fputs (char_name ((yyvaluep->character)), stderr); };
996 #line 997 "parse-gram.c"
997 break;
998 case 43: /* "\"epilogue\"" */
999 #line 179 "parse-gram.y"
1000 { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
1001 #line 1002 "parse-gram.c"
1002 break;
1003 case 45: /* "\"identifier\"" */
1004 #line 183 "parse-gram.y"
1005 { fputs ((yyvaluep->uniqstr), stderr); };
1006 #line 1007 "parse-gram.c"
1007 break;
1008 case 46: /* "\"identifier:\"" */
1009 #line 184 "parse-gram.y"
1010 { fprintf (stderr, "%s:", (yyvaluep->uniqstr)); };
1011 #line 1012 "parse-gram.c"
1012 break;
1013 case 49: /* "\"%{...%}\"" */
1014 #line 179 "parse-gram.y"
1015 { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
1016 #line 1017 "parse-gram.c"
1017 break;
1018 case 51: /* "\"type\"" */
1019 #line 182 "parse-gram.y"
1020 { fprintf (stderr, "<%s>", (yyvaluep->uniqstr)); };
1021 #line 1022 "parse-gram.c"
1022 break;
1023 case 74: /* "id" */
1024 #line 190 "parse-gram.y"
1025 { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
1026 #line 1027 "parse-gram.c"
1027 break;
1028 case 75: /* "id_colon" */
1029 #line 191 "parse-gram.y"
1030 { fprintf (stderr, "%s:", (yyvaluep->symbol)->tag); };
1031 #line 1032 "parse-gram.c"
1032 break;
1033 case 76: /* "symbol" */
1034 #line 190 "parse-gram.y"
1035 { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
1036 #line 1037 "parse-gram.c"
1037 break;
1038 case 77: /* "string_as_id" */
1039 #line 190 "parse-gram.y"
1040 { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
1041 #line 1042 "parse-gram.c"
1042 break;
1043 case 78: /* "string_content" */
1044 #line 177 "parse-gram.y"
1045 { fputs (quotearg_style (c_quoting_style, (yyvaluep->chars)), stderr); };
1046 #line 1047 "parse-gram.c"
1047 break;
1048 default:
1049 break;
1050 }
1051 }
1052
1053
1054 /*--------------------------------.
1055 | Print this symbol on YYOUTPUT. |
1056 `--------------------------------*/
1057
1058 #if (defined __STDC__ || defined __C99__FUNC__ \
1059 || defined __cplusplus || defined _MSC_VER)
1060 static void
1061 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp)
1062 #else
1063 static void
1064 yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp)
1065 FILE *yyoutput;
1066 int yytype;
1067 YYSTYPE const * const yyvaluep;
1068 YYLTYPE const * const yylocationp;
1069 #endif
1070 {
1071 if (yytype < YYNTOKENS)
1072 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1073 else
1074 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1075
1076 YY_LOCATION_PRINT (yyoutput, *yylocationp);
1077 YYFPRINTF (yyoutput, ": ");
1078 yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp);
1079 YYFPRINTF (yyoutput, ")");
1080 }
1081
1082 /*------------------------------------------------------------------.
1083 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1084 | TOP (included). |
1085 `------------------------------------------------------------------*/
1086
1087 #if (defined __STDC__ || defined __C99__FUNC__ \
1088 || defined __cplusplus || defined _MSC_VER)
1089 static void
1090 yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
1091 #else
1092 static void
1093 yy_stack_print (bottom, top)
1094 yytype_int16 *bottom;
1095 yytype_int16 *top;
1096 #endif
1097 {
1098 YYFPRINTF (stderr, "Stack now");
1099 for (; bottom <= top; ++bottom)
1100 YYFPRINTF (stderr, " %d", *bottom);
1101 YYFPRINTF (stderr, "\n");
1102 }
1103
1104 # define YY_STACK_PRINT(Bottom, Top) \
1105 do { \
1106 if (yydebug) \
1107 yy_stack_print ((Bottom), (Top)); \
1108 } while (YYID (0))
1109
1110
1111 /*------------------------------------------------.
1112 | Report that the YYRULE is going to be reduced. |
1113 `------------------------------------------------*/
1114
1115 #if (defined __STDC__ || defined __C99__FUNC__ \
1116 || defined __cplusplus || defined _MSC_VER)
1117 static void
1118 yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule)
1119 #else
1120 static void
1121 yy_reduce_print (yyvsp, yylsp, yyrule)
1122 YYSTYPE *yyvsp;
1123 YYLTYPE *yylsp;
1124 int yyrule;
1125 #endif
1126 {
1127 int yynrhs = yyr2[yyrule];
1128 int yyi;
1129 unsigned long int yylno = yyrline[yyrule];
1130 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1131 yyrule - 1, yylno);
1132 /* The symbols being reduced. */
1133 for (yyi = 0; yyi < yynrhs; yyi++)
1134 {
1135 fprintf (stderr, " $%d = ", yyi + 1);
1136 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
1137 &(yyvsp[(yyi + 1) - (yynrhs)])
1138 , &(yylsp[(yyi + 1) - (yynrhs)]) );
1139 fprintf (stderr, "\n");
1140 }
1141 }
1142
1143 # define YY_REDUCE_PRINT(Rule) \
1144 do { \
1145 if (yydebug) \
1146 yy_reduce_print (yyvsp, yylsp, Rule); \
1147 } while (YYID (0))
1148
1149 /* Nonzero means print parse trace. It is left uninitialized so that
1150 multiple parsers can coexist. */
1151 int yydebug;
1152 #else /* !YYDEBUG */
1153 # define YYDPRINTF(Args)
1154 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1155 # define YY_STACK_PRINT(Bottom, Top)
1156 # define YY_REDUCE_PRINT(Rule)
1157 #endif /* !YYDEBUG */
1158
1159
1160 /* YYINITDEPTH -- initial size of the parser's stacks. */
1161 #ifndef YYINITDEPTH
1162 # define YYINITDEPTH 200
1163 #endif
1164
1165 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1166 if the built-in stack extension method is used).
1167
1168 Do not make this value too large; the results are undefined if
1169 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1170 evaluated with infinite-precision integer arithmetic. */
1171
1172 #ifndef YYMAXDEPTH
1173 # define YYMAXDEPTH 10000
1174 #endif
1175
1176 \f
1177
1178 #if YYERROR_VERBOSE
1179
1180 # ifndef yystrlen
1181 # if defined __GLIBC__ && defined _STRING_H
1182 # define yystrlen strlen
1183 # else
1184 /* Return the length of YYSTR. */
1185 #if (defined __STDC__ || defined __C99__FUNC__ \
1186 || defined __cplusplus || defined _MSC_VER)
1187 static YYSIZE_T
1188 yystrlen (const char *yystr)
1189 #else
1190 static YYSIZE_T
1191 yystrlen (yystr)
1192 const char *yystr;
1193 #endif
1194 {
1195 YYSIZE_T yylen;
1196 for (yylen = 0; yystr[yylen]; yylen++)
1197 continue;
1198 return yylen;
1199 }
1200 # endif
1201 # endif
1202
1203 # ifndef yystpcpy
1204 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1205 # define yystpcpy stpcpy
1206 # else
1207 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1208 YYDEST. */
1209 #if (defined __STDC__ || defined __C99__FUNC__ \
1210 || defined __cplusplus || defined _MSC_VER)
1211 static char *
1212 yystpcpy (char *yydest, const char *yysrc)
1213 #else
1214 static char *
1215 yystpcpy (yydest, yysrc)
1216 char *yydest;
1217 const char *yysrc;
1218 #endif
1219 {
1220 char *yyd = yydest;
1221 const char *yys = yysrc;
1222
1223 while ((*yyd++ = *yys++) != '\0')
1224 continue;
1225
1226 return yyd - 1;
1227 }
1228 # endif
1229 # endif
1230
1231 # ifndef yytnamerr
1232 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1233 quotes and backslashes, so that it's suitable for yyerror. The
1234 heuristic is that double-quoting is unnecessary unless the string
1235 contains an apostrophe, a comma, or backslash (other than
1236 backslash-backslash). YYSTR is taken from yytname. If YYRES is
1237 null, do not copy; instead, return the length of what the result
1238 would have been. */
1239 static YYSIZE_T
1240 yytnamerr (char *yyres, const char *yystr)
1241 {
1242 if (*yystr == '"')
1243 {
1244 YYSIZE_T yyn = 0;
1245 char const *yyp = yystr;
1246
1247 for (;;)
1248 switch (*++yyp)
1249 {
1250 case '\'':
1251 case ',':
1252 goto do_not_strip_quotes;
1253
1254 case '\\':
1255 if (*++yyp != '\\')
1256 goto do_not_strip_quotes;
1257 /* Fall through. */
1258 default:
1259 if (yyres)
1260 yyres[yyn] = *yyp;
1261 yyn++;
1262 break;
1263
1264 case '"':
1265 if (yyres)
1266 yyres[yyn] = '\0';
1267 return yyn;
1268 }
1269 do_not_strip_quotes: ;
1270 }
1271
1272 if (! yyres)
1273 return yystrlen (yystr);
1274
1275 return yystpcpy (yyres, yystr) - yyres;
1276 }
1277 # endif
1278
1279 /* Copy into YYRESULT an error message about the unexpected token
1280 YYCHAR while in state YYSTATE. Return the number of bytes copied,
1281 including the terminating null byte. If YYRESULT is null, do not
1282 copy anything; just return the number of bytes that would be
1283 copied. As a special case, return 0 if an ordinary "syntax error"
1284 message will do. Return YYSIZE_MAXIMUM if overflow occurs during
1285 size calculation. */
1286 static YYSIZE_T
1287 yysyntax_error (char *yyresult, int yystate, int yychar)
1288 {
1289 int yyn = yypact[yystate];
1290
1291 if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
1292 return 0;
1293 else
1294 {
1295 int yytype = YYTRANSLATE (yychar);
1296 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
1297 YYSIZE_T yysize = yysize0;
1298 YYSIZE_T yysize1;
1299 int yysize_overflow = 0;
1300 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1301 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1302 int yyx;
1303
1304 # if 0
1305 /* This is so xgettext sees the translatable formats that are
1306 constructed on the fly. */
1307 YY_("syntax error, unexpected %s");
1308 YY_("syntax error, unexpected %s, expecting %s");
1309 YY_("syntax error, unexpected %s, expecting %s or %s");
1310 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
1311 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
1312 # endif
1313 char *yyfmt;
1314 char const *yyf;
1315 static char const yyunexpected[] = "syntax error, unexpected %s";
1316 static char const yyexpecting[] = ", expecting %s";
1317 static char const yyor[] = " or %s";
1318 char yyformat[sizeof yyunexpected
1319 + sizeof yyexpecting - 1
1320 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
1321 * (sizeof yyor - 1))];
1322 char const *yyprefix = yyexpecting;
1323
1324 /* Start YYX at -YYN if negative to avoid negative indexes in
1325 YYCHECK. */
1326 int yyxbegin = yyn < 0 ? -yyn : 0;
1327
1328 /* Stay within bounds of both yycheck and yytname. */
1329 int yychecklim = YYLAST - yyn + 1;
1330 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1331 int yycount = 1;
1332
1333 yyarg[0] = yytname[yytype];
1334 yyfmt = yystpcpy (yyformat, yyunexpected);
1335
1336 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1337 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1338 {
1339 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1340 {
1341 yycount = 1;
1342 yysize = yysize0;
1343 yyformat[sizeof yyunexpected - 1] = '\0';
1344 break;
1345 }
1346 yyarg[yycount++] = yytname[yyx];
1347 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
1348 yysize_overflow |= (yysize1 < yysize);
1349 yysize = yysize1;
1350 yyfmt = yystpcpy (yyfmt, yyprefix);
1351 yyprefix = yyor;
1352 }
1353
1354 yyf = YY_(yyformat);
1355 yysize1 = yysize + yystrlen (yyf);
1356 yysize_overflow |= (yysize1 < yysize);
1357 yysize = yysize1;
1358
1359 if (yysize_overflow)
1360 return YYSIZE_MAXIMUM;
1361
1362 if (yyresult)
1363 {
1364 /* Avoid sprintf, as that infringes on the user's name space.
1365 Don't have undefined behavior even if the translation
1366 produced a string with the wrong number of "%s"s. */
1367 char *yyp = yyresult;
1368 int yyi = 0;
1369 while ((*yyp = *yyf) != '\0')
1370 {
1371 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
1372 {
1373 yyp += yytnamerr (yyp, yyarg[yyi++]);
1374 yyf += 2;
1375 }
1376 else
1377 {
1378 yyp++;
1379 yyf++;
1380 }
1381 }
1382 }
1383 return yysize;
1384 }
1385 }
1386 #endif /* YYERROR_VERBOSE */
1387 \f
1388
1389 /*-----------------------------------------------.
1390 | Release the memory associated to this symbol. |
1391 `-----------------------------------------------*/
1392
1393 /*ARGSUSED*/
1394 #if (defined __STDC__ || defined __C99__FUNC__ \
1395 || defined __cplusplus || defined _MSC_VER)
1396 static void
1397 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
1398 #else
1399 static void
1400 yydestruct (yymsg, yytype, yyvaluep, yylocationp)
1401 const char *yymsg;
1402 int yytype;
1403 YYSTYPE *yyvaluep;
1404 YYLTYPE *yylocationp;
1405 #endif
1406 {
1407 YYUSE (yyvaluep);
1408 YYUSE (yylocationp);
1409
1410 if (!yymsg)
1411 yymsg = "Deleting";
1412 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1413
1414 switch (yytype)
1415 {
1416
1417 default:
1418 break;
1419 }
1420 }
1421 \f
1422
1423 /* Prevent warnings from -Wmissing-prototypes. */
1424
1425 #ifdef YYPARSE_PARAM
1426 #if defined __STDC__ || defined __cplusplus
1427 int yyparse (void *YYPARSE_PARAM);
1428 #else
1429 int yyparse ();
1430 #endif
1431 #else /* ! YYPARSE_PARAM */
1432 #if defined __STDC__ || defined __cplusplus
1433 int yyparse (void);
1434 #else
1435 int yyparse ();
1436 #endif
1437 #endif /* ! YYPARSE_PARAM */
1438
1439
1440
1441
1442
1443
1444 /*----------.
1445 | yyparse. |
1446 `----------*/
1447
1448 #ifdef YYPARSE_PARAM
1449 #if (defined __STDC__ || defined __C99__FUNC__ \
1450 || defined __cplusplus || defined _MSC_VER)
1451 int
1452 yyparse (void *YYPARSE_PARAM)
1453 #else
1454 int
1455 yyparse (YYPARSE_PARAM)
1456 void *YYPARSE_PARAM;
1457 #endif
1458 #else /* ! YYPARSE_PARAM */
1459 #if (defined __STDC__ || defined __C99__FUNC__ \
1460 || defined __cplusplus || defined _MSC_VER)
1461 int
1462 yyparse (void)
1463 #else
1464 int
1465 yyparse ()
1466
1467 #endif
1468 #endif
1469 {
1470 /* The lookahead symbol. */
1471 int yychar;
1472
1473 /* The semantic value of the lookahead symbol. */
1474 YYSTYPE yylval;
1475
1476 /* Number of syntax errors so far. */
1477 int yynerrs;
1478 /* Location data for the lookahead symbol. */
1479 YYLTYPE yylloc;
1480
1481 int yystate;
1482 int yyn;
1483 int yyresult;
1484 /* Number of tokens to shift before error messages enabled. */
1485 int yyerrstatus;
1486 /* Lookahead token as an internal (translated) token number. */
1487 int yytoken = 0;
1488 #if YYERROR_VERBOSE
1489 /* Buffer for error messages, and its allocated size. */
1490 char yymsgbuf[128];
1491 char *yymsg = yymsgbuf;
1492 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1493 #endif
1494
1495 /* Three stacks and their tools:
1496 `yyss': related to states,
1497 `yyvs': related to semantic values,
1498 `yyls': related to locations.
1499
1500 Refer to the stacks thru separate pointers, to allow yyoverflow
1501 to reallocate them elsewhere. */
1502
1503 /* The state stack. */
1504 yytype_int16 yyssa[YYINITDEPTH];
1505 yytype_int16 *yyss = yyssa;
1506 yytype_int16 *yyssp;
1507
1508 /* The semantic value stack. */
1509 YYSTYPE yyvsa[YYINITDEPTH];
1510 YYSTYPE *yyvs = yyvsa;
1511 YYSTYPE *yyvsp;
1512
1513 /* The location stack. */
1514 YYLTYPE yylsa[YYINITDEPTH];
1515 YYLTYPE *yyls = yylsa;
1516 YYLTYPE *yylsp;
1517 /* The locations where the error started and ended. */
1518 YYLTYPE yyerror_range[2];
1519
1520 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
1521
1522 YYSIZE_T yystacksize = YYINITDEPTH;
1523
1524 /* The variables used to return semantic value and location from the
1525 action routines. */
1526 YYSTYPE yyval;
1527 YYLTYPE yyloc;
1528
1529 /* The number of symbols on the RHS of the reduced rule.
1530 Keep to zero when no symbol should be popped. */
1531 int yylen = 0;
1532
1533 YYDPRINTF ((stderr, "Starting parse\n"));
1534
1535 yystate = 0;
1536 yyerrstatus = 0;
1537 yynerrs = 0;
1538 yychar = YYEMPTY; /* Cause a token to be read. */
1539
1540 /* Initialize stack pointers.
1541 Waste one element of value and location stack
1542 so that they stay on the same level as the state stack.
1543 The wasted elements are never initialized. */
1544
1545 yyssp = yyss;
1546 yyvsp = yyvs;
1547 yylsp = yyls;
1548 #if YYLTYPE_IS_TRIVIAL
1549 /* Initialize the default location before parsing starts. */
1550 yylloc.first_line = yylloc.last_line = 1;
1551 yylloc.first_column = yylloc.last_column = 0;
1552 #endif
1553
1554
1555 /* User initialization code. */
1556 #line 88 "parse-gram.y"
1557 {
1558 /* Bison's grammar can initial empty locations, hence a default
1559 location is needed. */
1560 boundary_set (&yylloc.start, current_file, 1, 0);
1561 boundary_set (&yylloc.end, current_file, 1, 0);
1562 }
1563 /* Line 1078 of yacc.c. */
1564 #line 1565 "parse-gram.c"
1565 yylsp[0] = yylloc;
1566 goto yysetstate;
1567
1568 /*------------------------------------------------------------.
1569 | yynewstate -- Push a new state, which is found in yystate. |
1570 `------------------------------------------------------------*/
1571 yynewstate:
1572 /* In all cases, when you get here, the value and location stacks
1573 have just been pushed. So pushing a state here evens the stacks. */
1574 yyssp++;
1575
1576 yysetstate:
1577 *yyssp = yystate;
1578
1579 if (yyss + yystacksize - 1 <= yyssp)
1580 {
1581 /* Get the current used size of the three stacks, in elements. */
1582 YYSIZE_T yysize = yyssp - yyss + 1;
1583
1584 #ifdef yyoverflow
1585 {
1586 /* Give user a chance to reallocate the stack. Use copies of
1587 these so that the &'s don't force the real ones into
1588 memory. */
1589 YYSTYPE *yyvs1 = yyvs;
1590 yytype_int16 *yyss1 = yyss;
1591 YYLTYPE *yyls1 = yyls;
1592
1593 /* Each stack pointer address is followed by the size of the
1594 data in use in that stack, in bytes. This used to be a
1595 conditional around just the two extra args, but that might
1596 be undefined if yyoverflow is a macro. */
1597 yyoverflow (YY_("memory exhausted"),
1598 &yyss1, yysize * sizeof (*yyssp),
1599 &yyvs1, yysize * sizeof (*yyvsp),
1600 &yyls1, yysize * sizeof (*yylsp),
1601 &yystacksize);
1602 yyls = yyls1;
1603 yyss = yyss1;
1604 yyvs = yyvs1;
1605 }
1606 #else /* no yyoverflow */
1607 # ifndef YYSTACK_RELOCATE
1608 goto yyexhaustedlab;
1609 # else
1610 /* Extend the stack our own way. */
1611 if (YYMAXDEPTH <= yystacksize)
1612 goto yyexhaustedlab;
1613 yystacksize *= 2;
1614 if (YYMAXDEPTH < yystacksize)
1615 yystacksize = YYMAXDEPTH;
1616
1617 {
1618 yytype_int16 *yyss1 = yyss;
1619 union yyalloc *yyptr =
1620 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1621 if (! yyptr)
1622 goto yyexhaustedlab;
1623 YYSTACK_RELOCATE (yyss);
1624 YYSTACK_RELOCATE (yyvs);
1625 YYSTACK_RELOCATE (yyls);
1626 # undef YYSTACK_RELOCATE
1627 if (yyss1 != yyssa)
1628 YYSTACK_FREE (yyss1);
1629 }
1630 # endif
1631 #endif /* no yyoverflow */
1632
1633 yyssp = yyss + yysize - 1;
1634 yyvsp = yyvs + yysize - 1;
1635 yylsp = yyls + yysize - 1;
1636
1637 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1638 (unsigned long int) yystacksize));
1639
1640 if (yyss + yystacksize - 1 <= yyssp)
1641 YYABORT;
1642 }
1643
1644 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1645
1646 goto yybackup;
1647
1648 /*-----------.
1649 | yybackup. |
1650 `-----------*/
1651 yybackup:
1652
1653 /* Do appropriate processing given the current state. Read a
1654 lookahead token if we need one and don't already have one. */
1655
1656 /* First try to decide what to do without reference to lookahead token. */
1657 yyn = yypact[yystate];
1658 if (yyn == YYPACT_NINF)
1659 goto yydefault;
1660
1661 /* Not known => get a lookahead token if don't already have one. */
1662
1663 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1664 if (yychar == YYEMPTY)
1665 {
1666 YYDPRINTF ((stderr, "Reading a token: "));
1667 yychar = YYLEX;
1668 }
1669
1670 if (yychar <= YYEOF)
1671 {
1672 yychar = yytoken = YYEOF;
1673 YYDPRINTF ((stderr, "Now at end of input.\n"));
1674 }
1675 else
1676 {
1677 yytoken = YYTRANSLATE (yychar);
1678 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1679 }
1680
1681 /* If the proper action on seeing token YYTOKEN is to reduce or to
1682 detect an error, take that action. */
1683 yyn += yytoken;
1684 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1685 goto yydefault;
1686 yyn = yytable[yyn];
1687 if (yyn <= 0)
1688 {
1689 if (yyn == 0 || yyn == YYTABLE_NINF)
1690 goto yyerrlab;
1691 yyn = -yyn;
1692 goto yyreduce;
1693 }
1694
1695 if (yyn == YYFINAL)
1696 YYACCEPT;
1697
1698 /* Count tokens shifted since error; after three, turn off error
1699 status. */
1700 if (yyerrstatus)
1701 yyerrstatus--;
1702
1703 /* Shift the lookahead token. */
1704 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1705
1706 /* Discard the shifted token unless it is eof. */
1707 if (yychar != YYEOF)
1708 yychar = YYEMPTY;
1709
1710 yystate = yyn;
1711 *++yyvsp = yylval;
1712 *++yylsp = yylloc;
1713 goto yynewstate;
1714
1715
1716 /*-----------------------------------------------------------.
1717 | yydefault -- do the default action for the current state. |
1718 `-----------------------------------------------------------*/
1719 yydefault:
1720 yyn = yydefact[yystate];
1721 if (yyn == 0)
1722 goto yyerrlab;
1723 goto yyreduce;
1724
1725
1726 /*-----------------------------.
1727 | yyreduce -- Do a reduction. |
1728 `-----------------------------*/
1729 yyreduce:
1730 /* yyn is the number of a rule to reduce with. */
1731 yylen = yyr2[yyn];
1732
1733 /* If YYLEN is nonzero, implement the default value of the action:
1734 `$$ = $1'.
1735
1736 Otherwise, the following line sets YYVAL to garbage.
1737 This behavior is undocumented and Bison
1738 users should not rely upon it. Assigning to YYVAL
1739 unconditionally makes the parser a bit smaller, and it avoids a
1740 GCC warning that YYVAL may be used uninitialized. */
1741 yyval = yyvsp[1-yylen];
1742
1743 /* Default location. */
1744 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
1745 YY_REDUCE_PRINT (yyn);
1746 switch (yyn)
1747 {
1748 case 6:
1749 #line 213 "parse-gram.y"
1750 { prologue_augment (translate_code ((yyvsp[(1) - (1)].chars), (yylsp[(1) - (1)])),
1751 (yylsp[(1) - (1)])); }
1752 break;
1753
1754 case 7:
1755 #line 215 "parse-gram.y"
1756 { debug_flag = true; }
1757 break;
1758
1759 case 8:
1760 #line 217 "parse-gram.y"
1761 {
1762 static char one[] = "1";
1763 muscle_insert ((yyvsp[(2) - (2)].chars), one);
1764 }
1765 break;
1766
1767 case 9:
1768 #line 221 "parse-gram.y"
1769 { muscle_insert ((yyvsp[(2) - (3)].chars), (yyvsp[(3) - (3)].chars)); }
1770 break;
1771
1772 case 10:
1773 #line 222 "parse-gram.y"
1774 { defines_flag = true; }
1775 break;
1776
1777 case 11:
1778 #line 223 "parse-gram.y"
1779 { error_verbose = true; }
1780 break;
1781
1782 case 12:
1783 #line 224 "parse-gram.y"
1784 { expected_sr_conflicts = (yyvsp[(2) - (2)].integer); }
1785 break;
1786
1787 case 13:
1788 #line 225 "parse-gram.y"
1789 { expected_rr_conflicts = (yyvsp[(2) - (2)].integer); }
1790 break;
1791
1792 case 14:
1793 #line 226 "parse-gram.y"
1794 { spec_file_prefix = (yyvsp[(3) - (3)].chars); }
1795 break;
1796
1797 case 15:
1798 #line 228 "parse-gram.y"
1799 {
1800 nondeterministic_parser = true;
1801 glr_parser = true;
1802 }
1803 break;
1804
1805 case 16:
1806 #line 233 "parse-gram.y"
1807 {
1808 muscle_code_grow ("initial_action", translate_symbol_action ((yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])), (yylsp[(2) - (2)]));
1809 }
1810 break;
1811
1812 case 17:
1813 #line 236 "parse-gram.y"
1814 { add_param ("lex_param", (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])); }
1815 break;
1816
1817 case 18:
1818 #line 237 "parse-gram.y"
1819 { locations_flag = true; }
1820 break;
1821
1822 case 19:
1823 #line 238 "parse-gram.y"
1824 { spec_name_prefix = (yyvsp[(3) - (3)].chars); }
1825 break;
1826
1827 case 20:
1828 #line 239 "parse-gram.y"
1829 { no_lines_flag = true; }
1830 break;
1831
1832 case 21:
1833 #line 240 "parse-gram.y"
1834 { nondeterministic_parser = true; }
1835 break;
1836
1837 case 22:
1838 #line 241 "parse-gram.y"
1839 { spec_outfile = (yyvsp[(3) - (3)].chars); }
1840 break;
1841
1842 case 23:
1843 #line 242 "parse-gram.y"
1844 { add_param ("parse_param", (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])); }
1845 break;
1846
1847 case 24:
1848 #line 243 "parse-gram.y"
1849 { pure_parser = true; }
1850 break;
1851
1852 case 25:
1853 #line 244 "parse-gram.y"
1854 { version_check (&(yylsp[(2) - (2)]), (yyvsp[(2) - (2)].chars)); }
1855 break;
1856
1857 case 26:
1858 #line 245 "parse-gram.y"
1859 { skeleton = (yyvsp[(2) - (2)].chars); }
1860 break;
1861
1862 case 27:
1863 #line 246 "parse-gram.y"
1864 { token_table_flag = true; }
1865 break;
1866
1867 case 28:
1868 #line 247 "parse-gram.y"
1869 { report_flag = report_states; }
1870 break;
1871
1872 case 29:
1873 #line 248 "parse-gram.y"
1874 { yacc_flag = true; }
1875 break;
1876
1877 case 33:
1878 #line 256 "parse-gram.y"
1879 {
1880 grammar_start_symbol_set ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]));
1881 }
1882 break;
1883
1884 case 34:
1885 #line 260 "parse-gram.y"
1886 {
1887 symbol_list *list;
1888 const char *action = translate_symbol_action ((yyvsp[(2) - (3)].chars), (yylsp[(2) - (3)]));
1889 for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
1890 symbol_destructor_set (list->sym, action, (yylsp[(2) - (3)]));
1891 symbol_list_free ((yyvsp[(3) - (3)].list));
1892 }
1893 break;
1894
1895 case 35:
1896 #line 268 "parse-gram.y"
1897 {
1898 symbol_list *list;
1899 const char *action = translate_symbol_action ((yyvsp[(2) - (3)].chars), (yylsp[(2) - (3)]));
1900 for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
1901 symbol_printer_set (list->sym, action, (yylsp[(2) - (3)]));
1902 symbol_list_free ((yyvsp[(3) - (3)].list));
1903 }
1904 break;
1905
1906 case 36:
1907 #line 276 "parse-gram.y"
1908 {
1909 default_prec = true;
1910 }
1911 break;
1912
1913 case 37:
1914 #line 280 "parse-gram.y"
1915 {
1916 default_prec = false;
1917 }
1918 break;
1919
1920 case 38:
1921 #line 293 "parse-gram.y"
1922 {}
1923 break;
1924
1925 case 39:
1926 #line 294 "parse-gram.y"
1927 { muscle_code_grow ("union_name", (yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
1928 break;
1929
1930 case 40:
1931 #line 299 "parse-gram.y"
1932 {
1933 char const *body = (yyvsp[(3) - (3)].chars);
1934
1935 if (typed)
1936 {
1937 /* Concatenate the union bodies, turning the first one's
1938 trailing '}' into '\n', and omitting the second one's '{'. */
1939 char *code = muscle_find ("stype");
1940 code[strlen (code) - 1] = '\n';
1941 body++;
1942 }
1943
1944 typed = true;
1945 muscle_code_grow ("stype", body, (yylsp[(3) - (3)]));
1946 }
1947 break;
1948
1949 case 41:
1950 #line 320 "parse-gram.y"
1951 { current_class = nterm_sym; }
1952 break;
1953
1954 case 42:
1955 #line 321 "parse-gram.y"
1956 {
1957 current_class = unknown_sym;
1958 current_type = NULL;
1959 }
1960 break;
1961
1962 case 43:
1963 #line 325 "parse-gram.y"
1964 { current_class = token_sym; }
1965 break;
1966
1967 case 44:
1968 #line 326 "parse-gram.y"
1969 {
1970 current_class = unknown_sym;
1971 current_type = NULL;
1972 }
1973 break;
1974
1975 case 45:
1976 #line 331 "parse-gram.y"
1977 {
1978 symbol_list *list;
1979 for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
1980 symbol_type_set (list->sym, (yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]));
1981 symbol_list_free ((yyvsp[(3) - (3)].list));
1982 }
1983 break;
1984
1985 case 46:
1986 #line 341 "parse-gram.y"
1987 {
1988 symbol_list *list;
1989 ++current_prec;
1990 for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
1991 {
1992 symbol_type_set (list->sym, current_type, (yylsp[(2) - (3)]));
1993 symbol_precedence_set (list->sym, current_prec, (yyvsp[(1) - (3)].assoc), (yylsp[(1) - (3)]));
1994 }
1995 symbol_list_free ((yyvsp[(3) - (3)].list));
1996 current_type = NULL;
1997 }
1998 break;
1999
2000 case 47:
2001 #line 355 "parse-gram.y"
2002 { (yyval.assoc) = left_assoc; }
2003 break;
2004
2005 case 48:
2006 #line 356 "parse-gram.y"
2007 { (yyval.assoc) = right_assoc; }
2008 break;
2009
2010 case 49:
2011 #line 357 "parse-gram.y"
2012 { (yyval.assoc) = non_assoc; }
2013 break;
2014
2015 case 50:
2016 #line 361 "parse-gram.y"
2017 { current_type = NULL; }
2018 break;
2019
2020 case 51:
2021 #line 362 "parse-gram.y"
2022 { current_type = (yyvsp[(1) - (1)].uniqstr); }
2023 break;
2024
2025 case 52:
2026 #line 367 "parse-gram.y"
2027 { (yyval.list) = symbol_list_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
2028 break;
2029
2030 case 53:
2031 #line 368 "parse-gram.y"
2032 { (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)])); }
2033 break;
2034
2035 case 54:
2036 #line 374 "parse-gram.y"
2037 {
2038 current_type = (yyvsp[(1) - (1)].uniqstr);
2039 }
2040 break;
2041
2042 case 55:
2043 #line 378 "parse-gram.y"
2044 {
2045 symbol_class_set ((yyvsp[(1) - (1)].symbol), current_class, (yylsp[(1) - (1)]), true);
2046 symbol_type_set ((yyvsp[(1) - (1)].symbol), current_type, (yylsp[(1) - (1)]));
2047 }
2048 break;
2049
2050 case 56:
2051 #line 383 "parse-gram.y"
2052 {
2053 symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true);
2054 symbol_type_set ((yyvsp[(1) - (2)].symbol), current_type, (yylsp[(1) - (2)]));
2055 symbol_user_token_number_set ((yyvsp[(1) - (2)].symbol), (yyvsp[(2) - (2)].integer), (yylsp[(2) - (2)]));
2056 }
2057 break;
2058
2059 case 57:
2060 #line 389 "parse-gram.y"
2061 {
2062 symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true);
2063 symbol_type_set ((yyvsp[(1) - (2)].symbol), current_type, (yylsp[(1) - (2)]));
2064 symbol_make_alias ((yyvsp[(1) - (2)].symbol), (yyvsp[(2) - (2)].symbol), (yyloc));
2065 }
2066 break;
2067
2068 case 58:
2069 #line 395 "parse-gram.y"
2070 {
2071 symbol_class_set ((yyvsp[(1) - (3)].symbol), current_class, (yylsp[(1) - (3)]), true);
2072 symbol_type_set ((yyvsp[(1) - (3)].symbol), current_type, (yylsp[(1) - (3)]));
2073 symbol_user_token_number_set ((yyvsp[(1) - (3)].symbol), (yyvsp[(2) - (3)].integer), (yylsp[(2) - (3)]));
2074 symbol_make_alias ((yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol), (yyloc));
2075 }
2076 break;
2077
2078 case 65:
2079 #line 425 "parse-gram.y"
2080 {
2081 yyerrok;
2082 }
2083 break;
2084
2085 case 66:
2086 #line 431 "parse-gram.y"
2087 { current_lhs = (yyvsp[(1) - (1)].symbol); current_lhs_location = (yylsp[(1) - (1)]); }
2088 break;
2089
2090 case 68:
2091 #line 435 "parse-gram.y"
2092 { grammar_current_rule_end ((yylsp[(1) - (1)])); }
2093 break;
2094
2095 case 69:
2096 #line 436 "parse-gram.y"
2097 { grammar_current_rule_end ((yylsp[(3) - (3)])); }
2098 break;
2099
2100 case 71:
2101 #line 442 "parse-gram.y"
2102 { grammar_current_rule_begin (current_lhs, current_lhs_location); }
2103 break;
2104
2105 case 72:
2106 #line 444 "parse-gram.y"
2107 { grammar_current_rule_symbol_append ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)])); }
2108 break;
2109
2110 case 73:
2111 #line 446 "parse-gram.y"
2112 { grammar_current_rule_action_append (gram_last_string,
2113 gram_last_braced_code_loc); }
2114 break;
2115
2116 case 74:
2117 #line 449 "parse-gram.y"
2118 { grammar_current_rule_prec_set ((yyvsp[(3) - (3)].symbol), (yylsp[(3) - (3)])); }
2119 break;
2120
2121 case 75:
2122 #line 451 "parse-gram.y"
2123 { grammar_current_rule_dprec_set ((yyvsp[(3) - (3)].integer), (yylsp[(3) - (3)])); }
2124 break;
2125
2126 case 76:
2127 #line 453 "parse-gram.y"
2128 { grammar_current_rule_merge_set ((yyvsp[(3) - (3)].uniqstr), (yylsp[(3) - (3)])); }
2129 break;
2130
2131 case 77:
2132 #line 466 "parse-gram.y"
2133 { (yyval.symbol) = symbol_get ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
2134 break;
2135
2136 case 78:
2137 #line 468 "parse-gram.y"
2138 {
2139 (yyval.symbol) = symbol_get (char_name ((yyvsp[(1) - (1)].character)), (yylsp[(1) - (1)]));
2140 symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false);
2141 symbol_user_token_number_set ((yyval.symbol), (yyvsp[(1) - (1)].character), (yylsp[(1) - (1)]));
2142 }
2143 break;
2144
2145 case 79:
2146 #line 476 "parse-gram.y"
2147 { (yyval.symbol) = symbol_get ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
2148 break;
2149
2150 case 82:
2151 #line 488 "parse-gram.y"
2152 {
2153 (yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[(1) - (1)].chars)), (yylsp[(1) - (1)]));
2154 symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false);
2155 }
2156 break;
2157
2158 case 83:
2159 #line 497 "parse-gram.y"
2160 { (yyval.chars) = (yyvsp[(1) - (1)].chars); }
2161 break;
2162
2163 case 85:
2164 #line 504 "parse-gram.y"
2165 {
2166 muscle_code_grow ("epilogue", translate_code ((yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])), (yylsp[(2) - (2)]));
2167 gram_scanner_last_string_free ();
2168 }
2169 break;
2170
2171
2172 /* Line 1267 of yacc.c. */
2173 #line 2174 "parse-gram.c"
2174 default: break;
2175 }
2176 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
2177
2178 YYPOPSTACK (yylen);
2179 yylen = 0;
2180 YY_STACK_PRINT (yyss, yyssp);
2181
2182 *++yyvsp = yyval;
2183 *++yylsp = yyloc;
2184
2185 /* Now `shift' the result of the reduction. Determine what state
2186 that goes to, based on the state we popped back to and the rule
2187 number reduced by. */
2188
2189 yyn = yyr1[yyn];
2190
2191 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
2192 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
2193 yystate = yytable[yystate];
2194 else
2195 yystate = yydefgoto[yyn - YYNTOKENS];
2196
2197 goto yynewstate;
2198
2199
2200 /*------------------------------------.
2201 | yyerrlab -- here on detecting error |
2202 `------------------------------------*/
2203 yyerrlab:
2204 /* If not already recovering from an error, report this error. */
2205 if (!yyerrstatus)
2206 {
2207 ++yynerrs;
2208 #if ! YYERROR_VERBOSE
2209 yyerror (YY_("syntax error"));
2210 #else
2211 {
2212 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
2213 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
2214 {
2215 YYSIZE_T yyalloc = 2 * yysize;
2216 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
2217 yyalloc = YYSTACK_ALLOC_MAXIMUM;
2218 if (yymsg != yymsgbuf)
2219 YYSTACK_FREE (yymsg);
2220 yymsg = (char *) YYSTACK_ALLOC (yyalloc);
2221 if (yymsg)
2222 yymsg_alloc = yyalloc;
2223 else
2224 {
2225 yymsg = yymsgbuf;
2226 yymsg_alloc = sizeof yymsgbuf;
2227 }
2228 }
2229
2230 if (0 < yysize && yysize <= yymsg_alloc)
2231 {
2232 (void) yysyntax_error (yymsg, yystate, yychar);
2233 yyerror (yymsg);
2234 }
2235 else
2236 {
2237 yyerror (YY_("syntax error"));
2238 if (yysize != 0)
2239 goto yyexhaustedlab;
2240 }
2241 }
2242 #endif
2243 }
2244
2245 yyerror_range[0] = yylloc;
2246
2247 if (yyerrstatus == 3)
2248 {
2249 /* If just tried and failed to reuse lookahead token after an
2250 error, discard it. */
2251
2252 if (yychar <= YYEOF)
2253 {
2254 /* Return failure if at end of input. */
2255 if (yychar == YYEOF)
2256 YYABORT;
2257 }
2258 else
2259 {
2260 yydestruct ("Error: discarding",
2261 yytoken, &yylval, &yylloc);
2262 yychar = YYEMPTY;
2263 }
2264 }
2265
2266 /* Else will try to reuse lookahead token after shifting the error
2267 token. */
2268 goto yyerrlab1;
2269
2270
2271 /*---------------------------------------------------.
2272 | yyerrorlab -- error raised explicitly by YYERROR. |
2273 `---------------------------------------------------*/
2274 yyerrorlab:
2275
2276 /* Pacify compilers like GCC when the user code never invokes
2277 YYERROR and the label yyerrorlab therefore never appears in user
2278 code. */
2279 if (/*CONSTCOND*/ 0)
2280 goto yyerrorlab;
2281
2282 yyerror_range[0] = yylsp[1-yylen];
2283 /* Do not reclaim the symbols of the rule which action triggered
2284 this YYERROR. */
2285 YYPOPSTACK (yylen);
2286 yylen = 0;
2287 YY_STACK_PRINT (yyss, yyssp);
2288 yystate = *yyssp;
2289 goto yyerrlab1;
2290
2291
2292 /*-------------------------------------------------------------.
2293 | yyerrlab1 -- common code for both syntax error and YYERROR. |
2294 `-------------------------------------------------------------*/
2295 yyerrlab1:
2296 yyerrstatus = 3; /* Each real token shifted decrements this. */
2297
2298 for (;;)
2299 {
2300 yyn = yypact[yystate];
2301 if (yyn != YYPACT_NINF)
2302 {
2303 yyn += YYTERROR;
2304 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2305 {
2306 yyn = yytable[yyn];
2307 if (0 < yyn)
2308 break;
2309 }
2310 }
2311
2312 /* Pop the current state because it cannot handle the error token. */
2313 if (yyssp == yyss)
2314 YYABORT;
2315
2316 yyerror_range[0] = *yylsp;
2317 yydestruct ("Error: popping",
2318 yystos[yystate], yyvsp, yylsp);
2319 YYPOPSTACK (1);
2320 yystate = *yyssp;
2321 YY_STACK_PRINT (yyss, yyssp);
2322 }
2323
2324 if (yyn == YYFINAL)
2325 YYACCEPT;
2326
2327 *++yyvsp = yylval;
2328
2329 yyerror_range[1] = yylloc;
2330 /* Using YYLLOC is tempting, but would change the location of
2331 the lookahead. YYLOC is available though. */
2332 YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
2333 *++yylsp = yyloc;
2334
2335 /* Shift the error token. */
2336 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
2337
2338 yystate = yyn;
2339 goto yynewstate;
2340
2341
2342 /*-------------------------------------.
2343 | yyacceptlab -- YYACCEPT comes here. |
2344 `-------------------------------------*/
2345 yyacceptlab:
2346 yyresult = 0;
2347 goto yyreturn;
2348
2349 /*-----------------------------------.
2350 | yyabortlab -- YYABORT comes here. |
2351 `-----------------------------------*/
2352 yyabortlab:
2353 yyresult = 1;
2354 goto yyreturn;
2355
2356 #ifndef yyoverflow
2357 /*-------------------------------------------------.
2358 | yyexhaustedlab -- memory exhaustion comes here. |
2359 `-------------------------------------------------*/
2360 yyexhaustedlab:
2361 yyerror (YY_("memory exhausted"));
2362 yyresult = 2;
2363 /* Fall through. */
2364 #endif
2365
2366 yyreturn:
2367 if (yychar != YYEOF && yychar != YYEMPTY)
2368 yydestruct ("Cleanup: discarding lookahead",
2369 yytoken, &yylval, &yylloc);
2370 /* Do not reclaim the symbols of the rule which action triggered
2371 this YYABORT or YYACCEPT. */
2372 YYPOPSTACK (yylen);
2373 YY_STACK_PRINT (yyss, yyssp);
2374 while (yyssp != yyss)
2375 {
2376 yydestruct ("Cleanup: popping",
2377 yystos[*yyssp], yyvsp, yylsp);
2378 YYPOPSTACK (1);
2379 }
2380 #ifndef yyoverflow
2381 if (yyss != yyssa)
2382 YYSTACK_FREE (yyss);
2383 #endif
2384 #if YYERROR_VERBOSE
2385 if (yymsg != yymsgbuf)
2386 YYSTACK_FREE (yymsg);
2387 #endif
2388 /* Make sure YYID is used. */
2389 return YYID (yyresult);
2390 }
2391
2392
2393 #line 510 "parse-gram.y"
2394
2395
2396
2397 /* Return the location of the left-hand side of a rule whose
2398 right-hand side is RHS[1] ... RHS[N]. Ignore empty nonterminals in
2399 the right-hand side, and return an empty location equal to the end
2400 boundary of RHS[0] if the right-hand side is empty. */
2401
2402 static YYLTYPE
2403 lloc_default (YYLTYPE const *rhs, int n)
2404 {
2405 int i;
2406 YYLTYPE loc;
2407
2408 /* SGI MIPSpro 7.4.1m miscompiles "loc.start = loc.end = rhs[n].end;".
2409 The bug is fixed in 7.4.2m, but play it safe for now. */
2410 loc.start = rhs[n].end;
2411 loc.end = rhs[n].end;
2412
2413 /* Ignore empty nonterminals the start of the the right-hand side.
2414 Do not bother to ignore them at the end of the right-hand side,
2415 since empty nonterminals have the same end as their predecessors. */
2416 for (i = 1; i <= n; i++)
2417 if (! equal_boundaries (rhs[i].start, rhs[i].end))
2418 {
2419 loc.start = rhs[i].start;
2420 break;
2421 }
2422
2423 return loc;
2424 }
2425
2426
2427 /* Add a lex-param or a parse-param (depending on TYPE) with
2428 declaration DECL and location LOC. */
2429
2430 static void
2431 add_param (char const *type, char *decl, location loc)
2432 {
2433 static char const alphanum[26 + 26 + 1 + 10] =
2434 "abcdefghijklmnopqrstuvwxyz"
2435 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
2436 "_"
2437 "0123456789";
2438 char const *name_start = NULL;
2439 char *p;
2440
2441 /* Stop on last actual character. */
2442 for (p = decl; p[1]; p++)
2443 if ((p == decl
2444 || ! memchr (alphanum, p[-1], sizeof alphanum))
2445 && memchr (alphanum, p[0], sizeof alphanum - 10))
2446 name_start = p;
2447
2448 /* Strip the surrounding '{' and '}', and any blanks just inside
2449 the braces. */
2450 while (*--p == ' ' || *p == '\t')
2451 continue;
2452 p[1] = '\0';
2453 while (*++decl == ' ' || *decl == '\t')
2454 continue;
2455
2456 if (! name_start)
2457 complain_at (loc, _("missing identifier in parameter declaration"));
2458 else
2459 {
2460 char *name;
2461 size_t name_len;
2462
2463 for (name_len = 1;
2464 memchr (alphanum, name_start[name_len], sizeof alphanum);
2465 name_len++)
2466 continue;
2467
2468 name = xmalloc (name_len + 1);
2469 memcpy (name, name_start, name_len);
2470 name[name_len] = '\0';
2471 muscle_pair_list_grow (type, decl, name);
2472 free (name);
2473 }
2474
2475 gram_scanner_last_string_free ();
2476 }
2477
2478 static void
2479 version_check (location const *loc, char const *version)
2480 {
2481 if (strverscmp (version, PACKAGE_VERSION) > 0)
2482 {
2483 complain_at (*loc, "require bison %s, but have %s",
2484 version, PACKAGE_VERSION);
2485 exit (63);
2486 }
2487 }
2488
2489 static void
2490 gram_error (location const *loc, char const *msg)
2491 {
2492 complain_at (*loc, "%s", msg);
2493 }
2494
2495 char const *
2496 token_name (int type)
2497 {
2498 return yytname[YYTRANSLATE (type)];
2499 }
2500
2501 static char const *
2502 char_name (char c)
2503 {
2504 if (c == '\'')
2505 return "'\\''";
2506 else
2507 {
2508 char buf[4];
2509 buf[0] = '\''; buf[1] = c; buf[2] = '\''; buf[3] = '\0';
2510 return quotearg_style (escape_quoting_style, buf);
2511 }
2512 }
2513