]> git.saurik.com Git - bison.git/blob - src/parse-gram.c
Merge remote-tracking branch 'origin/maint'
[bison.git] / src / parse-gram.c
1 /* A Bison parser, made by GNU Bison 2.7.1164-a174b-dirty. */
2
3 /* Bison implementation for Yacc-like parsers in C
4
5 Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
6
7 This program is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 /* As a special exception, you may create a larger work that contains
21 part or all of the Bison parser skeleton and distribute that work
22 under terms of your choice, so long as that work isn't itself a
23 parser generator using the skeleton or a modified version thereof
24 as a parser skeleton. Alternatively, if you modify or redistribute
25 the parser skeleton itself, you may (at your option) remove this
26 special exception, which will cause the skeleton and the resulting
27 Bison output files to be licensed under the GNU General Public
28 License without this special exception.
29
30 This special exception was added by the Free Software Foundation in
31 version 2.2 of Bison. */
32
33 /* C LALR(1) parser skeleton written by Richard Stallman, by
34 simplifying the original so-called "semantic" parser. */
35
36 /* All symbols defined below should begin with yy or YY, to avoid
37 infringing on user name space. This should be done even for local
38 variables, as they might otherwise be expanded by user macros.
39 There are some unavoidable exceptions within include files to
40 define necessary library symbols; they are noted "INFRINGES ON
41 USER NAME SPACE" below. */
42
43 /* Identify Bison output. */
44 #define YYBISON 1
45
46 /* Bison version. */
47 #define YYBISON_VERSION "2.7.1164-a174b-dirty"
48
49 /* Skeleton name. */
50 #define YYSKELETON_NAME "yacc.c"
51
52 /* Pure parsers. */
53 #define YYPURE 2
54
55 /* Push parsers. */
56 #define YYPUSH 0
57
58 /* Pull parsers. */
59 #define YYPULL 1
60
61 /* Substitute the type names. */
62 #define YYSTYPE GRAM_STYPE
63 #define YYLTYPE GRAM_LTYPE
64 /* Substitute the variable and function names. */
65 #define yyparse gram_parse
66 #define yylex gram_lex
67 #define yyerror gram_error
68 #define yydebug gram_debug
69 #define yynerrs gram_nerrs
70
71
72 /* Copy the first part of user declarations. */
73
74 #line 75 "src/parse-gram.c" /* yacc.c:356 */
75
76 # ifndef YY_NULL
77 # if defined __cplusplus && 201103L <= __cplusplus
78 # define YY_NULL nullptr
79 # else
80 # define YY_NULL 0
81 # endif
82 # endif
83
84 /* Enabling verbose error messages. */
85 #ifdef YYERROR_VERBOSE
86 # undef YYERROR_VERBOSE
87 # define YYERROR_VERBOSE 1
88 #else
89 # define YYERROR_VERBOSE 1
90 #endif
91
92 /* In a future release of Bison, this section will be replaced
93 by #include "src/parse-gram.h". */
94 #ifndef YY_GRAM_SRC_PARSE_GRAM_H_INCLUDED
95 # define YY_GRAM_SRC_PARSE_GRAM_H_INCLUDED
96 /* Debug traces. */
97 #ifndef GRAM_DEBUG
98 # if defined YYDEBUG
99 #if YYDEBUG
100 # define GRAM_DEBUG 1
101 # else
102 # define GRAM_DEBUG 0
103 # endif
104 # else /* ! defined YYDEBUG */
105 # define GRAM_DEBUG 1
106 # endif /* ! defined YYDEBUG */
107 #endif /* ! defined GRAM_DEBUG */
108 #if GRAM_DEBUG
109 extern int gram_debug;
110 #endif
111 /* "%code requires" blocks. */
112 #line 21 "src/parse-gram.y" /* yacc.c:372 */
113
114 #include "symlist.h"
115 #include "symtab.h"
116 #line 216 "src/parse-gram.y" /* yacc.c:372 */
117
118 typedef enum
119 {
120 param_none = 0,
121 param_lex = 1 << 0,
122 param_parse = 1 << 1,
123 param_both = param_lex | param_parse
124 } param_type;
125 #line 640 "src/parse-gram.y" /* yacc.c:372 */
126 #include "muscle-tab.h"
127
128 #line 129 "src/parse-gram.c" /* yacc.c:372 */
129
130 /* Token type. */
131 #ifndef GRAM_TOKENTYPE
132 # define GRAM_TOKENTYPE
133 enum gram_tokentype
134 {
135 GRAM_EOF = 0,
136 STRING = 258,
137 PERCENT_TOKEN = 259,
138 PERCENT_NTERM = 260,
139 PERCENT_TYPE = 261,
140 PERCENT_DESTRUCTOR = 262,
141 PERCENT_PRINTER = 263,
142 PERCENT_LEFT = 264,
143 PERCENT_RIGHT = 265,
144 PERCENT_NONASSOC = 266,
145 PERCENT_PRECEDENCE = 267,
146 PERCENT_PREC = 268,
147 PERCENT_DPREC = 269,
148 PERCENT_MERGE = 270,
149 PERCENT_CODE = 271,
150 PERCENT_DEFAULT_PREC = 272,
151 PERCENT_DEFINE = 273,
152 PERCENT_DEFINES = 274,
153 PERCENT_ERROR_VERBOSE = 275,
154 PERCENT_EXPECT = 276,
155 PERCENT_EXPECT_RR = 277,
156 PERCENT_FLAG = 278,
157 PERCENT_FILE_PREFIX = 279,
158 PERCENT_GLR_PARSER = 280,
159 PERCENT_INITIAL_ACTION = 281,
160 PERCENT_LANGUAGE = 282,
161 PERCENT_NAME_PREFIX = 283,
162 PERCENT_NO_DEFAULT_PREC = 284,
163 PERCENT_NO_LINES = 285,
164 PERCENT_NONDETERMINISTIC_PARSER = 286,
165 PERCENT_OUTPUT = 287,
166 PERCENT_REQUIRE = 288,
167 PERCENT_SKELETON = 289,
168 PERCENT_START = 290,
169 PERCENT_TOKEN_TABLE = 291,
170 PERCENT_VERBOSE = 292,
171 PERCENT_YACC = 293,
172 BRACED_CODE = 294,
173 BRACED_PREDICATE = 295,
174 BRACKETED_ID = 296,
175 CHAR = 297,
176 EPILOGUE = 298,
177 EQUAL = 299,
178 ID = 300,
179 ID_COLON = 301,
180 PERCENT_PERCENT = 302,
181 PIPE = 303,
182 PROLOGUE = 304,
183 SEMICOLON = 305,
184 TAG = 306,
185 TAG_ANY = 307,
186 TAG_NONE = 308,
187 INT = 309,
188 PERCENT_PARAM = 310,
189 PERCENT_UNION = 311,
190 PERCENT_EMPTY = 312
191 };
192 #endif
193
194 /* Value type. */
195 #if ! defined GRAM_STYPE && ! defined GRAM_STYPE_IS_DECLARED
196 typedef union GRAM_STYPE GRAM_STYPE;
197 union GRAM_STYPE
198 {
199 #line 177 "src/parse-gram.y" /* yacc.c:372 */
200 unsigned char character;
201 #line 181 "src/parse-gram.y" /* yacc.c:372 */
202 char *code;
203 #line 186 "src/parse-gram.y" /* yacc.c:372 */
204 uniqstr uniqstr;
205 #line 194 "src/parse-gram.y" /* yacc.c:372 */
206 int integer;
207 #line 198 "src/parse-gram.y" /* yacc.c:372 */
208 symbol *symbol;
209 #line 203 "src/parse-gram.y" /* yacc.c:372 */
210 assoc assoc;
211 #line 206 "src/parse-gram.y" /* yacc.c:372 */
212 symbol_list *list;
213 #line 209 "src/parse-gram.y" /* yacc.c:372 */
214 named_ref *named_ref;
215 #line 236 "src/parse-gram.y" /* yacc.c:372 */
216 param_type param;
217 #line 404 "src/parse-gram.y" /* yacc.c:372 */
218 code_props_type code_type;
219 #line 642 "src/parse-gram.y" /* yacc.c:372 */
220
221 struct
222 {
223 char const *chars;
224 muscle_kind kind;
225 } value;
226
227 #line 228 "src/parse-gram.c" /* yacc.c:372 */
228 };
229 # define GRAM_STYPE_IS_TRIVIAL 1
230 # define GRAM_STYPE_IS_DECLARED 1
231 #endif
232
233 /* Location type. */
234 #if ! defined GRAM_LTYPE && ! defined GRAM_LTYPE_IS_DECLARED
235 typedef struct GRAM_LTYPE GRAM_LTYPE;
236 struct GRAM_LTYPE
237 {
238 int first_line;
239 int first_column;
240 int last_line;
241 int last_column;
242 };
243 # define GRAM_LTYPE_IS_DECLARED 1
244 # define GRAM_LTYPE_IS_TRIVIAL 1
245 #endif
246
247
248
249 int gram_parse (void);
250
251 #endif /* !YY_GRAM_SRC_PARSE_GRAM_H_INCLUDED */
252
253 /* Copy the second part of user declarations. */
254
255 #line 256 "src/parse-gram.c" /* yacc.c:375 */
256 /* Unqualified %code blocks. */
257 #line 27 "src/parse-gram.y" /* yacc.c:376 */
258
259 #include <config.h>
260 #include "system.h"
261
262 #include "c-ctype.h"
263 #include "complain.h"
264 #include "conflicts.h"
265 #include "files.h"
266 #include "getargs.h"
267 #include "gram.h"
268 #include "named-ref.h"
269 #include "quotearg.h"
270 #include "reader.h"
271 #include "scan-gram.h"
272 #include "scan-code.h"
273 #include "xmemdup0.h"
274
275 static int current_prec = 0;
276 static location current_lhs_location;
277 static named_ref *current_lhs_named_ref;
278 static symbol *current_lhs_symbol;
279 static symbol_class current_class = unknown_sym;
280 static uniqstr current_type = NULL;
281
282 /** Set the new current left-hand side symbol, possibly common
283 * to several right-hand side parts of rule.
284 */
285 static void current_lhs (symbol *sym, location loc, named_ref *ref);
286
287 #define YYLLOC_DEFAULT(Current, Rhs, N) \
288 (Current) = lloc_default (Rhs, N)
289 static YYLTYPE lloc_default (YYLTYPE const *, int);
290
291 #define YY_LOCATION_PRINT(File, Loc) \
292 location_print (Loc, File)
293
294 /* Strip initial '{' and final '}' (must be first and last characters).
295 Return the result. */
296 static char *strip_braces (char *code);
297
298 /* Convert CODE by calling code_props_plain_init if PLAIN, otherwise
299 code_props_symbol_action_init. Call
300 gram_scanner_last_string_free to release the latest string from
301 the scanner (should be CODE). */
302 static char const *translate_code (char *code, location loc, bool plain);
303
304 /* Convert CODE by calling code_props_plain_init after having
305 stripped the first and last characters (expected to be '{', and
306 '}'). Call gram_scanner_last_string_free to release the latest
307 string from the scanner (should be CODE). */
308 static char const *translate_code_braceless (char *code, location loc);
309
310 static void version_check (location const *loc, char const *version);
311
312 static void gram_error (location const *, char const *);
313
314 /* A string that describes a char (e.g., 'a' -> "'a'"). */
315 static char const *char_name (char);
316
317 #define YYTYPE_INT16 int_fast16_t
318 #define YYTYPE_INT8 int_fast8_t
319 #define YYTYPE_UINT16 uint_fast16_t
320 #define YYTYPE_UINT8 uint_fast8_t
321 #line 226 "src/parse-gram.y" /* yacc.c:376 */
322
323 /** Add a lex-param and/or a parse-param.
324 *
325 * \param type where to push this formal argument.
326 * \param decl the formal argument. Destroyed.
327 * \param loc the location in the source.
328 */
329 static void add_param (param_type type, char *decl, location loc);
330 static param_type current_param = param_none;
331
332 #line 333 "src/parse-gram.c" /* yacc.c:376 */
333
334 #ifdef short
335 # undef short
336 #endif
337
338 #ifdef YYTYPE_UINT8
339 typedef YYTYPE_UINT8 yytype_uint8;
340 #else
341 typedef unsigned char yytype_uint8;
342 #endif
343
344 #ifdef YYTYPE_INT8
345 typedef YYTYPE_INT8 yytype_int8;
346 #else
347 typedef signed char yytype_int8;
348 #endif
349
350 #ifdef YYTYPE_UINT16
351 typedef YYTYPE_UINT16 yytype_uint16;
352 #else
353 typedef unsigned short int yytype_uint16;
354 #endif
355
356 #ifdef YYTYPE_INT16
357 typedef YYTYPE_INT16 yytype_int16;
358 #else
359 typedef short int yytype_int16;
360 #endif
361
362 #ifndef YYSIZE_T
363 # ifdef __SIZE_TYPE__
364 # define YYSIZE_T __SIZE_TYPE__
365 # elif defined size_t
366 # define YYSIZE_T size_t
367 # elif ! defined YYSIZE_T
368 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
369 # define YYSIZE_T size_t
370 # else
371 # define YYSIZE_T unsigned int
372 # endif
373 #endif
374
375 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
376
377 #ifndef YY_
378 # if defined YYENABLE_NLS && YYENABLE_NLS
379 # if ENABLE_NLS
380 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
381 # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
382 # endif
383 # endif
384 # ifndef YY_
385 # define YY_(Msgid) Msgid
386 # endif
387 #endif
388
389 #ifndef __attribute__
390 /* This feature is available in gcc versions 2.5 and later. */
391 # if (! defined __GNUC__ || __GNUC__ < 2 \
392 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
393 # define __attribute__(Spec) /* empty */
394 # endif
395 #endif
396
397 /* Suppress unused-variable warnings by "using" E. */
398 #if ! defined lint || defined __GNUC__
399 # define YYUSE(E) ((void) (E))
400 #else
401 # define YYUSE(E) /* empty */
402 #endif
403
404
405 #if 1
406
407 /* The parser invokes alloca or malloc; define the necessary symbols. */
408
409 # ifdef YYSTACK_ALLOC
410 /* Pacify GCC's 'empty if-body' warning. */
411 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
412 # ifndef YYSTACK_ALLOC_MAXIMUM
413 /* The OS might guarantee only one guard page at the bottom of the stack,
414 and a page size can be as small as 4096 bytes. So we cannot safely
415 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
416 to allow for a few compiler-allocated temporary stack slots. */
417 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
418 # endif
419 # else
420 # define YYSTACK_ALLOC YYMALLOC
421 # define YYSTACK_FREE YYFREE
422 # ifndef YYSTACK_ALLOC_MAXIMUM
423 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
424 # endif
425 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
426 && ! ((defined YYMALLOC || defined malloc) \
427 && (defined YYFREE || defined free)))
428 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
429 # ifndef EXIT_SUCCESS
430 # define EXIT_SUCCESS 0
431 # endif
432 # endif
433 # ifndef YYMALLOC
434 # define YYMALLOC malloc
435 # if ! defined malloc && ! defined EXIT_SUCCESS
436 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
437 # endif
438 # endif
439 # ifndef YYFREE
440 # define YYFREE free
441 # if ! defined free && ! defined EXIT_SUCCESS
442 void free (void *); /* INFRINGES ON USER NAME SPACE */
443 # endif
444 # endif
445 # endif
446 # define YYCOPY_NEEDED 1
447 #endif
448
449
450 #if (! defined yyoverflow \
451 && (! defined __cplusplus \
452 || (defined GRAM_LTYPE_IS_TRIVIAL && GRAM_LTYPE_IS_TRIVIAL \
453 && defined GRAM_STYPE_IS_TRIVIAL && GRAM_STYPE_IS_TRIVIAL)))
454
455 /* A type that is properly aligned for any stack member. */
456 union yyalloc
457 {
458 yytype_int16 yyss_alloc;
459 YYSTYPE yyvs_alloc;
460 YYLTYPE yyls_alloc;
461 };
462
463 /* The size of the maximum gap between one aligned stack and the next. */
464 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
465
466 /* The size of an array large to enough to hold all stacks, each with
467 N elements. */
468 # define YYSTACK_BYTES(N) \
469 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
470 + 2 * YYSTACK_GAP_MAXIMUM)
471
472 # define YYCOPY_NEEDED 1
473
474 /* Relocate STACK from its old location to the new one. The
475 local variables YYSIZE and YYSTACKSIZE give the old and new number of
476 elements in the stack, and YYPTR gives the new location of the
477 stack. Advance YYPTR to a properly aligned location for the next
478 stack. */
479 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
480 do \
481 { \
482 YYSIZE_T yynewbytes; \
483 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
484 Stack = &yyptr->Stack_alloc; \
485 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
486 yyptr += yynewbytes / sizeof (*yyptr); \
487 } \
488 while (0)
489
490 #endif
491
492 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
493 /* Copy COUNT objects from SRC to DST. The source and destination do
494 not overlap. */
495 # ifndef YYCOPY
496 # if defined __GNUC__ && 1 < __GNUC__
497 # define YYCOPY(Dst, Src, Count) \
498 __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
499 # else
500 # define YYCOPY(Dst, Src, Count) \
501 do \
502 { \
503 YYSIZE_T yyi; \
504 for (yyi = 0; yyi < (Count); yyi++) \
505 (Dst)[yyi] = (Src)[yyi]; \
506 } \
507 while (0)
508 # endif
509 # endif
510 #endif /* !YYCOPY_NEEDED */
511
512 /* YYFINAL -- State number of the termination state. */
513 #define YYFINAL 3
514 /* YYLAST -- Last index in YYTABLE. */
515 #define YYLAST 164
516
517 /* YYNTOKENS -- Number of terminals. */
518 #define YYNTOKENS 58
519 /* YYNNTS -- Number of nonterminals. */
520 #define YYNNTS 37
521 /* YYNRULES -- Number of rules. */
522 #define YYNRULES 110
523 /* YYNSTATES -- Number of states. */
524 #define YYNSTATES 144
525
526 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
527 by yylex, with out-of-bounds checking. */
528 #define YYUNDEFTOK 2
529 #define YYMAXUTOK 312
530
531 #define YYTRANSLATE(YYX) \
532 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
533
534 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
535 as returned by yylex, without out-of-bounds checking. */
536 static const yytype_uint8 yytranslate[] =
537 {
538 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
539 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
540 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
541 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
542 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
543 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
544 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
545 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
546 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
547 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
548 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
549 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
550 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
551 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
552 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
553 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
554 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
555 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
556 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
557 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
558 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
559 2, 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, 1, 2, 3, 4,
564 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
565 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
566 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
567 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
568 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
569 55, 56, 57
570 };
571
572 #if GRAM_DEBUG
573 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
574 static const yytype_uint16 yyrline[] =
575 {
576 0, 259, 259, 268, 269, 273, 274, 280, 284, 289,
577 290, 295, 301, 302, 303, 304, 309, 314, 315, 316,
578 317, 318, 319, 319, 320, 321, 345, 346, 347, 348,
579 352, 353, 362, 363, 364, 368, 380, 384, 388, 396,
580 407, 408, 418, 419, 423, 435, 435, 440, 440, 445,
581 456, 471, 472, 473, 474, 478, 479, 484, 486, 491,
582 496, 506, 508, 513, 514, 518, 519, 523, 524, 525,
583 530, 535, 540, 546, 552, 563, 564, 573, 574, 580,
584 581, 582, 589, 589, 597, 598, 599, 604, 607, 609,
585 611, 613, 615, 617, 619, 624, 625, 635, 636, 661,
586 662, 663, 664, 676, 678, 687, 692, 693, 698, 706,
587 707
588 };
589 #endif
590
591 #if GRAM_DEBUG || YYERROR_VERBOSE || 1
592 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
593 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
594 static const char *const yytname[] =
595 {
596 "\"end of file\"", "error", "$undefined", "\"string\"", "\"%token\"",
597 "\"%nterm\"", "\"%type\"", "\"%destructor\"", "\"%printer\"",
598 "\"%left\"", "\"%right\"", "\"%nonassoc\"", "\"%precedence\"",
599 "\"%prec\"", "\"%dprec\"", "\"%merge\"", "\"%code\"",
600 "\"%default-prec\"", "\"%define\"", "\"%defines\"", "\"%error-verbose\"",
601 "\"%expect\"", "\"%expect-rr\"", "\"%<flag>\"", "\"%file-prefix\"",
602 "\"%glr-parser\"", "\"%initial-action\"", "\"%language\"",
603 "\"%name-prefix\"", "\"%no-default-prec\"", "\"%no-lines\"",
604 "\"%nondeterministic-parser\"", "\"%output\"", "\"%require\"",
605 "\"%skeleton\"", "\"%start\"", "\"%token-table\"", "\"%verbose\"",
606 "\"%yacc\"", "\"{...}\"", "\"%?{...}\"", "\"[identifier]\"", "\"char\"",
607 "\"epilogue\"", "\"=\"", "\"identifier\"", "\"identifier:\"", "\"%%\"",
608 "\"|\"", "\"%{...%}\"", "\";\"", "\"<tag>\"", "\"<*>\"", "\"<>\"",
609 "\"integer\"", "\"%param\"", "\"%union\"", "\"%empty\"", "$accept",
610 "input", "prologue_declarations", "prologue_declaration", "$@1",
611 "params", "grammar_declaration", "code_props_type", "union_name",
612 "symbol_declaration", "$@2", "$@3", "precedence_declaration",
613 "precedence_declarator", "tag.opt", "symbols.prec", "symbol.prec",
614 "symbols.1", "generic_symlist", "generic_symlist_item", "tag",
615 "symbol_def", "symbol_defs.1", "grammar", "rules_or_grammar_declaration",
616 "rules", "$@4", "rhses.1", "rhs", "named_ref.opt", "variable", "value",
617 "id", "id_colon", "symbol", "string_as_id", "epilogue.opt", YY_NULL
618 };
619 #endif
620
621 # ifdef YYPRINT
622 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
623 (internal) symbol number NUM (which must be that of a token). */
624 static const yytype_uint16 yytoknum[] =
625 {
626 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
627 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
628 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
629 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
630 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
631 305, 306, 307, 308, 309, 310, 311, 312
632 };
633 # endif
634
635 #define YYPACT_NINF -113
636
637 #define yypact_value_is_default(Yystate) \
638 (!!((Yystate) == (-113)))
639
640 #define YYTABLE_NINF -110
641
642 #define yytable_value_is_error(Yytable_value) \
643 0
644
645 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
646 STATE-NUM. */
647 static const yytype_int8 yypact[] =
648 {
649 -113, 16, 108, -113, -113, -113, -27, -113, -113, -113,
650 -113, -113, -113, -24, -113, 23, 24, -113, -21, -15,
651 -113, 29, -113, 3, 38, 42, -113, -113, -113, 44,
652 47, 71, 31, -113, -113, -113, 55, -113, -113, -113,
653 30, -113, -113, 39, -113, -113, 26, -22, -22, 31,
654 -113, 48, -113, -113, 1, -113, -113, -113, -113, -113,
655 -113, -113, -113, -113, -113, -113, -113, -113, -113, -113,
656 -113, 45, -113, 50, 2, -113, -113, 57, 49, -113,
657 52, 41, -113, 31, -113, -113, -22, -2, -22, 31,
658 -113, -113, -113, -113, -113, -113, -113, -113, 46, -113,
659 -113, -113, -113, -113, 63, -113, -113, -113, -113, 41,
660 -113, -113, -113, 31, -113, 51, -113, 100, -113, -113,
661 -113, -113, -113, -113, -113, -113, -113, -20, 40, -113,
662 -113, 31, 53, 58, 57, -113, -113, 57, 40, -113,
663 -113, -113, -113, -113
664 };
665
666 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
667 Performed when YYTABLE does not specify something else to do. Zero
668 means the default is an error. */
669 static const yytype_uint8 yydefact[] =
670 {
671 3, 0, 0, 1, 47, 45, 0, 40, 41, 51,
672 52, 53, 54, 0, 36, 0, 9, 11, 0, 0,
673 7, 0, 15, 0, 0, 0, 37, 19, 20, 0,
674 0, 0, 0, 26, 27, 28, 0, 6, 29, 22,
675 42, 4, 5, 0, 33, 32, 55, 0, 0, 0,
676 38, 0, 98, 97, 99, 10, 12, 13, 14, 16,
677 17, 18, 21, 24, 25, 108, 104, 103, 106, 34,
678 107, 0, 105, 0, 0, 77, 79, 95, 0, 43,
679 0, 0, 56, 0, 70, 75, 48, 71, 46, 49,
680 61, 39, 101, 102, 100, 8, 81, 80, 0, 78,
681 2, 96, 82, 31, 23, 44, 67, 68, 69, 35,
682 63, 66, 65, 50, 57, 59, 76, 72, 73, 62,
683 110, 87, 30, 64, 58, 60, 74, 83, 84, 87,
684 86, 0, 0, 0, 95, 90, 91, 95, 85, 92,
685 93, 94, 89, 88
686 };
687
688 /* YYPGOTO[NTERM-NUM]. */
689 static const yytype_int8 yypgoto[] =
690 {
691 -113, -113, -113, -113, -113, -113, 102, -113, -113, -113,
692 -113, -113, -113, -113, -113, -113, 8, -113, -113, 13,
693 -113, -50, 75, -113, 73, -113, -113, -113, 19, -112,
694 -113, -113, 22, -113, -32, -82, -113
695 };
696
697 /* YYDEFGOTO[NTERM-NUM]. */
698 static const yytype_int16 yydefgoto[] =
699 {
700 -1, 1, 2, 41, 78, 104, 73, 43, 80, 44,
701 48, 47, 45, 46, 83, 113, 114, 89, 109, 110,
702 111, 85, 86, 74, 75, 76, 121, 127, 128, 102,
703 54, 95, 68, 77, 112, 70, 100
704 };
705
706 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
707 positive, shift that token. If negative, reduce the rule whose
708 number is the opposite. If YYTABLE_NINF, syntax error. */
709 static const yytype_int16 yytable[] =
710 {
711 69, 65, -109, 71, 92, 118, 4, 5, 6, 7,
712 8, 9, 10, 11, 12, 50, 3, 90, 13, 14,
713 66, 51, 142, 67, 49, 143, 52, 55, 129, 84,
714 130, 26, 58, 56, 65, 126, 116, 32, 116, 57,
715 93, 60, 59, 65, 65, 61, 94, 62, 72, 98,
716 63, 115, 117, 131, 132, 133, 71, 119, 40, 4,
717 5, 6, 7, 8, 9, 10, 11, 12, 53, 87,
718 87, 13, 14, 66, 64, 79, 67, 82, 81, 134,
719 135, 115, 66, 66, 26, 67, 67, 91, 103, 120,
720 32, 105, 106, 107, 108, 96, 137, 136, 101, 139,
721 97, 72, 122, 65, 42, 125, 137, 140, 87, 141,
722 87, 40, 4, 5, 6, 7, 8, 9, 10, 11,
723 12, 124, 123, 88, 13, 14, 15, 16, 17, 18,
724 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
725 29, 30, 31, 32, 33, 34, 35, 99, 138, 0,
726 0, 0, 0, 0, 0, 36, 0, 37, 38, 0,
727 0, 0, 0, 39, 40
728 };
729
730 static const yytype_int16 yycheck[] =
731 {
732 32, 3, 0, 1, 3, 87, 4, 5, 6, 7,
733 8, 9, 10, 11, 12, 39, 0, 49, 16, 17,
734 42, 45, 134, 45, 51, 137, 3, 3, 48, 51,
735 50, 29, 3, 54, 3, 117, 86, 35, 88, 54,
736 39, 3, 39, 3, 3, 3, 45, 3, 46, 47,
737 3, 83, 54, 13, 14, 15, 1, 89, 56, 4,
738 5, 6, 7, 8, 9, 10, 11, 12, 45, 47,
739 48, 16, 17, 42, 3, 45, 45, 51, 39, 39,
740 40, 113, 42, 42, 29, 45, 45, 39, 39, 43,
741 35, 39, 51, 52, 53, 50, 128, 57, 41, 131,
742 50, 46, 39, 3, 2, 54, 138, 54, 86, 51,
743 88, 56, 4, 5, 6, 7, 8, 9, 10, 11,
744 12, 113, 109, 48, 16, 17, 18, 19, 20, 21,
745 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
746 32, 33, 34, 35, 36, 37, 38, 74, 129, -1,
747 -1, -1, -1, -1, -1, 47, -1, 49, 50, -1,
748 -1, -1, -1, 55, 56
749 };
750
751 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
752 symbol of state STATE-NUM. */
753 static const yytype_uint8 yystos[] =
754 {
755 0, 59, 60, 0, 4, 5, 6, 7, 8, 9,
756 10, 11, 12, 16, 17, 18, 19, 20, 21, 22,
757 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
758 33, 34, 35, 36, 37, 38, 47, 49, 50, 55,
759 56, 61, 64, 65, 67, 70, 71, 69, 68, 51,
760 39, 45, 3, 45, 88, 3, 54, 54, 3, 39,
761 3, 3, 3, 3, 3, 3, 42, 45, 90, 92,
762 93, 1, 46, 64, 81, 82, 83, 91, 62, 45,
763 66, 39, 51, 72, 51, 79, 80, 90, 80, 75,
764 92, 39, 3, 39, 45, 89, 50, 50, 47, 82,
765 94, 41, 87, 39, 63, 39, 51, 52, 53, 76,
766 77, 78, 92, 73, 74, 92, 79, 54, 93, 92,
767 43, 84, 39, 77, 74, 54, 93, 85, 86, 48,
768 50, 13, 14, 15, 39, 40, 57, 92, 86, 92,
769 54, 51, 87, 87
770 };
771
772 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
773 static const yytype_uint8 yyr1[] =
774 {
775 0, 58, 59, 60, 60, 61, 61, 61, 61, 61,
776 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
777 61, 61, 62, 61, 61, 61, 61, 61, 61, 61,
778 63, 63, 64, 64, 64, 64, 64, 64, 64, 64,
779 65, 65, 66, 66, 64, 68, 67, 69, 67, 67,
780 70, 71, 71, 71, 71, 72, 72, 73, 73, 74,
781 74, 75, 75, 76, 76, 77, 77, 78, 78, 78,
782 79, 79, 79, 79, 79, 80, 80, 81, 81, 82,
783 82, 82, 84, 83, 85, 85, 85, 86, 86, 86,
784 86, 86, 86, 86, 86, 87, 87, 88, 88, 89,
785 89, 89, 89, 90, 90, 91, 92, 92, 93, 94,
786 94
787 };
788
789 /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
790 static const yytype_uint8 yyr2[] =
791 {
792 0, 2, 4, 0, 2, 1, 1, 1, 3, 1,
793 2, 1, 2, 2, 2, 1, 2, 2, 2, 1,
794 1, 2, 0, 3, 2, 2, 1, 1, 1, 1,
795 2, 1, 1, 1, 2, 3, 1, 1, 2, 3,
796 1, 1, 0, 1, 3, 0, 3, 0, 3, 3,
797 3, 1, 1, 1, 1, 0, 1, 1, 2, 1,
798 2, 1, 2, 1, 2, 1, 1, 1, 1, 1,
799 1, 1, 2, 2, 3, 1, 2, 1, 2, 1,
800 2, 2, 0, 4, 1, 3, 2, 0, 3, 3,
801 2, 2, 3, 3, 3, 0, 1, 1, 1, 0,
802 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
803 2
804 };
805
806
807 #define yyerrok (yyerrstatus = 0)
808 #define yyclearin (yychar = YYEMPTY)
809 #define YYEMPTY (-2)
810 #define YYEOF 0
811
812 #define YYACCEPT goto yyacceptlab
813 #define YYABORT goto yyabortlab
814 #define YYERROR goto yyerrorlab
815
816
817 #define YYRECOVERING() (!!yyerrstatus)
818
819 #define YYBACKUP(Token, Value) \
820 do \
821 if (yychar == YYEMPTY) \
822 { \
823 yychar = (Token); \
824 yylval = (Value); \
825 YYPOPSTACK (yylen); \
826 yystate = *yyssp; \
827 YY_LAC_DISCARD ("YYBACKUP"); \
828 goto yybackup; \
829 } \
830 else \
831 { \
832 yyerror (&yylloc, YY_("syntax error: cannot back up")); \
833 YYERROR; \
834 } \
835 while (0)
836
837 /* Error token number */
838 #define YYTERROR 1
839 #define YYERRCODE 256
840
841
842 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
843 If N is 0, then set CURRENT to the empty location which ends
844 the previous symbol: RHS[0] (always defined). */
845
846 #ifndef YYLLOC_DEFAULT
847 # define YYLLOC_DEFAULT(Current, Rhs, N) \
848 do \
849 if (N) \
850 { \
851 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
852 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
853 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
854 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
855 } \
856 else \
857 { \
858 (Current).first_line = (Current).last_line = \
859 YYRHSLOC (Rhs, 0).last_line; \
860 (Current).first_column = (Current).last_column = \
861 YYRHSLOC (Rhs, 0).last_column; \
862 } \
863 while (0)
864 #endif
865
866 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
867
868
869 /* Enable debugging if requested. */
870 #if GRAM_DEBUG
871
872 # ifndef YYFPRINTF
873 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
874 # define YYFPRINTF fprintf
875 # endif
876
877 # define YYDPRINTF(Args) \
878 do { \
879 if (yydebug) \
880 YYFPRINTF Args; \
881 } while (0)
882
883
884 /* YY_LOCATION_PRINT -- Print the location on the stream.
885 This macro was not mandated originally: define only if we know
886 we won't break user code: when these are the locations we know. */
887
888 #ifndef YY_LOCATION_PRINT
889 # if defined GRAM_LTYPE_IS_TRIVIAL && GRAM_LTYPE_IS_TRIVIAL
890
891 /* Print *YYLOCP on YYO. Private, do not rely on its existence. */
892
893 __attribute__((__unused__))
894 static unsigned
895 yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp)
896 {
897 unsigned res = 0;
898 int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
899 if (0 <= yylocp->first_line)
900 {
901 res += YYFPRINTF (yyo, "%d", yylocp->first_line);
902 if (0 <= yylocp->first_column)
903 res += YYFPRINTF (yyo, ".%d", yylocp->first_column);
904 }
905 if (0 <= yylocp->last_line)
906 {
907 if (yylocp->first_line < yylocp->last_line)
908 {
909 res += YYFPRINTF (yyo, "-%d", yylocp->last_line);
910 if (0 <= end_col)
911 res += YYFPRINTF (yyo, ".%d", end_col);
912 }
913 else if (0 <= end_col && yylocp->first_column < end_col)
914 res += YYFPRINTF (yyo, "-%d", end_col);
915 }
916 return res;
917 }
918
919 # define YY_LOCATION_PRINT(File, Loc) \
920 yy_location_print_ (File, &(Loc))
921
922 # else
923 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
924 # endif
925 #endif
926
927
928 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
929 do { \
930 if (yydebug) \
931 { \
932 YYFPRINTF (stderr, "%s ", Title); \
933 yy_symbol_print (stderr, \
934 Type, Value, Location); \
935 YYFPRINTF (stderr, "\n"); \
936 } \
937 } while (0)
938
939
940 /*--------------------------------.
941 | Print this symbol on YYOUTPUT. |
942 `--------------------------------*/
943
944 static void
945 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp)
946 {
947 FILE *yyo = yyoutput;
948 YYUSE (yyo);
949 YYUSE (yylocationp);
950 if (!yyvaluep)
951 return;
952 # ifdef YYPRINT
953 if (yytype < YYNTOKENS)
954 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
955 # endif
956 switch (yytype)
957 {
958 case 3: /* "string" */
959 #line 183 "src/parse-gram.y" /* yacc.c:701 */
960 { fputs (quotearg_style (c_quoting_style, ((*yyvaluep).code)), yyo); }
961 #line 962 "src/parse-gram.c" /* yacc.c:701 */
962 break;
963
964 case 23: /* "%<flag>" */
965 #line 191 "src/parse-gram.y" /* yacc.c:701 */
966 { fprintf (yyo, "%%%s", ((*yyvaluep).uniqstr)); }
967 #line 968 "src/parse-gram.c" /* yacc.c:701 */
968 break;
969
970 case 39: /* "{...}" */
971 #line 184 "src/parse-gram.y" /* yacc.c:701 */
972 { fprintf (yyo, "{\n%s\n}", ((*yyvaluep).code)); }
973 #line 974 "src/parse-gram.c" /* yacc.c:701 */
974 break;
975
976 case 40: /* "%?{...}" */
977 #line 184 "src/parse-gram.y" /* yacc.c:701 */
978 { fprintf (yyo, "{\n%s\n}", ((*yyvaluep).code)); }
979 #line 980 "src/parse-gram.c" /* yacc.c:701 */
980 break;
981
982 case 41: /* "[identifier]" */
983 #line 189 "src/parse-gram.y" /* yacc.c:701 */
984 { fprintf (yyo, "[%s]", ((*yyvaluep).uniqstr)); }
985 #line 986 "src/parse-gram.c" /* yacc.c:701 */
986 break;
987
988 case 42: /* "char" */
989 #line 179 "src/parse-gram.y" /* yacc.c:701 */
990 { fputs (char_name (((*yyvaluep).character)), yyo); }
991 #line 992 "src/parse-gram.c" /* yacc.c:701 */
992 break;
993
994 case 43: /* "epilogue" */
995 #line 184 "src/parse-gram.y" /* yacc.c:701 */
996 { fprintf (yyo, "{\n%s\n}", ((*yyvaluep).code)); }
997 #line 998 "src/parse-gram.c" /* yacc.c:701 */
998 break;
999
1000 case 45: /* "identifier" */
1001 #line 188 "src/parse-gram.y" /* yacc.c:701 */
1002 { fputs (((*yyvaluep).uniqstr), yyo); }
1003 #line 1004 "src/parse-gram.c" /* yacc.c:701 */
1004 break;
1005
1006 case 46: /* "identifier:" */
1007 #line 190 "src/parse-gram.y" /* yacc.c:701 */
1008 { fprintf (yyo, "%s:", ((*yyvaluep).uniqstr)); }
1009 #line 1010 "src/parse-gram.c" /* yacc.c:701 */
1010 break;
1011
1012 case 49: /* "%{...%}" */
1013 #line 184 "src/parse-gram.y" /* yacc.c:701 */
1014 { fprintf (yyo, "{\n%s\n}", ((*yyvaluep).code)); }
1015 #line 1016 "src/parse-gram.c" /* yacc.c:701 */
1016 break;
1017
1018 case 51: /* "<tag>" */
1019 #line 192 "src/parse-gram.y" /* yacc.c:701 */
1020 { fprintf (yyo, "<%s>", ((*yyvaluep).uniqstr)); }
1021 #line 1022 "src/parse-gram.c" /* yacc.c:701 */
1022 break;
1023
1024 case 54: /* "integer" */
1025 #line 196 "src/parse-gram.y" /* yacc.c:701 */
1026 { fprintf (yyo, "%d", ((*yyvaluep).integer)); }
1027 #line 1028 "src/parse-gram.c" /* yacc.c:701 */
1028 break;
1029
1030 case 55: /* "%param" */
1031 #line 239 "src/parse-gram.y" /* yacc.c:701 */
1032 {
1033 switch (((*yyvaluep).param))
1034 {
1035 #define CASE(In, Out) \
1036 case param_ ## In: fputs ("%" #Out, yyo); break
1037 CASE (lex, lex-param);
1038 CASE (parse, parse-param);
1039 CASE (both, param);
1040 #undef CASE
1041 case param_none: aver (false); break;
1042 }
1043 }
1044 #line 1045 "src/parse-gram.c" /* yacc.c:701 */
1045 break;
1046
1047 case 65: /* code_props_type */
1048 #line 405 "src/parse-gram.y" /* yacc.c:701 */
1049 { fprintf (yyo, "%s", code_props_type_string (((*yyvaluep).code_type))); }
1050 #line 1051 "src/parse-gram.c" /* yacc.c:701 */
1051 break;
1052
1053 case 74: /* symbol.prec */
1054 #line 200 "src/parse-gram.y" /* yacc.c:701 */
1055 { fprintf (yyo, "%s", ((*yyvaluep).symbol)->tag); }
1056 #line 1057 "src/parse-gram.c" /* yacc.c:701 */
1057 break;
1058
1059 case 78: /* tag */
1060 #line 192 "src/parse-gram.y" /* yacc.c:701 */
1061 { fprintf (yyo, "<%s>", ((*yyvaluep).uniqstr)); }
1062 #line 1063 "src/parse-gram.c" /* yacc.c:701 */
1063 break;
1064
1065 case 88: /* variable */
1066 #line 188 "src/parse-gram.y" /* yacc.c:701 */
1067 { fputs (((*yyvaluep).uniqstr), yyo); }
1068 #line 1069 "src/parse-gram.c" /* yacc.c:701 */
1069 break;
1070
1071 case 89: /* value */
1072 #line 651 "src/parse-gram.y" /* yacc.c:701 */
1073 {
1074 switch (((*yyvaluep).value).kind)
1075 {
1076 case muscle_code: fprintf (yyo, "{%s}", ((*yyvaluep).value).chars); break;
1077 case muscle_keyword: fprintf (yyo, "%s", ((*yyvaluep).value).chars); break;
1078 case muscle_string: fprintf (yyo, "\"%s\"", ((*yyvaluep).value).chars); break;
1079 }
1080 }
1081 #line 1082 "src/parse-gram.c" /* yacc.c:701 */
1082 break;
1083
1084 case 90: /* id */
1085 #line 200 "src/parse-gram.y" /* yacc.c:701 */
1086 { fprintf (yyo, "%s", ((*yyvaluep).symbol)->tag); }
1087 #line 1088 "src/parse-gram.c" /* yacc.c:701 */
1088 break;
1089
1090 case 91: /* id_colon */
1091 #line 201 "src/parse-gram.y" /* yacc.c:701 */
1092 { fprintf (yyo, "%s:", ((*yyvaluep).symbol)->tag); }
1093 #line 1094 "src/parse-gram.c" /* yacc.c:701 */
1094 break;
1095
1096 case 92: /* symbol */
1097 #line 200 "src/parse-gram.y" /* yacc.c:701 */
1098 { fprintf (yyo, "%s", ((*yyvaluep).symbol)->tag); }
1099 #line 1100 "src/parse-gram.c" /* yacc.c:701 */
1100 break;
1101
1102 case 93: /* string_as_id */
1103 #line 200 "src/parse-gram.y" /* yacc.c:701 */
1104 { fprintf (yyo, "%s", ((*yyvaluep).symbol)->tag); }
1105 #line 1106 "src/parse-gram.c" /* yacc.c:701 */
1106 break;
1107
1108
1109 default:
1110 break;
1111 }
1112 }
1113
1114
1115 /*--------------------------------.
1116 | Print this symbol on YYOUTPUT. |
1117 `--------------------------------*/
1118
1119 static void
1120 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp)
1121 {
1122 YYFPRINTF (yyoutput, "%s %s (",
1123 yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
1124
1125 YY_LOCATION_PRINT (yyoutput, *yylocationp);
1126 YYFPRINTF (yyoutput, ": ");
1127 yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp);
1128 YYFPRINTF (yyoutput, ")");
1129 }
1130
1131 /*------------------------------------------------------------------.
1132 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1133 | TOP (included). |
1134 `------------------------------------------------------------------*/
1135
1136 static void
1137 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
1138 {
1139 YYFPRINTF (stderr, "Stack now");
1140 for (; yybottom <= yytop; yybottom++)
1141 {
1142 int yybot = *yybottom;
1143 YYFPRINTF (stderr, " %d", yybot);
1144 }
1145 YYFPRINTF (stderr, "\n");
1146 }
1147
1148 # define YY_STACK_PRINT(Bottom, Top) \
1149 do { \
1150 if (yydebug) \
1151 yy_stack_print ((Bottom), (Top)); \
1152 } while (0)
1153
1154
1155 /*------------------------------------------------.
1156 | Report that the YYRULE is going to be reduced. |
1157 `------------------------------------------------*/
1158
1159 static void
1160 yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule)
1161 {
1162 unsigned long int yylno = yyrline[yyrule];
1163 int yynrhs = yyr2[yyrule];
1164 int yyi;
1165 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1166 yyrule - 1, yylno);
1167 /* The symbols being reduced. */
1168 for (yyi = 0; yyi < yynrhs; yyi++)
1169 {
1170 YYFPRINTF (stderr, " $%d = ", yyi + 1);
1171 yy_symbol_print (stderr,
1172 yystos[yyssp[yyi + 1 - yynrhs]],
1173 &(yyvsp[(yyi + 1) - (yynrhs)])
1174 , &(yylsp[(yyi + 1) - (yynrhs)]) );
1175 YYFPRINTF (stderr, "\n");
1176 }
1177 }
1178
1179 # define YY_REDUCE_PRINT(Rule) \
1180 do { \
1181 if (yydebug) \
1182 yy_reduce_print (yyssp, yyvsp, yylsp, Rule); \
1183 } while (0)
1184
1185 /* Nonzero means print parse trace. It is left uninitialized so that
1186 multiple parsers can coexist. */
1187 int yydebug;
1188 #else /* !GRAM_DEBUG */
1189 # define YYDPRINTF(Args)
1190 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1191 # define YY_STACK_PRINT(Bottom, Top)
1192 # define YY_REDUCE_PRINT(Rule)
1193 #endif /* !GRAM_DEBUG */
1194
1195
1196 /* YYINITDEPTH -- initial size of the parser's stacks. */
1197 #ifndef YYINITDEPTH
1198 # define YYINITDEPTH 200
1199 #endif
1200
1201 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1202 if the built-in stack extension method is used).
1203
1204 Do not make this value too large; the results are undefined if
1205 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1206 evaluated with infinite-precision integer arithmetic. */
1207
1208 #ifndef YYMAXDEPTH
1209 # define YYMAXDEPTH 10000
1210 #endif
1211
1212 /* Given a state stack such that *YYBOTTOM is its bottom, such that
1213 *YYTOP is either its top or is YYTOP_EMPTY to indicate an empty
1214 stack, and such that *YYCAPACITY is the maximum number of elements it
1215 can hold without a reallocation, make sure there is enough room to
1216 store YYADD more elements. If not, allocate a new stack using
1217 YYSTACK_ALLOC, copy the existing elements, and adjust *YYBOTTOM,
1218 *YYTOP, and *YYCAPACITY to reflect the new capacity and memory
1219 location. If *YYBOTTOM != YYBOTTOM_NO_FREE, then free the old stack
1220 using YYSTACK_FREE. Return 0 if successful or if no reallocation is
1221 required. Return 1 if memory is exhausted. */
1222 static int
1223 yy_lac_stack_realloc (YYSIZE_T *yycapacity, YYSIZE_T yyadd,
1224 #if GRAM_DEBUG
1225 char const *yydebug_prefix,
1226 char const *yydebug_suffix,
1227 #endif
1228 yytype_int16 **yybottom,
1229 yytype_int16 *yybottom_no_free,
1230 yytype_int16 **yytop, yytype_int16 *yytop_empty)
1231 {
1232 YYSIZE_T yysize_old =
1233 *yytop == yytop_empty ? 0 : *yytop - *yybottom + 1;
1234 YYSIZE_T yysize_new = yysize_old + yyadd;
1235 if (*yycapacity < yysize_new)
1236 {
1237 YYSIZE_T yyalloc = 2 * yysize_new;
1238 yytype_int16 *yybottom_new;
1239 /* Use YYMAXDEPTH for maximum stack size given that the stack
1240 should never need to grow larger than the main state stack
1241 needs to grow without LAC. */
1242 if (YYMAXDEPTH < yysize_new)
1243 {
1244 YYDPRINTF ((stderr, "%smax size exceeded%s", yydebug_prefix,
1245 yydebug_suffix));
1246 return 1;
1247 }
1248 if (YYMAXDEPTH < yyalloc)
1249 yyalloc = YYMAXDEPTH;
1250 yybottom_new =
1251 (yytype_int16*) YYSTACK_ALLOC (yyalloc * sizeof *yybottom_new);
1252 if (!yybottom_new)
1253 {
1254 YYDPRINTF ((stderr, "%srealloc failed%s", yydebug_prefix,
1255 yydebug_suffix));
1256 return 1;
1257 }
1258 if (*yytop != yytop_empty)
1259 {
1260 YYCOPY (yybottom_new, *yybottom, yysize_old);
1261 *yytop = yybottom_new + (yysize_old - 1);
1262 }
1263 if (*yybottom != yybottom_no_free)
1264 YYSTACK_FREE (*yybottom);
1265 *yybottom = yybottom_new;
1266 *yycapacity = yyalloc;
1267 }
1268 return 0;
1269 }
1270
1271 /* Establish the initial context for the current lookahead if no initial
1272 context is currently established.
1273
1274 We define a context as a snapshot of the parser stacks. We define
1275 the initial context for a lookahead as the context in which the
1276 parser initially examines that lookahead in order to select a
1277 syntactic action. Thus, if the lookahead eventually proves
1278 syntactically unacceptable (possibly in a later context reached via a
1279 series of reductions), the initial context can be used to determine
1280 the exact set of tokens that would be syntactically acceptable in the
1281 lookahead's place. Moreover, it is the context after which any
1282 further semantic actions would be erroneous because they would be
1283 determined by a syntactically unacceptable token.
1284
1285 YY_LAC_ESTABLISH should be invoked when a reduction is about to be
1286 performed in an inconsistent state (which, for the purposes of LAC,
1287 includes consistent states that don't know they're consistent because
1288 their default reductions have been disabled). Iff there is a
1289 lookahead token, it should also be invoked before reporting a syntax
1290 error. This latter case is for the sake of the debugging output.
1291
1292 For parse.lac=full, the implementation of YY_LAC_ESTABLISH is as
1293 follows. If no initial context is currently established for the
1294 current lookahead, then check if that lookahead can eventually be
1295 shifted if syntactic actions continue from the current context.
1296 Report a syntax error if it cannot. */
1297 #define YY_LAC_ESTABLISH \
1298 do { \
1299 if (!yy_lac_established) \
1300 { \
1301 YYDPRINTF ((stderr, \
1302 "LAC: initial context established for %s\n", \
1303 yytname[yytoken])); \
1304 yy_lac_established = 1; \
1305 { \
1306 int yy_lac_status = \
1307 yy_lac (yyesa, &yyes, &yyes_capacity, yyssp, yytoken); \
1308 if (yy_lac_status == 2) \
1309 goto yyexhaustedlab; \
1310 if (yy_lac_status == 1) \
1311 goto yyerrlab; \
1312 } \
1313 } \
1314 } while (0)
1315
1316 /* Discard any previous initial lookahead context because of Event,
1317 which may be a lookahead change or an invalidation of the currently
1318 established initial context for the current lookahead.
1319
1320 The most common example of a lookahead change is a shift. An example
1321 of both cases is syntax error recovery. That is, a syntax error
1322 occurs when the lookahead is syntactically erroneous for the
1323 currently established initial context, so error recovery manipulates
1324 the parser stacks to try to find a new initial context in which the
1325 current lookahead is syntactically acceptable. If it fails to find
1326 such a context, it discards the lookahead. */
1327 #if GRAM_DEBUG
1328 # define YY_LAC_DISCARD(Event) \
1329 do { \
1330 if (yy_lac_established) \
1331 { \
1332 if (yydebug) \
1333 YYFPRINTF (stderr, "LAC: initial context discarded due to " \
1334 Event "\n"); \
1335 yy_lac_established = 0; \
1336 } \
1337 } while (0)
1338 #else
1339 # define YY_LAC_DISCARD(Event) yy_lac_established = 0
1340 #endif
1341
1342 /* Given the stack whose top is *YYSSP, return 0 iff YYTOKEN can
1343 eventually (after perhaps some reductions) be shifted, return 1 if
1344 not, or return 2 if memory is exhausted. As preconditions and
1345 postconditions: *YYES_CAPACITY is the allocated size of the array to
1346 which *YYES points, and either *YYES = YYESA or *YYES points to an
1347 array allocated with YYSTACK_ALLOC. yy_lac may overwrite the
1348 contents of either array, alter *YYES and *YYES_CAPACITY, and free
1349 any old *YYES other than YYESA. */
1350 static int
1351 yy_lac (yytype_int16 *yyesa, yytype_int16 **yyes,
1352 YYSIZE_T *yyes_capacity, yytype_int16 *yyssp, int yytoken)
1353 {
1354 yytype_int16 *yyes_prev = yyssp;
1355 yytype_int16 *yyesp = yyes_prev;
1356 YYDPRINTF ((stderr, "LAC: checking lookahead %s:", yytname[yytoken]));
1357 if (yytoken == YYUNDEFTOK)
1358 {
1359 YYDPRINTF ((stderr, " Always Err\n"));
1360 return 1;
1361 }
1362 while (1)
1363 {
1364 int yyrule = yypact[*yyesp];
1365 if (yypact_value_is_default (yyrule)
1366 || (yyrule += yytoken) < 0 || YYLAST < yyrule
1367 || yycheck[yyrule] != yytoken)
1368 {
1369 yyrule = yydefact[*yyesp];
1370 if (yyrule == 0)
1371 {
1372 YYDPRINTF ((stderr, " Err\n"));
1373 return 1;
1374 }
1375 }
1376 else
1377 {
1378 yyrule = yytable[yyrule];
1379 if (yytable_value_is_error (yyrule))
1380 {
1381 YYDPRINTF ((stderr, " Err\n"));
1382 return 1;
1383 }
1384 if (0 < yyrule)
1385 {
1386 YYDPRINTF ((stderr, " S%d\n", yyrule));
1387 return 0;
1388 }
1389 yyrule = -yyrule;
1390 }
1391 {
1392 YYSIZE_T yylen = yyr2[yyrule];
1393 YYDPRINTF ((stderr, " R%d", yyrule - 1));
1394 if (yyesp != yyes_prev)
1395 {
1396 YYSIZE_T yysize = yyesp - *yyes + 1;
1397 if (yylen < yysize)
1398 {
1399 yyesp -= yylen;
1400 yylen = 0;
1401 }
1402 else
1403 {
1404 yylen -= yysize;
1405 yyesp = yyes_prev;
1406 }
1407 }
1408 if (yylen)
1409 yyesp = yyes_prev -= yylen;
1410 }
1411 {
1412 int yystate;
1413 {
1414 int yylhs = yyr1[yyrule] - YYNTOKENS;
1415 yystate = yypgoto[yylhs] + *yyesp;
1416 if (yystate < 0 || YYLAST < yystate
1417 || yycheck[yystate] != *yyesp)
1418 yystate = yydefgoto[yylhs];
1419 else
1420 yystate = yytable[yystate];
1421 }
1422 if (yyesp == yyes_prev)
1423 {
1424 yyesp = *yyes;
1425 *yyesp = yystate;
1426 }
1427 else
1428 {
1429 if (yy_lac_stack_realloc (yyes_capacity, 1,
1430 #if GRAM_DEBUG
1431 " (", ")",
1432 #endif
1433 yyes, yyesa, &yyesp, yyes_prev))
1434 {
1435 YYDPRINTF ((stderr, "\n"));
1436 return 2;
1437 }
1438 *++yyesp = yystate;
1439 }
1440 YYDPRINTF ((stderr, " G%d", yystate));
1441 }
1442 }
1443 }
1444
1445
1446 #if YYERROR_VERBOSE
1447
1448 # ifndef yystrlen
1449 # if defined __GLIBC__ && defined _STRING_H
1450 # define yystrlen strlen
1451 # else
1452 /* Return the length of YYSTR. */
1453 static YYSIZE_T
1454 yystrlen (const char *yystr)
1455 {
1456 YYSIZE_T yylen;
1457 for (yylen = 0; yystr[yylen]; yylen++)
1458 continue;
1459 return yylen;
1460 }
1461 # endif
1462 # endif
1463
1464 # ifndef yystpcpy
1465 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1466 # define yystpcpy stpcpy
1467 # else
1468 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1469 YYDEST. */
1470 static char *
1471 yystpcpy (char *yydest, const char *yysrc)
1472 {
1473 char *yyd = yydest;
1474 const char *yys = yysrc;
1475
1476 while ((*yyd++ = *yys++) != '\0')
1477 continue;
1478
1479 return yyd - 1;
1480 }
1481 # endif
1482 # endif
1483
1484 # ifndef yytnamerr
1485 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1486 quotes and backslashes, so that it's suitable for yyerror. The
1487 heuristic is that double-quoting is unnecessary unless the string
1488 contains an apostrophe, a comma, or backslash (other than
1489 backslash-backslash). YYSTR is taken from yytname. If YYRES is
1490 null, do not copy; instead, return the length of what the result
1491 would have been. */
1492 static YYSIZE_T
1493 yytnamerr (char *yyres, const char *yystr)
1494 {
1495 if (*yystr == '"')
1496 {
1497 YYSIZE_T yyn = 0;
1498 char const *yyp = yystr;
1499
1500 for (;;)
1501 switch (*++yyp)
1502 {
1503 case '\'':
1504 case ',':
1505 goto do_not_strip_quotes;
1506
1507 case '\\':
1508 if (*++yyp != '\\')
1509 goto do_not_strip_quotes;
1510 /* Fall through. */
1511 default:
1512 if (yyres)
1513 yyres[yyn] = *yyp;
1514 yyn++;
1515 break;
1516
1517 case '"':
1518 if (yyres)
1519 yyres[yyn] = '\0';
1520 return yyn;
1521 }
1522 do_not_strip_quotes: ;
1523 }
1524
1525 if (! yyres)
1526 return yystrlen (yystr);
1527
1528 return yystpcpy (yyres, yystr) - yyres;
1529 }
1530 # endif
1531
1532 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
1533 about the unexpected token YYTOKEN for the state stack whose top is
1534 YYSSP. In order to see if a particular token T is a
1535 valid looakhead, invoke yy_lac (YYESA, YYES, YYES_CAPACITY, YYSSP, T).
1536
1537 Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
1538 not large enough to hold the message. In that case, also set
1539 *YYMSG_ALLOC to the required number of bytes. Return 2 if the
1540 required number of bytes is too large to store or if
1541 yy_lac returned 2. */
1542 static int
1543 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
1544 yytype_int16 *yyesa, yytype_int16 **yyes,
1545 YYSIZE_T *yyes_capacity, yytype_int16 *yyssp, int yytoken)
1546 {
1547 YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
1548 YYSIZE_T yysize = yysize0;
1549 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1550 /* Internationalized format string. */
1551 const char *yyformat = YY_NULL;
1552 /* Arguments of yyformat. */
1553 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1554 /* Number of reported tokens (one for the "unexpected", one per
1555 "expected"). */
1556 int yycount = 0;
1557
1558 /* There are many possibilities here to consider:
1559 - If this state is a consistent state with a default action, then
1560 the only way this function was invoked is if the default action
1561 is an error action. In that case, don't check for expected
1562 tokens because there are none.
1563 - The only way there can be no lookahead present (in yychar) is if
1564 this state is a consistent state with a default action. Thus,
1565 detecting the absence of a lookahead is sufficient to determine
1566 that there is no unexpected or expected token to report. In that
1567 case, just report a simple "syntax error".
1568 - Don't assume there isn't a lookahead just because this state is a
1569 consistent state with a default action. There might have been a
1570 previous inconsistent state, consistent state with a non-default
1571 action, or user semantic action that manipulated yychar.
1572 In the first two cases, it might appear that the current syntax
1573 error should have been detected in the previous state when yy_lac
1574 was invoked. However, at that time, there might have been a
1575 different syntax error that discarded a different initial context
1576 during error recovery, leaving behind the current lookahead.
1577 */
1578 if (yytoken != YYEMPTY)
1579 {
1580 int yyn = yypact[*yyssp];
1581 YYDPRINTF ((stderr, "Constructing syntax error message\n"));
1582 yyarg[yycount++] = yytname[yytoken];
1583 if (!yypact_value_is_default (yyn))
1584 {
1585 int yyx;
1586
1587 for (yyx = 0; yyx < YYNTOKENS; ++yyx)
1588 if (yyx != YYTERROR && yyx != YYUNDEFTOK)
1589 {
1590 {
1591 int yy_lac_status = yy_lac (yyesa, yyes, yyes_capacity,
1592 yyssp, yyx);
1593 if (yy_lac_status == 2)
1594 return 2;
1595 if (yy_lac_status == 1)
1596 continue;
1597 }
1598 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1599 {
1600 yycount = 1;
1601 yysize = yysize0;
1602 break;
1603 }
1604 yyarg[yycount++] = yytname[yyx];
1605 {
1606 YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
1607 if (! (yysize <= yysize1
1608 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1609 return 2;
1610 yysize = yysize1;
1611 }
1612 }
1613 }
1614 # if GRAM_DEBUG
1615 else if (yydebug)
1616 YYFPRINTF (stderr, "No expected tokens.\n");
1617 # endif
1618 }
1619
1620 switch (yycount)
1621 {
1622 # define YYCASE_(N, S) \
1623 case N: \
1624 yyformat = S; \
1625 break
1626 YYCASE_(0, YY_("syntax error"));
1627 YYCASE_(1, YY_("syntax error, unexpected %s"));
1628 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1629 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1630 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1631 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1632 # undef YYCASE_
1633 }
1634
1635 {
1636 YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
1637 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1638 return 2;
1639 yysize = yysize1;
1640 }
1641
1642 if (*yymsg_alloc < yysize)
1643 {
1644 *yymsg_alloc = 2 * yysize;
1645 if (! (yysize <= *yymsg_alloc
1646 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1647 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1648 return 1;
1649 }
1650
1651 /* Avoid sprintf, as that infringes on the user's name space.
1652 Don't have undefined behavior even if the translation
1653 produced a string with the wrong number of "%s"s. */
1654 {
1655 char *yyp = *yymsg;
1656 int yyi = 0;
1657 while ((*yyp = *yyformat) != '\0')
1658 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
1659 {
1660 yyp += yytnamerr (yyp, yyarg[yyi++]);
1661 yyformat += 2;
1662 }
1663 else
1664 {
1665 yyp++;
1666 yyformat++;
1667 }
1668 }
1669 return 0;
1670 }
1671 #endif /* YYERROR_VERBOSE */
1672
1673 /*-----------------------------------------------.
1674 | Release the memory associated to this symbol. |
1675 `-----------------------------------------------*/
1676
1677 static void
1678 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
1679 {
1680 YYUSE (yyvaluep);
1681 YYUSE (yylocationp);
1682 if (!yymsg)
1683 yymsg = "Deleting";
1684 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1685
1686 YYUSE (yytype);
1687 }
1688
1689
1690
1691
1692 /*----------.
1693 | yyparse. |
1694 `----------*/
1695
1696 int
1697 yyparse (void)
1698 {
1699 /* The lookahead symbol. */
1700 int yychar;
1701
1702
1703 #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
1704 /* Suppress an incorrect diagnostic about yylval being uninitialized. */
1705 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
1706 _Pragma ("GCC diagnostic push") \
1707 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
1708 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
1709 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
1710 _Pragma ("GCC diagnostic pop")
1711 #else
1712 /* Default value used for initialization, for pacifying older GCCs
1713 or non-GCC compilers. */
1714 static YYSTYPE yyval_default;
1715 # define YY_INITIAL_VALUE(Value) = Value
1716 #endif
1717 static YYLTYPE yyloc_default
1718 # if defined GRAM_LTYPE_IS_TRIVIAL && GRAM_LTYPE_IS_TRIVIAL
1719 = { 1, 1, 1, 1 }
1720 # endif
1721 ;
1722 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1723 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1724 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
1725 #endif
1726 #ifndef YY_INITIAL_VALUE
1727 # define YY_INITIAL_VALUE(Value) /* Nothing. */
1728 #endif
1729
1730 /* The semantic value of the lookahead symbol. */
1731 YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
1732
1733 /* Location data for the lookahead symbol. */
1734 YYLTYPE yylloc = yyloc_default;
1735
1736
1737 /* Number of syntax errors so far. */
1738 int yynerrs;
1739
1740 int yystate;
1741 /* Number of tokens to shift before error messages enabled. */
1742 int yyerrstatus;
1743
1744 /* The stacks and their tools:
1745 'yyss': related to states.
1746 'yyvs': related to semantic values.
1747 'yyls': related to locations.
1748
1749 Refer to the stacks through separate pointers, to allow yyoverflow
1750 to reallocate them elsewhere. */
1751
1752 /* The state stack. */
1753 yytype_int16 yyssa[YYINITDEPTH];
1754 yytype_int16 *yyss;
1755 yytype_int16 *yyssp;
1756
1757 /* The semantic value stack. */
1758 YYSTYPE yyvsa[YYINITDEPTH];
1759 YYSTYPE *yyvs;
1760 YYSTYPE *yyvsp;
1761
1762 /* The location stack. */
1763 YYLTYPE yylsa[YYINITDEPTH];
1764 YYLTYPE *yyls;
1765 YYLTYPE *yylsp;
1766
1767 /* The locations where the error started and ended. */
1768 YYLTYPE yyerror_range[3];
1769
1770 YYSIZE_T yystacksize;
1771
1772 yytype_int16 yyesa[20];
1773 yytype_int16 *yyes;
1774 YYSIZE_T yyes_capacity;
1775
1776 int yy_lac_established = 0;
1777 int yyn;
1778 int yyresult;
1779 /* Lookahead token as an internal (translated) token number. */
1780 int yytoken = 0;
1781 /* The variables used to return semantic value and location from the
1782 action routines. */
1783 YYSTYPE yyval;
1784 YYLTYPE yyloc;
1785
1786 #if YYERROR_VERBOSE
1787 /* Buffer for error messages, and its allocated size. */
1788 char yymsgbuf[128];
1789 char *yymsg = yymsgbuf;
1790 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1791 #endif
1792
1793 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
1794
1795 /* The number of symbols on the RHS of the reduced rule.
1796 Keep to zero when no symbol should be popped. */
1797 int yylen = 0;
1798
1799 yyssp = yyss = yyssa;
1800 yyvsp = yyvs = yyvsa;
1801 yylsp = yyls = yylsa;
1802 yystacksize = YYINITDEPTH;
1803
1804 yyes = yyesa;
1805 yyes_capacity = sizeof yyesa / sizeof *yyes;
1806 if (YYMAXDEPTH < yyes_capacity)
1807 yyes_capacity = YYMAXDEPTH;
1808
1809 YYDPRINTF ((stderr, "Starting parse\n"));
1810
1811 yystate = 0;
1812 yyerrstatus = 0;
1813 yynerrs = 0;
1814 yychar = YYEMPTY; /* Cause a token to be read. */
1815
1816 /* User initialization code. */
1817 #line 103 "src/parse-gram.y" /* yacc.c:1446 */
1818 {
1819 /* Bison's grammar can initial empty locations, hence a default
1820 location is needed. */
1821 boundary_set (&yylloc.start, current_file, 1, 1);
1822 boundary_set (&yylloc.end, current_file, 1, 1);
1823 }
1824
1825 #line 1826 "src/parse-gram.c" /* yacc.c:1446 */
1826 yylsp[0] = yylloc;
1827 goto yysetstate;
1828
1829 /*------------------------------------------------------------.
1830 | yynewstate -- Push a new state, which is found in yystate. |
1831 `------------------------------------------------------------*/
1832 yynewstate:
1833 /* In all cases, when you get here, the value and location stacks
1834 have just been pushed. So pushing a state here evens the stacks. */
1835 yyssp++;
1836
1837 yysetstate:
1838 *yyssp = yystate;
1839
1840 if (yyss + yystacksize - 1 <= yyssp)
1841 {
1842 /* Get the current used size of the three stacks, in elements. */
1843 YYSIZE_T yysize = yyssp - yyss + 1;
1844
1845 #ifdef yyoverflow
1846 {
1847 /* Give user a chance to reallocate the stack. Use copies of
1848 these so that the &'s don't force the real ones into
1849 memory. */
1850 YYSTYPE *yyvs1 = yyvs;
1851 yytype_int16 *yyss1 = yyss;
1852 YYLTYPE *yyls1 = yyls;
1853
1854 /* Each stack pointer address is followed by the size of the
1855 data in use in that stack, in bytes. This used to be a
1856 conditional around just the two extra args, but that might
1857 be undefined if yyoverflow is a macro. */
1858 yyoverflow (YY_("memory exhausted"),
1859 &yyss1, yysize * sizeof (*yyssp),
1860 &yyvs1, yysize * sizeof (*yyvsp),
1861 &yyls1, yysize * sizeof (*yylsp),
1862 &yystacksize);
1863
1864 yyls = yyls1;
1865 yyss = yyss1;
1866 yyvs = yyvs1;
1867 }
1868 #else /* no yyoverflow */
1869 # ifndef YYSTACK_RELOCATE
1870 goto yyexhaustedlab;
1871 # else
1872 /* Extend the stack our own way. */
1873 if (YYMAXDEPTH <= yystacksize)
1874 goto yyexhaustedlab;
1875 yystacksize *= 2;
1876 if (YYMAXDEPTH < yystacksize)
1877 yystacksize = YYMAXDEPTH;
1878
1879 {
1880 yytype_int16 *yyss1 = yyss;
1881 union yyalloc *yyptr =
1882 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1883 if (! yyptr)
1884 goto yyexhaustedlab;
1885 YYSTACK_RELOCATE (yyss_alloc, yyss);
1886 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1887 YYSTACK_RELOCATE (yyls_alloc, yyls);
1888 # undef YYSTACK_RELOCATE
1889 if (yyss1 != yyssa)
1890 YYSTACK_FREE (yyss1);
1891 }
1892 # endif
1893 #endif /* no yyoverflow */
1894
1895 yyssp = yyss + yysize - 1;
1896 yyvsp = yyvs + yysize - 1;
1897 yylsp = yyls + yysize - 1;
1898
1899 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1900 (unsigned long int) yystacksize));
1901
1902 if (yyss + yystacksize - 1 <= yyssp)
1903 YYABORT;
1904 }
1905
1906 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1907
1908 if (yystate == YYFINAL)
1909 YYACCEPT;
1910
1911 goto yybackup;
1912
1913 /*-----------.
1914 | yybackup. |
1915 `-----------*/
1916 yybackup:
1917
1918 /* Do appropriate processing given the current state. Read a
1919 lookahead token if we need one and don't already have one. */
1920
1921 /* First try to decide what to do without reference to lookahead token. */
1922 yyn = yypact[yystate];
1923 if (yypact_value_is_default (yyn))
1924 goto yydefault;
1925
1926 /* Not known => get a lookahead token if don't already have one. */
1927
1928 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1929 if (yychar == YYEMPTY)
1930 {
1931 YYDPRINTF ((stderr, "Reading a token: "));
1932 yychar = yylex (&yylval, &yylloc);
1933 }
1934
1935 if (yychar <= YYEOF)
1936 {
1937 yychar = yytoken = YYEOF;
1938 YYDPRINTF ((stderr, "Now at end of input.\n"));
1939 }
1940 else
1941 {
1942 yytoken = YYTRANSLATE (yychar);
1943 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1944 }
1945
1946 /* If the proper action on seeing token YYTOKEN is to reduce or to
1947 detect an error, take that action. */
1948 yyn += yytoken;
1949 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1950 {
1951 YY_LAC_ESTABLISH;
1952 goto yydefault;
1953 }
1954 yyn = yytable[yyn];
1955 if (yyn <= 0)
1956 {
1957 if (yytable_value_is_error (yyn))
1958 goto yyerrlab;
1959 YY_LAC_ESTABLISH;
1960 yyn = -yyn;
1961 goto yyreduce;
1962 }
1963
1964 /* Count tokens shifted since error; after three, turn off error
1965 status. */
1966 if (yyerrstatus)
1967 yyerrstatus--;
1968
1969 /* Shift the lookahead token. */
1970 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1971
1972 /* Discard the shifted token. */
1973 yychar = YYEMPTY;
1974 YY_LAC_DISCARD ("shift");
1975
1976 yystate = yyn;
1977 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1978 *++yyvsp = yylval;
1979 YY_IGNORE_MAYBE_UNINITIALIZED_END
1980 *++yylsp = yylloc;
1981 goto yynewstate;
1982
1983
1984 /*-----------------------------------------------------------.
1985 | yydefault -- do the default action for the current state. |
1986 `-----------------------------------------------------------*/
1987 yydefault:
1988 yyn = yydefact[yystate];
1989 if (yyn == 0)
1990 goto yyerrlab;
1991 goto yyreduce;
1992
1993
1994 /*-----------------------------.
1995 | yyreduce -- Do a reduction. |
1996 `-----------------------------*/
1997 yyreduce:
1998 /* yyn is the number of a rule to reduce with. */
1999 yylen = yyr2[yyn];
2000
2001 /* If YYLEN is nonzero, implement the default value of the action:
2002 '$$ = $1'.
2003
2004 Otherwise, the following line sets YYVAL to garbage.
2005 This behavior is undocumented and Bison
2006 users should not rely upon it. Assigning to YYVAL
2007 unconditionally makes the parser a bit smaller, and it avoids a
2008 GCC warning that YYVAL may be used uninitialized. */
2009 yyval = yyvsp[1-yylen];
2010
2011 /* Default location. */
2012 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
2013 YY_REDUCE_PRINT (yyn);
2014 {
2015 int yychar_backup = yychar;
2016 switch (yyn)
2017 {
2018 case 6:
2019 #line 275 "src/parse-gram.y" /* yacc.c:1663 */
2020 {
2021 muscle_code_grow (union_seen ? "post_prologue" : "pre_prologue",
2022 translate_code ((yyvsp[0].code), (yylsp[0]), true), (yylsp[0]));
2023 code_scanner_last_string_free ();
2024 }
2025 #line 2026 "src/parse-gram.c" /* yacc.c:1663 */
2026 break;
2027
2028 case 7:
2029 #line 281 "src/parse-gram.y" /* yacc.c:1663 */
2030 {
2031 muscle_percent_define_ensure ((yyvsp[0].uniqstr), (yylsp[0]), true);
2032 }
2033 #line 2034 "src/parse-gram.c" /* yacc.c:1663 */
2034 break;
2035
2036 case 8:
2037 #line 285 "src/parse-gram.y" /* yacc.c:1663 */
2038 {
2039 muscle_percent_define_insert ((yyvsp[-1].uniqstr), (yylsp[-1]), (yyvsp[0].value).kind, (yyvsp[0].value).chars,
2040 MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
2041 }
2042 #line 2043 "src/parse-gram.c" /* yacc.c:1663 */
2043 break;
2044
2045 case 9:
2046 #line 289 "src/parse-gram.y" /* yacc.c:1663 */
2047 { defines_flag = true; }
2048 #line 2049 "src/parse-gram.c" /* yacc.c:1663 */
2049 break;
2050
2051 case 10:
2052 #line 291 "src/parse-gram.y" /* yacc.c:1663 */
2053 {
2054 defines_flag = true;
2055 spec_defines_file = xstrdup ((yyvsp[0].code));
2056 }
2057 #line 2058 "src/parse-gram.c" /* yacc.c:1663 */
2058 break;
2059
2060 case 11:
2061 #line 296 "src/parse-gram.y" /* yacc.c:1663 */
2062 {
2063 muscle_percent_define_insert ("parse.error", (yylsp[0]), muscle_keyword,
2064 "verbose",
2065 MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
2066 }
2067 #line 2068 "src/parse-gram.c" /* yacc.c:1663 */
2068 break;
2069
2070 case 12:
2071 #line 301 "src/parse-gram.y" /* yacc.c:1663 */
2072 { expected_sr_conflicts = (yyvsp[0].integer); }
2073 #line 2074 "src/parse-gram.c" /* yacc.c:1663 */
2074 break;
2075
2076 case 13:
2077 #line 302 "src/parse-gram.y" /* yacc.c:1663 */
2078 { expected_rr_conflicts = (yyvsp[0].integer); }
2079 #line 2080 "src/parse-gram.c" /* yacc.c:1663 */
2080 break;
2081
2082 case 14:
2083 #line 303 "src/parse-gram.y" /* yacc.c:1663 */
2084 { spec_file_prefix = (yyvsp[0].code); }
2085 #line 2086 "src/parse-gram.c" /* yacc.c:1663 */
2086 break;
2087
2088 case 15:
2089 #line 305 "src/parse-gram.y" /* yacc.c:1663 */
2090 {
2091 nondeterministic_parser = true;
2092 glr_parser = true;
2093 }
2094 #line 2095 "src/parse-gram.c" /* yacc.c:1663 */
2095 break;
2096
2097 case 16:
2098 #line 310 "src/parse-gram.y" /* yacc.c:1663 */
2099 {
2100 muscle_code_grow ("initial_action", translate_code ((yyvsp[0].code), (yylsp[0]), false), (yylsp[0]));
2101 code_scanner_last_string_free ();
2102 }
2103 #line 2104 "src/parse-gram.c" /* yacc.c:1663 */
2104 break;
2105
2106 case 17:
2107 #line 314 "src/parse-gram.y" /* yacc.c:1663 */
2108 { language_argmatch ((yyvsp[0].code), grammar_prio, (yylsp[-1])); }
2109 #line 2110 "src/parse-gram.c" /* yacc.c:1663 */
2110 break;
2111
2112 case 18:
2113 #line 315 "src/parse-gram.y" /* yacc.c:1663 */
2114 { spec_name_prefix = (yyvsp[0].code); }
2115 #line 2116 "src/parse-gram.c" /* yacc.c:1663 */
2116 break;
2117
2118 case 19:
2119 #line 316 "src/parse-gram.y" /* yacc.c:1663 */
2120 { no_lines_flag = true; }
2121 #line 2122 "src/parse-gram.c" /* yacc.c:1663 */
2122 break;
2123
2124 case 20:
2125 #line 317 "src/parse-gram.y" /* yacc.c:1663 */
2126 { nondeterministic_parser = true; }
2127 #line 2128 "src/parse-gram.c" /* yacc.c:1663 */
2128 break;
2129
2130 case 21:
2131 #line 318 "src/parse-gram.y" /* yacc.c:1663 */
2132 { spec_outfile = (yyvsp[0].code); }
2133 #line 2134 "src/parse-gram.c" /* yacc.c:1663 */
2134 break;
2135
2136 case 22:
2137 #line 319 "src/parse-gram.y" /* yacc.c:1663 */
2138 { current_param = (yyvsp[0].param); }
2139 #line 2140 "src/parse-gram.c" /* yacc.c:1663 */
2140 break;
2141
2142 case 23:
2143 #line 319 "src/parse-gram.y" /* yacc.c:1663 */
2144 { current_param = param_none; }
2145 #line 2146 "src/parse-gram.c" /* yacc.c:1663 */
2146 break;
2147
2148 case 24:
2149 #line 320 "src/parse-gram.y" /* yacc.c:1663 */
2150 { version_check (&(yylsp[0]), (yyvsp[0].code)); }
2151 #line 2152 "src/parse-gram.c" /* yacc.c:1663 */
2152 break;
2153
2154 case 25:
2155 #line 322 "src/parse-gram.y" /* yacc.c:1663 */
2156 {
2157 char const *skeleton_user = (yyvsp[0].code);
2158 if (strchr (skeleton_user, '/'))
2159 {
2160 size_t dir_length = strlen (current_file);
2161 char *skeleton_build;
2162 while (dir_length && current_file[dir_length - 1] != '/')
2163 --dir_length;
2164 while (dir_length && current_file[dir_length - 1] == '/')
2165 --dir_length;
2166 skeleton_build =
2167 xmalloc (dir_length + 1 + strlen (skeleton_user) + 1);
2168 if (dir_length > 0)
2169 {
2170 memcpy (skeleton_build, current_file, dir_length);
2171 skeleton_build[dir_length++] = '/';
2172 }
2173 strcpy (skeleton_build + dir_length, skeleton_user);
2174 skeleton_user = uniqstr_new (skeleton_build);
2175 free (skeleton_build);
2176 }
2177 skeleton_arg (skeleton_user, grammar_prio, (yylsp[-1]));
2178 }
2179 #line 2180 "src/parse-gram.c" /* yacc.c:1663 */
2180 break;
2181
2182 case 26:
2183 #line 345 "src/parse-gram.y" /* yacc.c:1663 */
2184 { token_table_flag = true; }
2185 #line 2186 "src/parse-gram.c" /* yacc.c:1663 */
2186 break;
2187
2188 case 27:
2189 #line 346 "src/parse-gram.y" /* yacc.c:1663 */
2190 { report_flag |= report_states; }
2191 #line 2192 "src/parse-gram.c" /* yacc.c:1663 */
2192 break;
2193
2194 case 28:
2195 #line 347 "src/parse-gram.y" /* yacc.c:1663 */
2196 { yacc_flag = true; }
2197 #line 2198 "src/parse-gram.c" /* yacc.c:1663 */
2198 break;
2199
2200 case 30:
2201 #line 352 "src/parse-gram.y" /* yacc.c:1663 */
2202 { add_param (current_param, (yyvsp[0].code), (yylsp[0])); }
2203 #line 2204 "src/parse-gram.c" /* yacc.c:1663 */
2204 break;
2205
2206 case 31:
2207 #line 353 "src/parse-gram.y" /* yacc.c:1663 */
2208 { add_param (current_param, (yyvsp[0].code), (yylsp[0])); }
2209 #line 2210 "src/parse-gram.c" /* yacc.c:1663 */
2210 break;
2211
2212 case 34:
2213 #line 365 "src/parse-gram.y" /* yacc.c:1663 */
2214 {
2215 grammar_start_symbol_set ((yyvsp[0].symbol), (yylsp[0]));
2216 }
2217 #line 2218 "src/parse-gram.c" /* yacc.c:1663 */
2218 break;
2219
2220 case 35:
2221 #line 369 "src/parse-gram.y" /* yacc.c:1663 */
2222 {
2223 code_props code;
2224 code_props_symbol_action_init (&code, (yyvsp[-1].code), (yylsp[-1]));
2225 code_props_translate_code (&code);
2226 {
2227 symbol_list *list;
2228 for (list = (yyvsp[0].list); list; list = list->next)
2229 symbol_list_code_props_set (list, (yyvsp[-2].code_type), &code);
2230 symbol_list_free ((yyvsp[0].list));
2231 }
2232 }
2233 #line 2234 "src/parse-gram.c" /* yacc.c:1663 */
2234 break;
2235
2236 case 36:
2237 #line 381 "src/parse-gram.y" /* yacc.c:1663 */
2238 {
2239 default_prec = true;
2240 }
2241 #line 2242 "src/parse-gram.c" /* yacc.c:1663 */
2242 break;
2243
2244 case 37:
2245 #line 385 "src/parse-gram.y" /* yacc.c:1663 */
2246 {
2247 default_prec = false;
2248 }
2249 #line 2250 "src/parse-gram.c" /* yacc.c:1663 */
2250 break;
2251
2252 case 38:
2253 #line 389 "src/parse-gram.y" /* yacc.c:1663 */
2254 {
2255 /* Do not invoke muscle_percent_code_grow here since it invokes
2256 muscle_user_name_list_grow. */
2257 muscle_code_grow ("percent_code()",
2258 translate_code_braceless ((yyvsp[0].code), (yylsp[0])), (yylsp[0]));
2259 code_scanner_last_string_free ();
2260 }
2261 #line 2262 "src/parse-gram.c" /* yacc.c:1663 */
2262 break;
2263
2264 case 39:
2265 #line 397 "src/parse-gram.y" /* yacc.c:1663 */
2266 {
2267 muscle_percent_code_grow ((yyvsp[-1].uniqstr), (yylsp[-1]), translate_code_braceless ((yyvsp[0].code), (yylsp[0])), (yylsp[0]));
2268 code_scanner_last_string_free ();
2269 }
2270 #line 2271 "src/parse-gram.c" /* yacc.c:1663 */
2271 break;
2272
2273 case 40:
2274 #line 407 "src/parse-gram.y" /* yacc.c:1663 */
2275 { (yyval.code_type) = destructor; }
2276 #line 2277 "src/parse-gram.c" /* yacc.c:1663 */
2277 break;
2278
2279 case 41:
2280 #line 408 "src/parse-gram.y" /* yacc.c:1663 */
2281 { (yyval.code_type) = printer; }
2282 #line 2283 "src/parse-gram.c" /* yacc.c:1663 */
2283 break;
2284
2285 case 42:
2286 #line 418 "src/parse-gram.y" /* yacc.c:1663 */
2287 {}
2288 #line 2289 "src/parse-gram.c" /* yacc.c:1663 */
2289 break;
2290
2291 case 43:
2292 #line 419 "src/parse-gram.y" /* yacc.c:1663 */
2293 { muscle_code_grow ("union_name", (yyvsp[0].uniqstr), (yylsp[0])); }
2294 #line 2295 "src/parse-gram.c" /* yacc.c:1663 */
2295 break;
2296
2297 case 44:
2298 #line 424 "src/parse-gram.y" /* yacc.c:1663 */
2299 {
2300 union_seen = true;
2301 muscle_code_grow ("union_members", translate_code_braceless ((yyvsp[0].code), (yylsp[0])), (yylsp[0]));
2302 code_scanner_last_string_free ();
2303 }
2304 #line 2305 "src/parse-gram.c" /* yacc.c:1663 */
2305 break;
2306
2307 case 45:
2308 #line 435 "src/parse-gram.y" /* yacc.c:1663 */
2309 { current_class = nterm_sym; }
2310 #line 2311 "src/parse-gram.c" /* yacc.c:1663 */
2311 break;
2312
2313 case 46:
2314 #line 436 "src/parse-gram.y" /* yacc.c:1663 */
2315 {
2316 current_class = unknown_sym;
2317 current_type = NULL;
2318 }
2319 #line 2320 "src/parse-gram.c" /* yacc.c:1663 */
2320 break;
2321
2322 case 47:
2323 #line 440 "src/parse-gram.y" /* yacc.c:1663 */
2324 { current_class = token_sym; }
2325 #line 2326 "src/parse-gram.c" /* yacc.c:1663 */
2326 break;
2327
2328 case 48:
2329 #line 441 "src/parse-gram.y" /* yacc.c:1663 */
2330 {
2331 current_class = unknown_sym;
2332 current_type = NULL;
2333 }
2334 #line 2335 "src/parse-gram.c" /* yacc.c:1663 */
2335 break;
2336
2337 case 49:
2338 #line 446 "src/parse-gram.y" /* yacc.c:1663 */
2339 {
2340 symbol_list *list;
2341 tag_seen = true;
2342 for (list = (yyvsp[0].list); list; list = list->next)
2343 symbol_type_set (list->content.sym, (yyvsp[-1].uniqstr), (yylsp[-1]));
2344 symbol_list_free ((yyvsp[0].list));
2345 }
2346 #line 2347 "src/parse-gram.c" /* yacc.c:1663 */
2347 break;
2348
2349 case 50:
2350 #line 457 "src/parse-gram.y" /* yacc.c:1663 */
2351 {
2352 symbol_list *list;
2353 ++current_prec;
2354 for (list = (yyvsp[0].list); list; list = list->next)
2355 {
2356 symbol_type_set (list->content.sym, current_type, (yylsp[-1]));
2357 symbol_precedence_set (list->content.sym, current_prec, (yyvsp[-2].assoc), (yylsp[-2]));
2358 }
2359 symbol_list_free ((yyvsp[0].list));
2360 current_type = NULL;
2361 }
2362 #line 2363 "src/parse-gram.c" /* yacc.c:1663 */
2363 break;
2364
2365 case 51:
2366 #line 471 "src/parse-gram.y" /* yacc.c:1663 */
2367 { (yyval.assoc) = left_assoc; }
2368 #line 2369 "src/parse-gram.c" /* yacc.c:1663 */
2369 break;
2370
2371 case 52:
2372 #line 472 "src/parse-gram.y" /* yacc.c:1663 */
2373 { (yyval.assoc) = right_assoc; }
2374 #line 2375 "src/parse-gram.c" /* yacc.c:1663 */
2375 break;
2376
2377 case 53:
2378 #line 473 "src/parse-gram.y" /* yacc.c:1663 */
2379 { (yyval.assoc) = non_assoc; }
2380 #line 2381 "src/parse-gram.c" /* yacc.c:1663 */
2381 break;
2382
2383 case 54:
2384 #line 474 "src/parse-gram.y" /* yacc.c:1663 */
2385 { (yyval.assoc) = precedence_assoc; }
2386 #line 2387 "src/parse-gram.c" /* yacc.c:1663 */
2387 break;
2388
2389 case 55:
2390 #line 478 "src/parse-gram.y" /* yacc.c:1663 */
2391 { current_type = NULL; }
2392 #line 2393 "src/parse-gram.c" /* yacc.c:1663 */
2393 break;
2394
2395 case 56:
2396 #line 479 "src/parse-gram.y" /* yacc.c:1663 */
2397 { current_type = (yyvsp[0].uniqstr); tag_seen = true; }
2398 #line 2399 "src/parse-gram.c" /* yacc.c:1663 */
2399 break;
2400
2401 case 57:
2402 #line 485 "src/parse-gram.y" /* yacc.c:1663 */
2403 { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); }
2404 #line 2405 "src/parse-gram.c" /* yacc.c:1663 */
2405 break;
2406
2407 case 58:
2408 #line 487 "src/parse-gram.y" /* yacc.c:1663 */
2409 { (yyval.list) = symbol_list_append ((yyvsp[-1].list), symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0]))); }
2410 #line 2411 "src/parse-gram.c" /* yacc.c:1663 */
2411 break;
2412
2413 case 59:
2414 #line 492 "src/parse-gram.y" /* yacc.c:1663 */
2415 {
2416 (yyval.symbol) = (yyvsp[0].symbol);
2417 symbol_class_set ((yyvsp[0].symbol), token_sym, (yylsp[0]), false);
2418 }
2419 #line 2420 "src/parse-gram.c" /* yacc.c:1663 */
2420 break;
2421
2422 case 60:
2423 #line 497 "src/parse-gram.y" /* yacc.c:1663 */
2424 {
2425 (yyval.symbol) = (yyvsp[-1].symbol);
2426 symbol_user_token_number_set ((yyvsp[-1].symbol), (yyvsp[0].integer), (yylsp[0]));
2427 symbol_class_set ((yyvsp[-1].symbol), token_sym, (yylsp[-1]), false);
2428 }
2429 #line 2430 "src/parse-gram.c" /* yacc.c:1663 */
2430 break;
2431
2432 case 61:
2433 #line 507 "src/parse-gram.y" /* yacc.c:1663 */
2434 { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); }
2435 #line 2436 "src/parse-gram.c" /* yacc.c:1663 */
2436 break;
2437
2438 case 62:
2439 #line 509 "src/parse-gram.y" /* yacc.c:1663 */
2440 { (yyval.list) = symbol_list_append ((yyvsp[-1].list), symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0]))); }
2441 #line 2442 "src/parse-gram.c" /* yacc.c:1663 */
2442 break;
2443
2444 case 63:
2445 #line 513 "src/parse-gram.y" /* yacc.c:1663 */
2446 { (yyval.list) = (yyvsp[0].list); }
2447 #line 2448 "src/parse-gram.c" /* yacc.c:1663 */
2448 break;
2449
2450 case 64:
2451 #line 514 "src/parse-gram.y" /* yacc.c:1663 */
2452 { (yyval.list) = symbol_list_append ((yyvsp[-1].list), (yyvsp[0].list)); }
2453 #line 2454 "src/parse-gram.c" /* yacc.c:1663 */
2454 break;
2455
2456 case 65:
2457 #line 518 "src/parse-gram.y" /* yacc.c:1663 */
2458 { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); }
2459 #line 2460 "src/parse-gram.c" /* yacc.c:1663 */
2460 break;
2461
2462 case 66:
2463 #line 519 "src/parse-gram.y" /* yacc.c:1663 */
2464 { (yyval.list) = symbol_list_type_new ((yyvsp[0].uniqstr), (yylsp[0])); }
2465 #line 2466 "src/parse-gram.c" /* yacc.c:1663 */
2466 break;
2467
2468 case 68:
2469 #line 524 "src/parse-gram.y" /* yacc.c:1663 */
2470 { (yyval.uniqstr) = uniqstr_new ("*"); }
2471 #line 2472 "src/parse-gram.c" /* yacc.c:1663 */
2472 break;
2473
2474 case 69:
2475 #line 525 "src/parse-gram.y" /* yacc.c:1663 */
2476 { (yyval.uniqstr) = uniqstr_new (""); }
2477 #line 2478 "src/parse-gram.c" /* yacc.c:1663 */
2478 break;
2479
2480 case 70:
2481 #line 531 "src/parse-gram.y" /* yacc.c:1663 */
2482 {
2483 current_type = (yyvsp[0].uniqstr);
2484 tag_seen = true;
2485 }
2486 #line 2487 "src/parse-gram.c" /* yacc.c:1663 */
2487 break;
2488
2489 case 71:
2490 #line 536 "src/parse-gram.y" /* yacc.c:1663 */
2491 {
2492 symbol_class_set ((yyvsp[0].symbol), current_class, (yylsp[0]), true);
2493 symbol_type_set ((yyvsp[0].symbol), current_type, (yylsp[0]));
2494 }
2495 #line 2496 "src/parse-gram.c" /* yacc.c:1663 */
2496 break;
2497
2498 case 72:
2499 #line 541 "src/parse-gram.y" /* yacc.c:1663 */
2500 {
2501 symbol_class_set ((yyvsp[-1].symbol), current_class, (yylsp[-1]), true);
2502 symbol_type_set ((yyvsp[-1].symbol), current_type, (yylsp[-1]));
2503 symbol_user_token_number_set ((yyvsp[-1].symbol), (yyvsp[0].integer), (yylsp[0]));
2504 }
2505 #line 2506 "src/parse-gram.c" /* yacc.c:1663 */
2506 break;
2507
2508 case 73:
2509 #line 547 "src/parse-gram.y" /* yacc.c:1663 */
2510 {
2511 symbol_class_set ((yyvsp[-1].symbol), current_class, (yylsp[-1]), true);
2512 symbol_type_set ((yyvsp[-1].symbol), current_type, (yylsp[-1]));
2513 symbol_make_alias ((yyvsp[-1].symbol), (yyvsp[0].symbol), (yyloc));
2514 }
2515 #line 2516 "src/parse-gram.c" /* yacc.c:1663 */
2516 break;
2517
2518 case 74:
2519 #line 553 "src/parse-gram.y" /* yacc.c:1663 */
2520 {
2521 symbol_class_set ((yyvsp[-2].symbol), current_class, (yylsp[-2]), true);
2522 symbol_type_set ((yyvsp[-2].symbol), current_type, (yylsp[-2]));
2523 symbol_user_token_number_set ((yyvsp[-2].symbol), (yyvsp[-1].integer), (yylsp[-1]));
2524 symbol_make_alias ((yyvsp[-2].symbol), (yyvsp[0].symbol), (yyloc));
2525 }
2526 #line 2527 "src/parse-gram.c" /* yacc.c:1663 */
2527 break;
2528
2529 case 81:
2530 #line 583 "src/parse-gram.y" /* yacc.c:1663 */
2531 {
2532 yyerrok;
2533 }
2534 #line 2535 "src/parse-gram.c" /* yacc.c:1663 */
2535 break;
2536
2537 case 82:
2538 #line 589 "src/parse-gram.y" /* yacc.c:1663 */
2539 { current_lhs ((yyvsp[-1].symbol), (yylsp[-1]), (yyvsp[0].named_ref)); }
2540 #line 2541 "src/parse-gram.c" /* yacc.c:1663 */
2541 break;
2542
2543 case 83:
2544 #line 590 "src/parse-gram.y" /* yacc.c:1663 */
2545 {
2546 /* Free the current lhs. */
2547 current_lhs (0, (yylsp[-3]), 0);
2548 }
2549 #line 2550 "src/parse-gram.c" /* yacc.c:1663 */
2550 break;
2551
2552 case 84:
2553 #line 597 "src/parse-gram.y" /* yacc.c:1663 */
2554 { grammar_current_rule_end ((yylsp[0])); }
2555 #line 2556 "src/parse-gram.c" /* yacc.c:1663 */
2556 break;
2557
2558 case 85:
2559 #line 598 "src/parse-gram.y" /* yacc.c:1663 */
2560 { grammar_current_rule_end ((yylsp[0])); }
2561 #line 2562 "src/parse-gram.c" /* yacc.c:1663 */
2562 break;
2563
2564 case 87:
2565 #line 605 "src/parse-gram.y" /* yacc.c:1663 */
2566 { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location,
2567 current_lhs_named_ref); }
2568 #line 2569 "src/parse-gram.c" /* yacc.c:1663 */
2569 break;
2570
2571 case 88:
2572 #line 608 "src/parse-gram.y" /* yacc.c:1663 */
2573 { grammar_current_rule_symbol_append ((yyvsp[-1].symbol), (yylsp[-1]), (yyvsp[0].named_ref)); }
2574 #line 2575 "src/parse-gram.c" /* yacc.c:1663 */
2575 break;
2576
2577 case 89:
2578 #line 610 "src/parse-gram.y" /* yacc.c:1663 */
2579 { grammar_current_rule_action_append ((yyvsp[-1].code), (yylsp[-1]), (yyvsp[0].named_ref), false); }
2580 #line 2581 "src/parse-gram.c" /* yacc.c:1663 */
2581 break;
2582
2583 case 90:
2584 #line 612 "src/parse-gram.y" /* yacc.c:1663 */
2585 { grammar_current_rule_action_append ((yyvsp[0].code), (yylsp[0]), NULL, true); }
2586 #line 2587 "src/parse-gram.c" /* yacc.c:1663 */
2587 break;
2588
2589 case 91:
2590 #line 614 "src/parse-gram.y" /* yacc.c:1663 */
2591 { grammar_current_rule_empty_set ((yylsp[0])); }
2592 #line 2593 "src/parse-gram.c" /* yacc.c:1663 */
2593 break;
2594
2595 case 92:
2596 #line 616 "src/parse-gram.y" /* yacc.c:1663 */
2597 { grammar_current_rule_prec_set ((yyvsp[0].symbol), (yylsp[0])); }
2598 #line 2599 "src/parse-gram.c" /* yacc.c:1663 */
2599 break;
2600
2601 case 93:
2602 #line 618 "src/parse-gram.y" /* yacc.c:1663 */
2603 { grammar_current_rule_dprec_set ((yyvsp[0].integer), (yylsp[0])); }
2604 #line 2605 "src/parse-gram.c" /* yacc.c:1663 */
2605 break;
2606
2607 case 94:
2608 #line 620 "src/parse-gram.y" /* yacc.c:1663 */
2609 { grammar_current_rule_merge_set ((yyvsp[0].uniqstr), (yylsp[0])); }
2610 #line 2611 "src/parse-gram.c" /* yacc.c:1663 */
2611 break;
2612
2613 case 95:
2614 #line 624 "src/parse-gram.y" /* yacc.c:1663 */
2615 { (yyval.named_ref) = 0; }
2616 #line 2617 "src/parse-gram.c" /* yacc.c:1663 */
2617 break;
2618
2619 case 96:
2620 #line 625 "src/parse-gram.y" /* yacc.c:1663 */
2621 { (yyval.named_ref) = named_ref_new((yyvsp[0].uniqstr), (yylsp[0])); }
2622 #line 2623 "src/parse-gram.c" /* yacc.c:1663 */
2623 break;
2624
2625 case 98:
2626 #line 636 "src/parse-gram.y" /* yacc.c:1663 */
2627 { (yyval.uniqstr) = uniqstr_new ((yyvsp[0].code)); }
2628 #line 2629 "src/parse-gram.c" /* yacc.c:1663 */
2629 break;
2630
2631 case 99:
2632 #line 661 "src/parse-gram.y" /* yacc.c:1663 */
2633 { (yyval.value).kind = muscle_keyword; (yyval.value).chars = ""; }
2634 #line 2635 "src/parse-gram.c" /* yacc.c:1663 */
2635 break;
2636
2637 case 100:
2638 #line 662 "src/parse-gram.y" /* yacc.c:1663 */
2639 { (yyval.value).kind = muscle_keyword; (yyval.value).chars = (yyvsp[0].uniqstr); }
2640 #line 2641 "src/parse-gram.c" /* yacc.c:1663 */
2641 break;
2642
2643 case 101:
2644 #line 663 "src/parse-gram.y" /* yacc.c:1663 */
2645 { (yyval.value).kind = muscle_string; (yyval.value).chars = (yyvsp[0].code); }
2646 #line 2647 "src/parse-gram.c" /* yacc.c:1663 */
2647 break;
2648
2649 case 102:
2650 #line 664 "src/parse-gram.y" /* yacc.c:1663 */
2651 { (yyval.value).kind = muscle_code; (yyval.value).chars = strip_braces ((yyvsp[0].code)); }
2652 #line 2653 "src/parse-gram.c" /* yacc.c:1663 */
2653 break;
2654
2655 case 103:
2656 #line 677 "src/parse-gram.y" /* yacc.c:1663 */
2657 { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[0].uniqstr), (yylsp[0])); }
2658 #line 2659 "src/parse-gram.c" /* yacc.c:1663 */
2659 break;
2660
2661 case 104:
2662 #line 679 "src/parse-gram.y" /* yacc.c:1663 */
2663 {
2664 (yyval.symbol) = symbol_get (char_name ((yyvsp[0].character)), (yylsp[0]));
2665 symbol_class_set ((yyval.symbol), token_sym, (yylsp[0]), false);
2666 symbol_user_token_number_set ((yyval.symbol), (yyvsp[0].character), (yylsp[0]));
2667 }
2668 #line 2669 "src/parse-gram.c" /* yacc.c:1663 */
2669 break;
2670
2671 case 105:
2672 #line 687 "src/parse-gram.y" /* yacc.c:1663 */
2673 { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[0].uniqstr), (yylsp[0])); }
2674 #line 2675 "src/parse-gram.c" /* yacc.c:1663 */
2675 break;
2676
2677 case 108:
2678 #line 699 "src/parse-gram.y" /* yacc.c:1663 */
2679 {
2680 (yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[0].code)), (yylsp[0]));
2681 symbol_class_set ((yyval.symbol), token_sym, (yylsp[0]), false);
2682 }
2683 #line 2684 "src/parse-gram.c" /* yacc.c:1663 */
2684 break;
2685
2686 case 110:
2687 #line 708 "src/parse-gram.y" /* yacc.c:1663 */
2688 {
2689 muscle_code_grow ("epilogue", translate_code ((yyvsp[0].code), (yylsp[0]), true), (yylsp[0]));
2690 code_scanner_last_string_free ();
2691 }
2692 #line 2693 "src/parse-gram.c" /* yacc.c:1663 */
2693 break;
2694
2695
2696 #line 2697 "src/parse-gram.c" /* yacc.c:1663 */
2697 default: break;
2698 }
2699 if (yychar_backup != yychar)
2700 YY_LAC_DISCARD ("yychar change");
2701 }
2702 /* User semantic actions sometimes alter yychar, and that requires
2703 that yytoken be updated with the new translation. We take the
2704 approach of translating immediately before every use of yytoken.
2705 One alternative is translating here after every semantic action,
2706 but that translation would be missed if the semantic action invokes
2707 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
2708 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
2709 incorrect destructor might then be invoked immediately. In the
2710 case of YYERROR or YYBACKUP, subsequent parser actions might lead
2711 to an incorrect destructor call or verbose syntax error message
2712 before the lookahead is translated. */
2713 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
2714
2715 YYPOPSTACK (yylen);
2716 yylen = 0;
2717 YY_STACK_PRINT (yyss, yyssp);
2718
2719 *++yyvsp = yyval;
2720 *++yylsp = yyloc;
2721
2722 /* Now 'shift' the result of the reduction. Determine what state
2723 that goes to, based on the state we popped back to and the rule
2724 number reduced by. */
2725
2726 yyn = yyr1[yyn];
2727
2728 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
2729 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
2730 yystate = yytable[yystate];
2731 else
2732 yystate = yydefgoto[yyn - YYNTOKENS];
2733
2734 goto yynewstate;
2735
2736
2737 /*--------------------------------------.
2738 | yyerrlab -- here on detecting error. |
2739 `--------------------------------------*/
2740 yyerrlab:
2741 /* Make sure we have latest lookahead translation. See comments at
2742 user semantic actions for why this is necessary. */
2743 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
2744
2745 /* If not already recovering from an error, report this error. */
2746 if (!yyerrstatus)
2747 {
2748 ++yynerrs;
2749 #if ! YYERROR_VERBOSE
2750 yyerror (&yylloc, YY_("syntax error"));
2751 #else
2752 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
2753 yyesa, &yyes, &yyes_capacity, \
2754 yyssp, yytoken)
2755 {
2756 char const *yymsgp = YY_("syntax error");
2757 int yysyntax_error_status;
2758 if (yychar != YYEMPTY)
2759 YY_LAC_ESTABLISH;
2760 yysyntax_error_status = YYSYNTAX_ERROR;
2761 if (yysyntax_error_status == 0)
2762 yymsgp = yymsg;
2763 else if (yysyntax_error_status == 1)
2764 {
2765 if (yymsg != yymsgbuf)
2766 YYSTACK_FREE (yymsg);
2767 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
2768 if (!yymsg)
2769 {
2770 yymsg = yymsgbuf;
2771 yymsg_alloc = sizeof yymsgbuf;
2772 yysyntax_error_status = 2;
2773 }
2774 else
2775 {
2776 yysyntax_error_status = YYSYNTAX_ERROR;
2777 yymsgp = yymsg;
2778 }
2779 }
2780 yyerror (&yylloc, yymsgp);
2781 if (yysyntax_error_status == 2)
2782 goto yyexhaustedlab;
2783 }
2784 # undef YYSYNTAX_ERROR
2785 #endif
2786 }
2787
2788 yyerror_range[1] = yylloc;
2789
2790 if (yyerrstatus == 3)
2791 {
2792 /* If just tried and failed to reuse lookahead token after an
2793 error, discard it. */
2794
2795 if (yychar <= YYEOF)
2796 {
2797 /* Return failure if at end of input. */
2798 if (yychar == YYEOF)
2799 YYABORT;
2800 }
2801 else
2802 {
2803 yydestruct ("Error: discarding",
2804 yytoken, &yylval, &yylloc);
2805 yychar = YYEMPTY;
2806 }
2807 }
2808
2809 /* Else will try to reuse lookahead token after shifting the error
2810 token. */
2811 goto yyerrlab1;
2812
2813
2814 /*---------------------------------------------------.
2815 | yyerrorlab -- error raised explicitly by YYERROR. |
2816 `---------------------------------------------------*/
2817 yyerrorlab:
2818
2819 /* Pacify compilers like GCC when the user code never invokes
2820 YYERROR and the label yyerrorlab therefore never appears in user
2821 code. */
2822 if (/*CONSTCOND*/ 0)
2823 goto yyerrorlab;
2824
2825 yyerror_range[1] = yylsp[1-yylen];
2826 /* Do not reclaim the symbols of the rule whose action triggered
2827 this YYERROR. */
2828 YYPOPSTACK (yylen);
2829 yylen = 0;
2830 YY_STACK_PRINT (yyss, yyssp);
2831 yystate = *yyssp;
2832 goto yyerrlab1;
2833
2834
2835 /*-------------------------------------------------------------.
2836 | yyerrlab1 -- common code for both syntax error and YYERROR. |
2837 `-------------------------------------------------------------*/
2838 yyerrlab1:
2839 yyerrstatus = 3; /* Each real token shifted decrements this. */
2840
2841 for (;;)
2842 {
2843 yyn = yypact[yystate];
2844 if (!yypact_value_is_default (yyn))
2845 {
2846 yyn += YYTERROR;
2847 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2848 {
2849 yyn = yytable[yyn];
2850 if (0 < yyn)
2851 break;
2852 }
2853 }
2854
2855 /* Pop the current state because it cannot handle the error token. */
2856 if (yyssp == yyss)
2857 YYABORT;
2858
2859 yyerror_range[1] = *yylsp;
2860 yydestruct ("Error: popping",
2861 yystos[yystate], yyvsp, yylsp);
2862 YYPOPSTACK (1);
2863 yystate = *yyssp;
2864 YY_STACK_PRINT (yyss, yyssp);
2865 }
2866
2867 /* If the stack popping above didn't lose the initial context for the
2868 current lookahead token, the shift below will for sure. */
2869 YY_LAC_DISCARD ("error recovery");
2870
2871 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2872 *++yyvsp = yylval;
2873 YY_IGNORE_MAYBE_UNINITIALIZED_END
2874
2875 yyerror_range[2] = yylloc;
2876 /* Using YYLLOC is tempting, but would change the location of
2877 the lookahead. YYLOC is available though. */
2878 YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
2879 *++yylsp = yyloc;
2880
2881 /* Shift the error token. */
2882 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
2883
2884 yystate = yyn;
2885 goto yynewstate;
2886
2887
2888 /*-------------------------------------.
2889 | yyacceptlab -- YYACCEPT comes here. |
2890 `-------------------------------------*/
2891 yyacceptlab:
2892 yyresult = 0;
2893 goto yyreturn;
2894
2895 /*-----------------------------------.
2896 | yyabortlab -- YYABORT comes here. |
2897 `-----------------------------------*/
2898 yyabortlab:
2899 yyresult = 1;
2900 goto yyreturn;
2901
2902 #if 1
2903 /*-------------------------------------------------.
2904 | yyexhaustedlab -- memory exhaustion comes here. |
2905 `-------------------------------------------------*/
2906 yyexhaustedlab:
2907 yyerror (&yylloc, YY_("memory exhausted"));
2908 yyresult = 2;
2909 /* Fall through. */
2910 #endif
2911
2912 yyreturn:
2913 if (yychar != YYEMPTY)
2914 {
2915 /* Make sure we have latest lookahead translation. See comments at
2916 user semantic actions for why this is necessary. */
2917 yytoken = YYTRANSLATE (yychar);
2918 yydestruct ("Cleanup: discarding lookahead",
2919 yytoken, &yylval, &yylloc);
2920 }
2921 /* Do not reclaim the symbols of the rule whose action triggered
2922 this YYABORT or YYACCEPT. */
2923 YYPOPSTACK (yylen);
2924 YY_STACK_PRINT (yyss, yyssp);
2925 while (yyssp != yyss)
2926 {
2927 yydestruct ("Cleanup: popping",
2928 yystos[*yyssp], yyvsp, yylsp);
2929 YYPOPSTACK (1);
2930 }
2931 #ifndef yyoverflow
2932 if (yyss != yyssa)
2933 YYSTACK_FREE (yyss);
2934 #endif
2935 if (yyes != yyesa)
2936 YYSTACK_FREE (yyes);
2937 #if YYERROR_VERBOSE
2938 if (yymsg != yymsgbuf)
2939 YYSTACK_FREE (yymsg);
2940 #endif
2941 return yyresult;
2942 }
2943 #line 714 "src/parse-gram.y" /* yacc.c:1923 */
2944
2945
2946 /* Return the location of the left-hand side of a rule whose
2947 right-hand side is RHS[1] ... RHS[N]. Ignore empty nonterminals in
2948 the right-hand side, and return an empty location equal to the end
2949 boundary of RHS[0] if the right-hand side is empty. */
2950
2951 static YYLTYPE
2952 lloc_default (YYLTYPE const *rhs, int n)
2953 {
2954 int i;
2955 YYLTYPE loc;
2956
2957 /* SGI MIPSpro 7.4.1m miscompiles "loc.start = loc.end = rhs[n].end;".
2958 The bug is fixed in 7.4.2m, but play it safe for now. */
2959 loc.start = rhs[n].end;
2960 loc.end = rhs[n].end;
2961
2962 /* Ignore empty nonterminals the start of the right-hand side.
2963 Do not bother to ignore them at the end of the right-hand side,
2964 since empty nonterminals have the same end as their predecessors. */
2965 for (i = 1; i <= n; i++)
2966 if (! equal_boundaries (rhs[i].start, rhs[i].end))
2967 {
2968 loc.start = rhs[i].start;
2969 break;
2970 }
2971
2972 return loc;
2973 }
2974
2975 static
2976 char *strip_braces (char *code)
2977 {
2978 code[strlen(code) - 1] = 0;
2979 return code + 1;
2980 }
2981
2982 static
2983 char const *
2984 translate_code (char *code, location loc, bool plain)
2985 {
2986 code_props plain_code;
2987 if (plain)
2988 code_props_plain_init (&plain_code, code, loc);
2989 else
2990 code_props_symbol_action_init (&plain_code, code, loc);
2991 code_props_translate_code (&plain_code);
2992 gram_scanner_last_string_free ();
2993 return plain_code.code;
2994 }
2995
2996 static
2997 char const *
2998 translate_code_braceless (char *code, location loc)
2999 {
3000 return translate_code (strip_braces (code), loc, true);
3001 }
3002
3003 static void
3004 add_param (param_type type, char *decl, location loc)
3005 {
3006 static char const alphanum[26 + 26 + 1 + 10] =
3007 "abcdefghijklmnopqrstuvwxyz"
3008 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
3009 "_"
3010 "0123456789";
3011
3012 char const *name_start = NULL;
3013 {
3014 char *p;
3015 /* Stop on last actual character. */
3016 for (p = decl; p[1]; p++)
3017 if ((p == decl
3018 || ! memchr (alphanum, p[-1], sizeof alphanum))
3019 && memchr (alphanum, p[0], sizeof alphanum - 10))
3020 name_start = p;
3021
3022 /* Strip the surrounding '{' and '}', and any blanks just inside
3023 the braces. */
3024 --p;
3025 while (c_isspace ((unsigned char) *p))
3026 --p;
3027 p[1] = '\0';
3028 ++decl;
3029 while (c_isspace ((unsigned char) *decl))
3030 ++decl;
3031 }
3032
3033 if (! name_start)
3034 complain (&loc, complaint, _("missing identifier in parameter declaration"));
3035 else
3036 {
3037 char *name = xmemdup0 (name_start, strspn (name_start, alphanum));
3038 if (type & param_lex)
3039 muscle_pair_list_grow ("lex_param", decl, name);
3040 if (type & param_parse)
3041 muscle_pair_list_grow ("parse_param", decl, name);
3042 free (name);
3043 }
3044
3045 gram_scanner_last_string_free ();
3046 }
3047
3048
3049 static void
3050 version_check (location const *loc, char const *version)
3051 {
3052 if (strverscmp (version, PACKAGE_VERSION) > 0)
3053 {
3054 complain (loc, complaint, "require bison %s, but have %s",
3055 version, PACKAGE_VERSION);
3056 exit (EX_MISMATCH);
3057 }
3058 }
3059
3060 static void
3061 gram_error (location const *loc, char const *msg)
3062 {
3063 complain (loc, complaint, "%s", msg);
3064 }
3065
3066 char const *
3067 token_name (int type)
3068 {
3069 return yytname[YYTRANSLATE (type)];
3070 }
3071
3072 static char const *
3073 char_name (char c)
3074 {
3075 if (c == '\'')
3076 return "'\\''";
3077 else
3078 {
3079 char buf[4];
3080 buf[0] = '\''; buf[1] = c; buf[2] = '\''; buf[3] = '\0';
3081 return quotearg_style (escape_quoting_style, buf);
3082 }
3083 }
3084
3085 static
3086 void
3087 current_lhs (symbol *sym, location loc, named_ref *ref)
3088 {
3089 current_lhs_symbol = sym;
3090 current_lhs_location = loc;
3091 /* In order to simplify memory management, named references for lhs
3092 are always assigned by deep copy into the current symbol_list
3093 node. This is because a single named-ref in the grammar may
3094 result in several uses when the user factors lhs between several
3095 rules using "|". Therefore free the parser's original copy. */
3096 free (current_lhs_named_ref);
3097 current_lhs_named_ref = ref;
3098 }