1 /* A Bison parser, made by GNU Bison 2.1a. */
3 /* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA. */
21 /* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
26 /* C LALR(1) parser skeleton written by Richard Stallman, by
27 simplifying the original so-called "semantic" parser. */
29 /* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
36 /* Identify Bison output. */
40 #define YYBISON_VERSION "2.1a"
43 #define YYSKELETON_NAME "yacc.c"
48 /* Using locations. */
49 #define YYLSP_NEEDED 1
51 /* Substitute the variable and function names. */
52 #define yyparse gram_parse
53 #define yylex gram_lex
54 #define yyerror gram_error
55 #define yylval gram_lval
56 #define yychar gram_char
57 #define yydebug gram_debug
58 #define yynerrs gram_nerrs
59 #define yylloc gram_lloc
64 /* Put the tokens into the symbol table, so that GDB and other debuggers
73 PERCENT_DESTRUCTOR
= 263,
74 PERCENT_PRINTER
= 264,
78 PERCENT_NONASSOC
= 268,
83 PERCENT_DEFAULT_PREC
= 273,
85 PERCENT_DEFINES
= 275,
86 PERCENT_ERROR_VERBOSE
= 276,
88 PERCENT_EXPECT_RR
= 278,
89 PERCENT_FILE_PREFIX
= 279,
90 PERCENT_GLR_PARSER
= 280,
91 PERCENT_INITIAL_ACTION
= 281,
92 PERCENT_LEX_PARAM
= 282,
93 PERCENT_LOCATIONS
= 283,
94 PERCENT_NAME_PREFIX
= 284,
95 PERCENT_NO_DEFAULT_PREC
= 285,
96 PERCENT_NO_LINES
= 286,
97 PERCENT_NONDETERMINISTIC_PARSER
= 287,
99 PERCENT_PARSE_PARAM
= 289,
100 PERCENT_PURE_PARSER
= 290,
101 PERCENT_REQUIRE
= 291,
102 PERCENT_SKELETON
= 292,
104 PERCENT_TOKEN_TABLE
= 294,
105 PERCENT_VERBOSE
= 295,
113 PERCENT_PERCENT
= 303,
123 #define PERCENT_TOKEN 260
124 #define PERCENT_NTERM 261
125 #define PERCENT_TYPE 262
126 #define PERCENT_DESTRUCTOR 263
127 #define PERCENT_PRINTER 264
128 #define PERCENT_UNION 265
129 #define PERCENT_LEFT 266
130 #define PERCENT_RIGHT 267
131 #define PERCENT_NONASSOC 268
132 #define PERCENT_PREC 269
133 #define PERCENT_DPREC 270
134 #define PERCENT_MERGE 271
135 #define PERCENT_DEBUG 272
136 #define PERCENT_DEFAULT_PREC 273
137 #define PERCENT_DEFINE 274
138 #define PERCENT_DEFINES 275
139 #define PERCENT_ERROR_VERBOSE 276
140 #define PERCENT_EXPECT 277
141 #define PERCENT_EXPECT_RR 278
142 #define PERCENT_FILE_PREFIX 279
143 #define PERCENT_GLR_PARSER 280
144 #define PERCENT_INITIAL_ACTION 281
145 #define PERCENT_LEX_PARAM 282
146 #define PERCENT_LOCATIONS 283
147 #define PERCENT_NAME_PREFIX 284
148 #define PERCENT_NO_DEFAULT_PREC 285
149 #define PERCENT_NO_LINES 286
150 #define PERCENT_NONDETERMINISTIC_PARSER 287
151 #define PERCENT_OUTPUT 288
152 #define PERCENT_PARSE_PARAM 289
153 #define PERCENT_PURE_PARSER 290
154 #define PERCENT_REQUIRE 291
155 #define PERCENT_SKELETON 292
156 #define PERCENT_START 293
157 #define PERCENT_TOKEN_TABLE 294
158 #define PERCENT_VERBOSE 295
159 #define PERCENT_YACC 296
162 #define SEMICOLON 299
166 #define PERCENT_PERCENT 303
169 #define BRACED_CODE 306
174 /* Copy the first part of user declarations. */
175 #line 1 "parse-gram.y"
176 /* Bison Grammar Parser -*- C -*-
178 Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
180 This file is part of Bison, the GNU Compiler Compiler.
182 This program is free software; you can redistribute it and/or modify
183 it under the terms of the GNU General Public License as published by
184 the Free Software Foundation; either version 2 of the License, or
185 (at your option) any later version.
187 This program is distributed in the hope that it will be useful,
188 but WITHOUT ANY WARRANTY; without even the implied warranty of
189 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
190 GNU General Public License for more details.
192 You should have received a copy of the GNU General Public License
193 along with this program; if not, write to the Free Software
194 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
201 #include "complain.h"
202 #include "conflicts.h"
206 #include "muscle_tab.h"
208 #include "quotearg.h"
211 #include "strverscmp.h"
213 #define YYLLOC_DEFAULT(Current, Rhs, N) (Current) = lloc_default (Rhs, N)
214 static YYLTYPE
lloc_default (YYLTYPE
const *, int);
216 #define YY_LOCATION_PRINT(File, Loc) \
217 location_print (File, Loc)
219 static void version_check (location
const *loc
, char const *version
);
221 /* Request detailed syntax error messages, and pass them to GRAM_ERROR.
222 FIXME: depends on the undocumented availability of YYLLOC. */
224 #define yyerror(Msg) \
225 gram_error (&yylloc, Msg)
226 static void gram_error (location
const *, char const *);
228 static void add_param (char const *, char *, location
);
230 static symbol_class current_class
= unknown_sym
;
231 static uniqstr current_type
= 0;
232 static symbol
*current_lhs
;
233 static location current_lhs_location
;
234 static int current_prec
= 0;
237 /* Enabling traces. */
242 /* Enabling verbose error messages. */
243 #ifdef YYERROR_VERBOSE
244 # undef YYERROR_VERBOSE
245 # define YYERROR_VERBOSE 1
247 # define YYERROR_VERBOSE 1
250 /* Enabling the token table. */
251 #ifndef YYTOKEN_TABLE
252 # define YYTOKEN_TABLE 0
255 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
256 typedef union YYSTYPE
257 #line 82 "parse-gram.y"
266 /* Line 197 of yacc.c. */
267 #line 268 "parse-gram.c"
269 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
270 # define YYSTYPE_IS_DECLARED 1
271 # define YYSTYPE_IS_TRIVIAL 1
274 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
275 typedef struct YYLTYPE
282 # define yyltype YYLTYPE /* obsolescent; will be withdrawn */
283 # define YYLTYPE_IS_DECLARED 1
284 # define YYLTYPE_IS_TRIVIAL 1
288 /* Copy the second part of user declarations. */
291 /* Line 220 of yacc.c. */
292 #line 293 "parse-gram.c"
294 /* Define YYMODERN_C if this compiler supports C89 or better. If
295 __STDC__ is defined, the compiler is modern. IBM xlc 7.0 when run
296 as 'cc' doesn't define __STDC__ (or __STDC_VERSION__) for pedantic
297 reasons, but it defines __C99__FUNC__ so check that as well.
298 Consider a C++ compiler to be modern if it defines __cplusplus. */
300 # if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
301 # define YYMODERN_C 1
303 # define YYMODERN_C 0
308 # if defined (__SIZE_TYPE__)
309 # define YYSIZE_T __SIZE_TYPE__
310 # elif defined (size_t)
311 # define YYSIZE_T size_t
312 # elif ! defined (YYSIZE_T) && YYMODERN_C
313 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
314 # define YYSIZE_T size_t
316 # define YYSIZE_T unsigned int
320 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
325 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
326 # define YY_(msgid) dgettext ("bison-runtime", msgid)
330 # define YY_(msgid) msgid
334 /* Suppress unused-variable warnings by "using" E. */
336 # define YYUSE(e) ((void) (e))
338 # define YYUSE(e) /* empty */
341 /* Identity function, used to suppress warnings about constant conditions. */
345 #if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
358 #if ! defined (yyoverflow) || YYERROR_VERBOSE
360 /* The parser invokes alloca or malloc; define the necessary symbols. */
362 # ifdef YYSTACK_USE_ALLOCA
363 # if YYSTACK_USE_ALLOCA
365 # define YYSTACK_ALLOC __builtin_alloca
366 # elif defined (__BUILTIN_VA_ARG_INCR)
367 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
368 # elif defined (_AIX)
369 # define YYSTACK_ALLOC __alloca
370 # elif defined (_MSC_VER)
371 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
372 # define alloca _alloca
374 # define YYSTACK_ALLOC alloca
375 # if ! defined (_ALLOCA_H) && ! defined (_STDLIB_H) && YYMODERN_C
376 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
385 # ifdef YYSTACK_ALLOC
386 /* Pacify GCC's `empty if-body' warning. */
387 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
388 # ifndef YYSTACK_ALLOC_MAXIMUM
389 /* The OS might guarantee only one guard page at the bottom of the stack,
390 and a page size can be as small as 4096 bytes. So we cannot safely
391 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
392 to allow for a few compiler-allocated temporary stack slots. */
393 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
396 # define YYSTACK_ALLOC YYMALLOC
397 # define YYSTACK_FREE YYFREE
398 # ifndef YYSTACK_ALLOC_MAXIMUM
399 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
405 # define YYMALLOC malloc
406 # if ! defined (malloc) && ! defined (_STDLIB_H) && YYMODERN_C
407 void *malloc (YYSIZE_T
); /* INFRINGES ON USER NAME SPACE */
412 # if ! defined (free) && ! defined (_STDLIB_H) && YYMODERN_C
413 void free (void *); /* INFRINGES ON USER NAME SPACE */
420 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
423 #if (! defined (yyoverflow) \
424 && (! defined (__cplusplus) \
425 || (defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
426 && defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
428 /* A type that is properly aligned for any stack member. */
436 /* The size of the maximum gap between one aligned stack and the next. */
437 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
439 /* The size of an array large to enough to hold all stacks, each with
441 # define YYSTACK_BYTES(N) \
442 ((N) * (sizeof (short int) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
443 + 2 * YYSTACK_GAP_MAXIMUM)
445 /* Copy COUNT objects from FROM to TO. The source and destination do
448 # if defined (__GNUC__) && 1 < __GNUC__
449 # define YYCOPY(To, From, Count) \
450 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
452 # define YYCOPY(To, From, Count) \
456 for (yyi = 0; yyi < (Count); yyi++) \
457 (To)[yyi] = (From)[yyi]; \
463 /* Relocate STACK from its old location to the new one. The
464 local variables YYSIZE and YYSTACKSIZE give the old and new number of
465 elements in the stack, and YYPTR gives the new location of the
466 stack. Advance YYPTR to a properly aligned location for the next
468 # define YYSTACK_RELOCATE(Stack) \
471 YYSIZE_T yynewbytes; \
472 YYCOPY (&yyptr->Stack, Stack, yysize); \
473 Stack = &yyptr->Stack; \
474 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
475 yyptr += yynewbytes / sizeof (*yyptr); \
482 typedef signed char yysigned_char
;
484 typedef short int yysigned_char
;
487 /* YYFINAL -- State number of the termination state. */
489 /* YYLAST -- Last index in YYTABLE. */
492 /* YYNTOKENS -- Number of terminals. */
494 /* YYNNTS -- Number of nonterminals. */
496 /* YYNRULES -- Number of rules. */
498 /* YYNRULES -- Number of states. */
499 #define YYNSTATES 110
501 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
503 #define YYMAXUTOK 306
505 #define YYTRANSLATE(YYX) \
506 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
508 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
509 static const unsigned char yytranslate
[] =
511 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
512 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
513 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
514 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
515 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
516 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
517 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
518 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
519 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
520 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
521 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
522 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
523 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
524 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
525 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
526 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
527 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
528 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
529 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
530 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
531 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
532 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
533 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
534 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
535 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
536 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
537 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
538 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
539 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
540 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
541 45, 46, 47, 48, 49, 50, 51
545 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
547 static const unsigned char yyprhs
[] =
549 0, 0, 3, 8, 9, 12, 14, 16, 18, 21,
550 25, 27, 29, 32, 35, 39, 41, 43, 45, 47,
551 51, 53, 55, 59, 61, 63, 66, 69, 71, 73,
552 75, 77, 79, 81, 84, 86, 89, 92, 94, 96,
553 97, 101, 102, 106, 110, 114, 116, 118, 120, 121,
554 123, 125, 128, 130, 132, 135, 138, 142, 144, 147,
555 149, 152, 154, 157, 160, 161, 165, 167, 171, 174,
556 175, 178, 181, 185, 189, 193, 195, 197, 199, 201,
560 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
561 static const yysigned_char yyrhs
[] =
563 53, 0, -1, 54, 48, 66, 76, -1, -1, 54,
564 55, -1, 56, -1, 49, -1, 17, -1, 19, 75,
565 -1, 19, 75, 75, -1, 20, -1, 21, -1, 22,
566 4, -1, 23, 4, -1, 24, 43, 75, -1, 25,
567 -1, 26, -1, 27, -1, 28, -1, 29, 43, 75,
568 -1, 31, -1, 32, -1, 33, 43, 75, -1, 34,
569 -1, 35, -1, 36, 75, -1, 37, 75, -1, 39,
570 -1, 40, -1, 41, -1, 44, -1, 60, -1, 57,
571 -1, 38, 72, -1, 10, -1, 8, 63, -1, 9,
572 63, -1, 18, -1, 30, -1, -1, 6, 58, 65,
573 -1, -1, 5, 59, 65, -1, 7, 42, 63, -1,
574 61, 62, 63, -1, 11, -1, 12, -1, 13, -1,
575 -1, 42, -1, 72, -1, 63, 72, -1, 42, -1,
576 46, -1, 46, 4, -1, 46, 74, -1, 46, 4,
577 74, -1, 64, -1, 65, 64, -1, 67, -1, 66,
578 67, -1, 68, -1, 56, 44, -1, 1, 44, -1,
579 -1, 47, 69, 70, -1, 71, -1, 70, 45, 71,
580 -1, 70, 44, -1, -1, 71, 72, -1, 71, 73,
581 -1, 71, 14, 72, -1, 71, 15, 4, -1, 71,
582 16, 42, -1, 46, -1, 74, -1, 51, -1, 3,
583 -1, 3, -1, -1, 48, 50, -1
586 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
587 static const unsigned short int yyrline
[] =
589 0, 192, 192, 200, 202, 206, 207, 208, 209, 210,
590 211, 212, 213, 214, 215, 216, 221, 225, 226, 227,
591 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
592 238, 242, 243, 244, 248, 264, 271, 278, 282, 289,
593 289, 294, 294, 299, 309, 324, 325, 326, 330, 331,
594 337, 338, 343, 347, 352, 358, 364, 375, 376, 385,
595 386, 392, 393, 394, 401, 401, 405, 406, 407, 412,
596 413, 415, 417, 419, 421, 426, 427, 431, 437, 446,
601 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
602 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
603 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
604 static const char *const yytname
[] =
606 "\"end of file\"", "error", "$undefined", "\"string\"", "\"integer\"",
607 "\"%token\"", "\"%nterm\"", "\"%type\"", "\"%destructor {...}\"",
608 "\"%printer {...}\"", "\"%union {...}\"", "\"%left\"", "\"%right\"",
609 "\"%nonassoc\"", "\"%prec\"", "\"%dprec\"", "\"%merge\"", "\"%debug\"",
610 "\"%default-prec\"", "\"%define\"", "\"%defines\"", "\"%error-verbose\"",
611 "\"%expect\"", "\"%expect-rr\"", "\"%file-prefix\"", "\"%glr-parser\"",
612 "\"%initial-action {...}\"", "\"%lex-param {...}\"", "\"%locations\"",
613 "\"%name-prefix\"", "\"%no-default-prec\"", "\"%no-lines\"",
614 "\"%nondeterministic-parser\"", "\"%output\"", "\"%parse-param {...}\"",
615 "\"%pure-parser\"", "\"%require\"", "\"%skeleton\"", "\"%start\"",
616 "\"%token-table\"", "\"%verbose\"", "\"%yacc\"", "\"type\"", "\"=\"",
617 "\";\"", "\"|\"", "\"identifier\"", "\"identifier:\"", "\"%%\"",
618 "\"%{...%}\"", "\"epilogue\"", "\"{...}\"", "$accept", "input",
619 "declarations", "declaration", "grammar_declaration",
620 "symbol_declaration", "@1", "@2", "precedence_declaration",
621 "precedence_declarator", "type.opt", "symbols.1", "symbol_def",
622 "symbol_defs.1", "grammar", "rules_or_grammar_declaration", "rules",
623 "@3", "rhses.1", "rhs", "symbol", "action", "string_as_id",
624 "string_content", "epilogue.opt", 0
629 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
631 static const unsigned short int yytoknum
[] =
633 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
634 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
635 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
636 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
637 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
642 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
643 static const unsigned char yyr1
[] =
645 0, 52, 53, 54, 54, 55, 55, 55, 55, 55,
646 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
647 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
648 55, 56, 56, 56, 56, 56, 56, 56, 56, 58,
649 57, 59, 57, 57, 60, 61, 61, 61, 62, 62,
650 63, 63, 64, 64, 64, 64, 64, 65, 65, 66,
651 66, 67, 67, 67, 69, 68, 70, 70, 70, 71,
652 71, 71, 71, 71, 71, 72, 72, 73, 74, 75,
656 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
657 static const unsigned char yyr2
[] =
659 0, 2, 4, 0, 2, 1, 1, 1, 2, 3,
660 1, 1, 2, 2, 3, 1, 1, 1, 1, 3,
661 1, 1, 3, 1, 1, 2, 2, 1, 1, 1,
662 1, 1, 1, 2, 1, 2, 2, 1, 1, 0,
663 3, 0, 3, 3, 3, 1, 1, 1, 0, 1,
664 1, 2, 1, 1, 2, 2, 3, 1, 2, 1,
665 2, 1, 2, 2, 0, 3, 1, 3, 2, 0,
666 2, 2, 3, 3, 3, 1, 1, 1, 1, 1,
670 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
671 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
672 means the default is an error. */
673 static const unsigned char yydefact
[] =
675 3, 0, 0, 1, 41, 39, 0, 0, 0, 34,
676 45, 46, 47, 7, 37, 0, 10, 11, 0, 0,
677 0, 15, 16, 17, 18, 0, 38, 20, 21, 0,
678 23, 24, 0, 0, 0, 27, 28, 29, 30, 0,
679 6, 4, 5, 32, 31, 48, 0, 0, 0, 78,
680 75, 35, 50, 76, 36, 79, 8, 12, 13, 0,
681 0, 0, 25, 26, 33, 0, 64, 0, 0, 59,
682 61, 49, 0, 52, 53, 57, 42, 40, 43, 51,
683 9, 14, 19, 22, 63, 69, 62, 0, 60, 2,
684 44, 54, 55, 58, 65, 66, 81, 56, 68, 69,
685 0, 0, 0, 77, 70, 71, 67, 72, 73, 74
688 /* YYDEFGOTO[NTERM-NUM]. */
689 static const yysigned_char yydefgoto
[] =
691 -1, 1, 2, 41, 67, 43, 47, 46, 44, 45,
692 72, 51, 75, 76, 68, 69, 70, 85, 94, 95,
696 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
698 #define YYPACT_NINF -69
699 static const yysigned_char yypact
[] =
701 -69, 5, 112, -69, -69, -69, -35, 0, 0, -69,
702 -69, -69, -69, -69, -69, 13, -69, -69, 20, 31,
703 -18, -69, -69, -69, -69, -6, -69, -69, -69, -5,
704 -69, -69, 13, 13, 0, -69, -69, -69, -69, 69,
705 -69, -69, -69, -69, -69, -2, -38, -38, 0, -69,
706 -69, 0, -69, -69, 0, -69, 13, -69, -69, 13,
707 13, 13, -69, -69, -69, -8, -69, 3, 21, -69,
708 -69, -69, 0, -69, 6, -69, -38, -38, 0, -69,
709 -69, -69, -69, -69, -69, -69, -69, 2, -69, -69,
710 0, 39, -69, -69, -33, -1, -69, -69, -69, -69,
711 0, 44, 1, -69, -69, -69, -1, -69, -69, -69
714 /* YYPGOTO[NTERM-NUM]. */
715 static const yysigned_char yypgoto
[] =
717 -69, -69, -69, -69, 47, -69, -69, -69, -69, -69,
718 -69, -7, -58, 7, -69, -15, -69, -69, -69, -44,
719 -34, -69, -68, 30, -69
722 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
723 positive, shift that token. If negative, reduce the rule which
724 number is the opposite. If zero, do what YYDEFACT says.
725 If YYTABLE_NINF, syntax error. */
726 #define YYTABLE_NINF -81
727 static const yysigned_char yytable
[] =
729 64, 54, 49, 49, 73, 3, 92, 48, 74, 49,
730 91, 98, 99, 100, 101, 102, 55, 79, 93, 93,
731 79, -80, 65, 97, 57, 59, 4, 5, 6, 7,
732 8, 9, 10, 11, 12, 58, 84, 60, 61, 14,
733 71, 78, 49, 109, 79, 50, 50, 86, 108, 42,
734 103, 26, 96, 88, 77, 106, 79, 0, 0, 34,
735 0, 104, 62, 63, 0, 90, 107, 0, 66, 87,
736 65, 0, 104, 0, 4, 5, 6, 7, 8, 9,
737 10, 11, 12, 0, 0, 0, 80, 14, 0, 81,
738 82, 83, 0, 0, 0, 0, 0, 0, 0, 26,
739 0, 0, 0, 0, 0, 0, 0, 34, 0, 0,
740 0, 0, 0, 0, 0, 0, 66, 4, 5, 6,
741 7, 8, 9, 10, 11, 12, 0, 0, 0, 13,
742 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
743 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
744 34, 35, 36, 37, 0, 0, 38, 0, 0, 0,
748 static const yysigned_char yycheck
[] =
750 34, 8, 3, 3, 42, 0, 74, 42, 46, 3,
751 4, 44, 45, 14, 15, 16, 3, 51, 76, 77,
752 54, 0, 1, 91, 4, 43, 5, 6, 7, 8,
753 9, 10, 11, 12, 13, 4, 44, 43, 43, 18,
754 42, 48, 3, 42, 78, 46, 46, 44, 4, 2,
755 51, 30, 50, 68, 47, 99, 90, -1, -1, 38,
756 -1, 95, 32, 33, -1, 72, 100, -1, 47, 48,
757 1, -1, 106, -1, 5, 6, 7, 8, 9, 10,
758 11, 12, 13, -1, -1, -1, 56, 18, -1, 59,
759 60, 61, -1, -1, -1, -1, -1, -1, -1, 30,
760 -1, -1, -1, -1, -1, -1, -1, 38, -1, -1,
761 -1, -1, -1, -1, -1, -1, 47, 5, 6, 7,
762 8, 9, 10, 11, 12, 13, -1, -1, -1, 17,
763 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
764 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
765 38, 39, 40, 41, -1, -1, 44, -1, -1, -1,
769 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
770 symbol of state STATE-NUM. */
771 static const unsigned char yystos
[] =
773 0, 53, 54, 0, 5, 6, 7, 8, 9, 10,
774 11, 12, 13, 17, 18, 19, 20, 21, 22, 23,
775 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
776 34, 35, 36, 37, 38, 39, 40, 41, 44, 48,
777 49, 55, 56, 57, 60, 61, 59, 58, 42, 3,
778 46, 63, 72, 74, 63, 3, 75, 4, 4, 43,
779 43, 43, 75, 75, 72, 1, 47, 56, 66, 67,
780 68, 42, 62, 42, 46, 64, 65, 65, 63, 72,
781 75, 75, 75, 75, 44, 69, 44, 48, 67, 76,
782 63, 4, 74, 64, 70, 71, 50, 74, 44, 45,
783 14, 15, 16, 51, 72, 73, 71, 72, 4, 42
786 #define yyerrok (yyerrstatus = 0)
787 #define yyclearin (yychar = YYEMPTY)
791 #define YYACCEPT goto yyacceptlab
792 #define YYABORT goto yyabortlab
793 #define YYERROR goto yyerrorlab
796 /* Like YYERROR except do call yyerror. This remains here temporarily
797 to ease the transition to the new meaning of YYERROR, for GCC.
798 Once GCC version 2 has supplanted version 1, this can go. */
800 #define YYFAIL goto yyerrlab
802 #define YYRECOVERING() (!!yyerrstatus)
804 #define YYBACKUP(Token, Value) \
806 if (yychar == YYEMPTY && yylen == 1) \
810 yytoken = YYTRANSLATE (yychar); \
816 yyerror (YY_("syntax error: cannot back up")); \
823 #define YYERRCODE 256
826 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
827 If N is 0, then set CURRENT to the empty location which ends
828 the previous symbol: RHS[0] (always defined). */
830 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
831 #ifndef YYLLOC_DEFAULT
832 # define YYLLOC_DEFAULT(Current, Rhs, N) \
836 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
837 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
838 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
839 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
843 (Current).first_line = (Current).last_line = \
844 YYRHSLOC (Rhs, 0).last_line; \
845 (Current).first_column = (Current).last_column = \
846 YYRHSLOC (Rhs, 0).last_column; \
852 /* YY_LOCATION_PRINT -- Print the location on the stream.
853 This macro was not mandated originally: define only if we know
854 we won't break user code: when these are the locations we know. */
856 #ifndef YY_LOCATION_PRINT
857 # if YYLTYPE_IS_TRIVIAL
858 # define YY_LOCATION_PRINT(File, Loc) \
859 fprintf (File, "%d.%d-%d.%d", \
860 (Loc).first_line, (Loc).first_column, \
861 (Loc).last_line, (Loc).last_column)
863 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
868 /* YYLEX -- calling `yylex' with the right arguments. */
871 # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
873 # define YYLEX yylex (&yylval, &yylloc)
876 /* Enable debugging if requested. */
880 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
881 # define YYFPRINTF fprintf
884 # define YYDPRINTF(Args) \
890 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
894 YYFPRINTF (stderr, "%s ", Title); \
895 yy_symbol_print (stderr, \
896 Type, Value, Location); \
897 YYFPRINTF (stderr, "\n"); \
902 /*--------------------------------.
903 | Print this symbol on YYOUTPUT. |
904 `--------------------------------*/
907 #if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
909 yy_symbol_value_print (FILE *yyoutput
, int yytype
, const YYSTYPE
* const yyvaluep
, const YYLTYPE
* const yylocationp
)
912 yy_symbol_value_print (yyoutput
, yytype
, yyvaluep
, yylocationp
)
915 const YYSTYPE
* const yyvaluep
;
916 const YYLTYPE
* const yylocationp
;
922 if (yytype
< YYNTOKENS
)
923 YYPRINT (yyoutput
, yytoknum
[yytype
], *yyvaluep
);
927 case 3: /* "\"string\"" */
928 #line 169 "parse-gram.y"
929 { fprintf (stderr
, "\"%s\"", (yyvaluep
->chars
)); };
930 #line 931 "parse-gram.c"
932 case 4: /* "\"integer\"" */
933 #line 182 "parse-gram.y"
934 { fprintf (stderr
, "%d", (yyvaluep
->integer
)); };
935 #line 936 "parse-gram.c"
937 case 8: /* "\"%destructor {...}\"" */
938 #line 171 "parse-gram.y"
939 { fprintf (stderr
, "{\n%s\n}", (yyvaluep
->chars
)); };
940 #line 941 "parse-gram.c"
942 case 9: /* "\"%printer {...}\"" */
943 #line 175 "parse-gram.y"
944 { fprintf (stderr
, "{\n%s\n}", (yyvaluep
->chars
)); };
945 #line 946 "parse-gram.c"
947 case 10: /* "\"%union {...}\"" */
948 #line 176 "parse-gram.y"
949 { fprintf (stderr
, "{\n%s\n}", (yyvaluep
->chars
)); };
950 #line 951 "parse-gram.c"
952 case 26: /* "\"%initial-action {...}\"" */
953 #line 172 "parse-gram.y"
954 { fprintf (stderr
, "{\n%s\n}", (yyvaluep
->chars
)); };
955 #line 956 "parse-gram.c"
957 case 27: /* "\"%lex-param {...}\"" */
958 #line 173 "parse-gram.y"
959 { fprintf (stderr
, "{\n%s\n}", (yyvaluep
->chars
)); };
960 #line 961 "parse-gram.c"
962 case 34: /* "\"%parse-param {...}\"" */
963 #line 174 "parse-gram.y"
964 { fprintf (stderr
, "{\n%s\n}", (yyvaluep
->chars
)); };
965 #line 966 "parse-gram.c"
967 case 42: /* "\"type\"" */
968 #line 180 "parse-gram.y"
969 { fprintf (stderr
, "<%s>", (yyvaluep
->uniqstr
)); };
970 #line 971 "parse-gram.c"
972 case 46: /* "\"identifier\"" */
973 #line 184 "parse-gram.y"
974 { fprintf (stderr
, "%s", (yyvaluep
->symbol
)->tag
); };
975 #line 976 "parse-gram.c"
977 case 47: /* "\"identifier:\"" */
978 #line 186 "parse-gram.y"
979 { fprintf (stderr
, "%s:", (yyvaluep
->symbol
)->tag
); };
980 #line 981 "parse-gram.c"
982 case 49: /* "\"%{...%}\"" */
983 #line 178 "parse-gram.y"
984 { fprintf (stderr
, "{\n%s\n}", (yyvaluep
->chars
)); };
985 #line 986 "parse-gram.c"
987 case 50: /* "\"epilogue\"" */
988 #line 178 "parse-gram.y"
989 { fprintf (stderr
, "{\n%s\n}", (yyvaluep
->chars
)); };
990 #line 991 "parse-gram.c"
992 case 51: /* "\"{...}\"" */
993 #line 177 "parse-gram.y"
994 { fprintf (stderr
, "{\n%s\n}", (yyvaluep
->chars
)); };
995 #line 996 "parse-gram.c"
997 case 72: /* "symbol" */
998 #line 184 "parse-gram.y"
999 { fprintf (stderr
, "%s", (yyvaluep
->symbol
)->tag
); };
1000 #line 1001 "parse-gram.c"
1002 case 73: /* "action" */
1003 #line 177 "parse-gram.y"
1004 { fprintf (stderr
, "{\n%s\n}", (yyvaluep
->chars
)); };
1005 #line 1006 "parse-gram.c"
1007 case 74: /* "string_as_id" */
1008 #line 184 "parse-gram.y"
1009 { fprintf (stderr
, "%s", (yyvaluep
->symbol
)->tag
); };
1010 #line 1011 "parse-gram.c"
1012 case 75: /* "string_content" */
1013 #line 169 "parse-gram.y"
1014 { fprintf (stderr
, "\"%s\"", (yyvaluep
->chars
)); };
1015 #line 1016 "parse-gram.c"
1023 /*--------------------------------.
1024 | Print this symbol on YYOUTPUT. |
1025 `--------------------------------*/
1027 #if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
1029 yy_symbol_print (FILE *yyoutput
, int yytype
, const YYSTYPE
* const yyvaluep
, const YYLTYPE
* const yylocationp
)
1032 yy_symbol_print (yyoutput
, yytype
, yyvaluep
, yylocationp
)
1035 const YYSTYPE
* const yyvaluep
;
1036 const YYLTYPE
* const yylocationp
;
1039 if (yytype
< YYNTOKENS
)
1040 YYFPRINTF (yyoutput
, "token %s (", yytname
[yytype
]);
1042 YYFPRINTF (yyoutput
, "nterm %s (", yytname
[yytype
]);
1044 YY_LOCATION_PRINT (yyoutput
, *yylocationp
);
1045 YYFPRINTF (yyoutput
, ": ");
1046 yy_symbol_value_print (yyoutput
, yytype
, yyvaluep
, yylocationp
);
1047 YYFPRINTF (yyoutput
, ")");
1050 /*------------------------------------------------------------------.
1051 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1053 `------------------------------------------------------------------*/
1055 #if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
1057 yy_stack_print (short int *bottom
, short int *top
)
1060 yy_stack_print (bottom
, top
)
1065 YYFPRINTF (stderr
, "Stack now");
1066 for (; bottom
<= top
; ++bottom
)
1067 YYFPRINTF (stderr
, " %d", *bottom
);
1068 YYFPRINTF (stderr
, "\n");
1071 # define YY_STACK_PRINT(Bottom, Top) \
1074 yy_stack_print ((Bottom), (Top)); \
1078 /*------------------------------------------------.
1079 | Report that the YYRULE is going to be reduced. |
1080 `------------------------------------------------*/
1082 #if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
1084 yy_reduce_print (YYSTYPE
*yyvsp
, YYLTYPE
*yylsp
, int yyrule
)
1087 yy_reduce_print (yyvsp
, yylsp
, yyrule
1094 int yynrhs
= yyr2
[yyrule
];
1096 unsigned long int yylno
= yyrline
[yyrule
];
1097 YYFPRINTF (stderr
, "Reducing stack by rule %d (line %lu):\n",
1099 /* The symbols being reduced. */
1100 for (yyi
= 0; yyi
< yynrhs
; yyi
++)
1102 fprintf (stderr
, " $%d = ", yyi
+ 1);
1103 yy_symbol_print (stderr
, yyrhs
[yyprhs
[yyrule
] + yyi
],
1104 &(yyvsp
[(yyi
+ 1) - (yynrhs
)])
1105 , &(yylsp
[(yyi
+ 1) - (yynrhs
)]) );
1106 fprintf (stderr
, "\n");
1110 # define YY_REDUCE_PRINT(Rule) \
1113 yy_reduce_print (yyvsp, yylsp, Rule); \
1116 /* Nonzero means print parse trace. It is left uninitialized so that
1117 multiple parsers can coexist. */
1119 #else /* !YYDEBUG */
1120 # define YYDPRINTF(Args)
1121 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1122 # define YY_STACK_PRINT(Bottom, Top)
1123 # define YY_REDUCE_PRINT(Rule)
1124 #endif /* !YYDEBUG */
1127 /* YYINITDEPTH -- initial size of the parser's stacks. */
1129 # define YYINITDEPTH 200
1132 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1133 if the built-in stack extension method is used).
1135 Do not make this value too large; the results are undefined if
1136 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1137 evaluated with infinite-precision integer arithmetic. */
1140 # define YYMAXDEPTH 10000
1148 # if defined (__GLIBC__) && defined (_STRING_H)
1149 # define yystrlen strlen
1151 /* Return the length of YYSTR. */
1154 yystrlen (const char *yystr
)
1161 for (yylen
= 0; yystr
[yylen
]; yylen
++)
1169 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1170 # define yystpcpy stpcpy
1172 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1176 yystpcpy (char *yydest
, const char *yysrc
)
1178 yystpcpy (yydest
, yysrc
)
1184 const char *yys
= yysrc
;
1186 while ((*yyd
++ = *yys
++) != '\0')
1195 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1196 quotes and backslashes, so that it's suitable for yyerror. The
1197 heuristic is that double-quoting is unnecessary unless the string
1198 contains an apostrophe, a comma, or backslash (other than
1199 backslash-backslash). YYSTR is taken from yytname. If YYRES is
1200 null, do not copy; instead, return the length of what the result
1203 yytnamerr (char *yyres
, const char *yystr
)
1208 char const *yyp
= yystr
;
1215 goto do_not_strip_quotes
;
1219 goto do_not_strip_quotes
;
1232 do_not_strip_quotes
: ;
1236 return yystrlen (yystr
);
1238 return yystpcpy (yyres
, yystr
) - yyres
;
1242 /* Copy into YYRESULT an error message about the unexpected token
1243 YYCHAR while in state YYSTATE. Return the number of bytes copied,
1244 including the terminating null byte. If YYRESULT is null, do not
1245 copy anything; just return the number of bytes that would be
1246 copied. As a special case, return 0 if an ordinary "syntax error"
1247 message will do. Return YYSIZE_MAXIMUM if overflow occurs during
1248 size calculation. */
1250 yysyntax_error (char *yyresult
, int yystate
, int yychar
)
1252 int yyn
= yypact
[yystate
];
1254 if (! (YYPACT_NINF
< yyn
&& yyn
< YYLAST
))
1258 int yytype
= YYTRANSLATE (yychar
);
1259 YYSIZE_T yysize0
= yytnamerr (0, yytname
[yytype
]);
1260 YYSIZE_T yysize
= yysize0
;
1262 int yysize_overflow
= 0;
1263 enum { YYERROR_VERBOSE_ARGS_MAXIMUM
= 5 };
1264 char const *yyarg
[YYERROR_VERBOSE_ARGS_MAXIMUM
];
1268 /* This is so xgettext sees the translatable formats that are
1269 constructed on the fly. */
1270 YY_("syntax error, unexpected %s");
1271 YY_("syntax error, unexpected %s, expecting %s");
1272 YY_("syntax error, unexpected %s, expecting %s or %s");
1273 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
1274 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
1278 static char const yyunexpected
[] = "syntax error, unexpected %s";
1279 static char const yyexpecting
[] = ", expecting %s";
1280 static char const yyor
[] = " or %s";
1281 char yyformat
[sizeof yyunexpected
1282 + sizeof yyexpecting
- 1
1283 + ((YYERROR_VERBOSE_ARGS_MAXIMUM
- 2)
1284 * (sizeof yyor
- 1))];
1285 char const *yyprefix
= yyexpecting
;
1287 /* Start YYX at -YYN if negative to avoid negative indexes in
1289 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
1291 /* Stay within bounds of both yycheck and yytname. */
1292 int yychecklim
= YYLAST
- yyn
;
1293 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
1296 yyarg
[0] = yytname
[yytype
];
1297 yyfmt
= yystpcpy (yyformat
, yyunexpected
);
1299 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1300 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1302 if (yycount
== YYERROR_VERBOSE_ARGS_MAXIMUM
)
1306 yyformat
[sizeof yyunexpected
- 1] = '\0';
1309 yyarg
[yycount
++] = yytname
[yyx
];
1310 yysize1
= yysize
+ yytnamerr (0, yytname
[yyx
]);
1311 yysize_overflow
|= (yysize1
< yysize
);
1313 yyfmt
= yystpcpy (yyfmt
, yyprefix
);
1317 yyf
= YY_(yyformat
);
1318 yysize1
= yysize
+ yystrlen (yyf
);
1319 yysize_overflow
|= (yysize1
< yysize
);
1322 if (yysize_overflow
)
1323 return YYSIZE_MAXIMUM
;
1327 /* Avoid sprintf, as that infringes on the user's name space.
1328 Don't have undefined behavior even if the translation
1329 produced a string with the wrong number of "%s"s. */
1330 char *yyp
= yyresult
;
1332 while ((*yyp
= *yyf
) != '\0')
1334 if (*yyp
== '%' && yyf
[1] == 's' && yyi
< yycount
)
1336 yyp
+= yytnamerr (yyp
, yyarg
[yyi
++]);
1349 #endif /* YYERROR_VERBOSE */
1352 /*-----------------------------------------------.
1353 | Release the memory associated to this symbol. |
1354 `-----------------------------------------------*/
1357 #if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
1359 yydestruct (const char *yymsg
, int yytype
, YYSTYPE
*yyvaluep
, YYLTYPE
*yylocationp
)
1362 yydestruct (yymsg
, yytype
, yyvaluep
, yylocationp
)
1366 YYLTYPE
*yylocationp
;
1370 YYUSE (yylocationp
);
1374 YY_SYMBOL_PRINT (yymsg
, yytype
, yyvaluep
, yylocationp
);
1385 /* Prevent warnings from -Wmissing-prototypes. */
1387 #ifdef YYPARSE_PARAM
1389 int yyparse (void *YYPARSE_PARAM
);
1393 #else /* ! YYPARSE_PARAM */
1394 #if defined (__STDC__) || defined (__cplusplus)
1399 #endif /* ! YYPARSE_PARAM */
1410 #ifdef YYPARSE_PARAM
1412 int yyparse (void *YYPARSE_PARAM
)
1414 int yyparse (YYPARSE_PARAM
)
1415 void *YYPARSE_PARAM
;
1417 #else /* ! YYPARSE_PARAM */
1418 #if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus)
1428 /* The look-ahead symbol. */
1431 /* The semantic value of the look-ahead symbol. */
1434 /* Number of syntax errors so far. */
1436 /* Location data for the look-ahead symbol. */
1442 /* Number of tokens to shift before error messages enabled. */
1444 /* Look-ahead token as an internal (translated) token number. */
1447 /* Buffer for error messages, and its allocated size. */
1449 char *yymsg
= yymsgbuf
;
1450 YYSIZE_T yymsg_alloc
= sizeof yymsgbuf
;
1453 /* Three stacks and their tools:
1454 `yyss': related to states,
1455 `yyvs': related to semantic values,
1456 `yyls': related to locations.
1458 Refer to the stacks thru separate pointers, to allow yyoverflow
1459 to reallocate them elsewhere. */
1461 /* The state stack. */
1462 short int yyssa
[YYINITDEPTH
];
1463 short int *yyss
= yyssa
;
1466 /* The semantic value stack. */
1467 YYSTYPE yyvsa
[YYINITDEPTH
];
1468 YYSTYPE
*yyvs
= yyvsa
;
1471 /* The location stack. */
1472 YYLTYPE yylsa
[YYINITDEPTH
];
1473 YYLTYPE
*yyls
= yylsa
;
1475 /* The locations where the error started and ended. */
1476 YYLTYPE yyerror_range
[2];
1478 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
1480 YYSIZE_T yystacksize
= YYINITDEPTH
;
1482 /* The variables used to return semantic value and location from the
1487 /* The number of symbols on the RHS of the reduced rule.
1488 Keep to zero when no symbol should be popped. */
1491 YYDPRINTF ((stderr
, "Starting parse\n"));
1496 yychar
= YYEMPTY
; /* Cause a token to be read. */
1498 /* Initialize stack pointers.
1499 Waste one element of value and location stack
1500 so that they stay on the same level as the state stack.
1501 The wasted elements are never initialized. */
1506 #if YYLTYPE_IS_TRIVIAL
1507 /* Initialize the default location before parsing starts. */
1508 yylloc
.first_line
= yylloc
.last_line
= 1;
1509 yylloc
.first_column
= yylloc
.last_column
= 0;
1513 /* User initialization code. */
1514 #line 72 "parse-gram.y"
1516 /* Bison's grammar can initial empty locations, hence a default
1517 location is needed. */
1518 yylloc
.start
.file
= yylloc
.end
.file
= current_file
;
1519 yylloc
.start
.line
= yylloc
.end
.line
= 1;
1520 yylloc
.start
.column
= yylloc
.end
.column
= 0;
1522 /* Line 1088 of yacc.c. */
1523 #line 1524 "parse-gram.c"
1527 /*------------------------------------------------------------.
1528 | yynewstate -- Push a new state, which is found in yystate. |
1529 `------------------------------------------------------------*/
1531 /* In all cases, when you get here, the value and location stacks
1532 have just been pushed. So pushing a state here evens the stacks. */
1538 if (yyss
+ yystacksize
- 1 <= yyssp
)
1540 /* Get the current used size of the three stacks, in elements. */
1541 YYSIZE_T yysize
= yyssp
- yyss
+ 1;
1545 /* Give user a chance to reallocate the stack. Use copies of
1546 these so that the &'s don't force the real ones into
1548 YYSTYPE
*yyvs1
= yyvs
;
1549 short int *yyss1
= yyss
;
1550 YYLTYPE
*yyls1
= yyls
;
1552 /* Each stack pointer address is followed by the size of the
1553 data in use in that stack, in bytes. This used to be a
1554 conditional around just the two extra args, but that might
1555 be undefined if yyoverflow is a macro. */
1556 yyoverflow (YY_("memory exhausted"),
1557 &yyss1
, yysize
* sizeof (*yyssp
),
1558 &yyvs1
, yysize
* sizeof (*yyvsp
),
1559 &yyls1
, yysize
* sizeof (*yylsp
),
1565 #else /* no yyoverflow */
1566 # ifndef YYSTACK_RELOCATE
1567 goto yyexhaustedlab
;
1569 /* Extend the stack our own way. */
1570 if (YYMAXDEPTH
<= yystacksize
)
1571 goto yyexhaustedlab
;
1573 if (YYMAXDEPTH
< yystacksize
)
1574 yystacksize
= YYMAXDEPTH
;
1577 short int *yyss1
= yyss
;
1578 union yyalloc
*yyptr
=
1579 (union yyalloc
*) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize
));
1581 goto yyexhaustedlab
;
1582 YYSTACK_RELOCATE (yyss
);
1583 YYSTACK_RELOCATE (yyvs
);
1584 YYSTACK_RELOCATE (yyls
);
1585 # undef YYSTACK_RELOCATE
1587 YYSTACK_FREE (yyss1
);
1590 #endif /* no yyoverflow */
1592 yyssp
= yyss
+ yysize
- 1;
1593 yyvsp
= yyvs
+ yysize
- 1;
1594 yylsp
= yyls
+ yysize
- 1;
1596 YYDPRINTF ((stderr
, "Stack size increased to %lu\n",
1597 (unsigned long int) yystacksize
));
1599 if (yyss
+ yystacksize
- 1 <= yyssp
)
1603 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
1612 /* Do appropriate processing given the current state. Read a
1613 look-ahead token if we need one and don't already have one. */
1615 /* First try to decide what to do without reference to look-ahead token. */
1616 yyn
= yypact
[yystate
];
1617 if (yyn
== YYPACT_NINF
)
1620 /* Not known => get a look-ahead token if don't already have one. */
1622 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
1623 if (yychar
== YYEMPTY
)
1625 YYDPRINTF ((stderr
, "Reading a token: "));
1629 if (yychar
<= YYEOF
)
1631 yychar
= yytoken
= YYEOF
;
1632 YYDPRINTF ((stderr
, "Now at end of input.\n"));
1636 yytoken
= YYTRANSLATE (yychar
);
1637 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
1640 /* If the proper action on seeing token YYTOKEN is to reduce or to
1641 detect an error, take that action. */
1643 if (yyn
< 0 || YYLAST
< yyn
|| yycheck
[yyn
] != yytoken
)
1648 if (yyn
== 0 || yyn
== YYTABLE_NINF
)
1657 /* Count tokens shifted since error; after three, turn off error
1662 /* Shift the look-ahead token. */
1663 YY_SYMBOL_PRINT ("Shifting", yytoken
, &yylval
, &yylloc
);
1665 /* Discard the shifted token unless it is eof. */
1666 if (yychar
!= YYEOF
)
1675 /*-----------------------------------------------------------.
1676 | yydefault -- do the default action for the current state. |
1677 `-----------------------------------------------------------*/
1679 yyn
= yydefact
[yystate
];
1685 /*-----------------------------.
1686 | yyreduce -- Do a reduction. |
1687 `-----------------------------*/
1689 /* yyn is the number of a rule to reduce with. */
1692 /* If YYLEN is nonzero, implement the default value of the action:
1695 Otherwise, the following line sets YYVAL to garbage.
1696 This behavior is undocumented and Bison
1697 users should not rely upon it. Assigning to YYVAL
1698 unconditionally makes the parser a bit smaller, and it avoids a
1699 GCC warning that YYVAL may be used uninitialized. */
1700 yyval
= yyvsp
[1-yylen
];
1702 /* Default location. */
1703 YYLLOC_DEFAULT (yyloc
, yylsp
- yylen
, yylen
);
1704 YY_REDUCE_PRINT (yyn
);
1708 #line 207 "parse-gram.y"
1709 { prologue_augment ((yyvsp
[(1) - (1)].chars
), (yylsp
[(1) - (1)])); }
1713 #line 208 "parse-gram.y"
1714 { debug_flag
= true; }
1718 #line 209 "parse-gram.y"
1719 { muscle_insert ((yyvsp
[(2) - (2)].chars
), "1"); }
1723 #line 210 "parse-gram.y"
1724 { muscle_insert ((yyvsp
[(2) - (3)].chars
), (yyvsp
[(3) - (3)].chars
)); }
1728 #line 211 "parse-gram.y"
1729 { defines_flag
= true; }
1733 #line 212 "parse-gram.y"
1734 { error_verbose
= true; }
1738 #line 213 "parse-gram.y"
1739 { expected_sr_conflicts
= (yyvsp
[(2) - (2)].integer
); }
1743 #line 214 "parse-gram.y"
1744 { expected_rr_conflicts
= (yyvsp
[(2) - (2)].integer
); }
1748 #line 215 "parse-gram.y"
1749 { spec_file_prefix
= (yyvsp
[(3) - (3)].chars
); }
1753 #line 217 "parse-gram.y"
1755 nondeterministic_parser
= true;
1761 #line 222 "parse-gram.y"
1763 muscle_code_grow ("initial_action", (yyvsp
[(1) - (1)].chars
), (yylsp
[(1) - (1)]));
1768 #line 225 "parse-gram.y"
1769 { add_param ("lex_param", (yyvsp
[(1) - (1)].chars
), (yylsp
[(1) - (1)])); }
1773 #line 226 "parse-gram.y"
1774 { locations_flag
= true; }
1778 #line 227 "parse-gram.y"
1779 { spec_name_prefix
= (yyvsp
[(3) - (3)].chars
); }
1783 #line 228 "parse-gram.y"
1784 { no_lines_flag
= true; }
1788 #line 229 "parse-gram.y"
1789 { nondeterministic_parser
= true; }
1793 #line 230 "parse-gram.y"
1794 { spec_outfile
= (yyvsp
[(3) - (3)].chars
); }
1798 #line 231 "parse-gram.y"
1799 { add_param ("parse_param", (yyvsp
[(1) - (1)].chars
), (yylsp
[(1) - (1)])); }
1803 #line 232 "parse-gram.y"
1804 { pure_parser
= true; }
1808 #line 233 "parse-gram.y"
1809 { version_check (&(yylsp
[(2) - (2)]), (yyvsp
[(2) - (2)].chars
)); }
1813 #line 234 "parse-gram.y"
1814 { skeleton
= (yyvsp
[(2) - (2)].chars
); }
1818 #line 235 "parse-gram.y"
1819 { token_table_flag
= true; }
1823 #line 236 "parse-gram.y"
1824 { report_flag
= report_states
; }
1828 #line 237 "parse-gram.y"
1829 { yacc_flag
= true; }
1833 #line 245 "parse-gram.y"
1835 grammar_start_symbol_set ((yyvsp
[(2) - (2)].symbol
), (yylsp
[(2) - (2)]));
1840 #line 249 "parse-gram.y"
1842 char const *body
= (yyvsp
[(1) - (1)].chars
);
1846 /* Concatenate the union bodies, turning the first one's
1847 trailing '}' into '\n', and omitting the second one's '{'. */
1848 char *code
= muscle_find ("stype");
1849 code
[strlen (code
) - 1] = '\n';
1854 muscle_code_grow ("stype", body
, (yylsp
[(1) - (1)]));
1859 #line 265 "parse-gram.y"
1862 for (list
= (yyvsp
[(2) - (2)].list
); list
; list
= list
->next
)
1863 symbol_destructor_set (list
->sym
, (yyvsp
[(1) - (2)].chars
), (yylsp
[(1) - (2)]));
1864 symbol_list_free ((yyvsp
[(2) - (2)].list
));
1869 #line 272 "parse-gram.y"
1872 for (list
= (yyvsp
[(2) - (2)].list
); list
; list
= list
->next
)
1873 symbol_printer_set (list
->sym
, (yyvsp
[(1) - (2)].chars
), list
->location
);
1874 symbol_list_free ((yyvsp
[(2) - (2)].list
));
1879 #line 279 "parse-gram.y"
1881 default_prec
= true;
1886 #line 283 "parse-gram.y"
1888 default_prec
= false;
1893 #line 289 "parse-gram.y"
1894 { current_class
= nterm_sym
; }
1898 #line 290 "parse-gram.y"
1900 current_class
= unknown_sym
;
1901 current_type
= NULL
;
1906 #line 294 "parse-gram.y"
1907 { current_class
= token_sym
; }
1911 #line 295 "parse-gram.y"
1913 current_class
= unknown_sym
;
1914 current_type
= NULL
;
1919 #line 300 "parse-gram.y"
1922 for (list
= (yyvsp
[(3) - (3)].list
); list
; list
= list
->next
)
1923 symbol_type_set (list
->sym
, (yyvsp
[(2) - (3)].uniqstr
), (yylsp
[(2) - (3)]));
1924 symbol_list_free ((yyvsp
[(3) - (3)].list
));
1929 #line 310 "parse-gram.y"
1933 for (list
= (yyvsp
[(3) - (3)].list
); list
; list
= list
->next
)
1935 symbol_type_set (list
->sym
, current_type
, (yylsp
[(2) - (3)]));
1936 symbol_precedence_set (list
->sym
, current_prec
, (yyvsp
[(1) - (3)].assoc
), (yylsp
[(1) - (3)]));
1938 symbol_list_free ((yyvsp
[(3) - (3)].list
));
1939 current_type
= NULL
;
1944 #line 324 "parse-gram.y"
1945 { (yyval
.assoc
) = left_assoc
; }
1949 #line 325 "parse-gram.y"
1950 { (yyval
.assoc
) = right_assoc
; }
1954 #line 326 "parse-gram.y"
1955 { (yyval
.assoc
) = non_assoc
; }
1959 #line 330 "parse-gram.y"
1960 { current_type
= NULL
; }
1964 #line 331 "parse-gram.y"
1965 { current_type
= (yyvsp
[(1) - (1)].uniqstr
); }
1969 #line 337 "parse-gram.y"
1970 { (yyval
.list
) = symbol_list_new ((yyvsp
[(1) - (1)].symbol
), (yylsp
[(1) - (1)])); }
1974 #line 338 "parse-gram.y"
1975 { (yyval
.list
) = symbol_list_prepend ((yyvsp
[(1) - (2)].list
), (yyvsp
[(2) - (2)].symbol
), (yylsp
[(2) - (2)])); }
1979 #line 344 "parse-gram.y"
1981 current_type
= (yyvsp
[(1) - (1)].uniqstr
);
1986 #line 348 "parse-gram.y"
1988 symbol_class_set ((yyvsp
[(1) - (1)].symbol
), current_class
, (yylsp
[(1) - (1)]), true);
1989 symbol_type_set ((yyvsp
[(1) - (1)].symbol
), current_type
, (yylsp
[(1) - (1)]));
1994 #line 353 "parse-gram.y"
1996 symbol_class_set ((yyvsp
[(1) - (2)].symbol
), current_class
, (yylsp
[(1) - (2)]), true);
1997 symbol_type_set ((yyvsp
[(1) - (2)].symbol
), current_type
, (yylsp
[(1) - (2)]));
1998 symbol_user_token_number_set ((yyvsp
[(1) - (2)].symbol
), (yyvsp
[(2) - (2)].integer
), (yylsp
[(2) - (2)]));
2003 #line 359 "parse-gram.y"
2005 symbol_class_set ((yyvsp
[(1) - (2)].symbol
), current_class
, (yylsp
[(1) - (2)]), true);
2006 symbol_type_set ((yyvsp
[(1) - (2)].symbol
), current_type
, (yylsp
[(1) - (2)]));
2007 symbol_make_alias ((yyvsp
[(1) - (2)].symbol
), (yyvsp
[(2) - (2)].symbol
), (yyloc
));
2012 #line 365 "parse-gram.y"
2014 symbol_class_set ((yyvsp
[(1) - (3)].symbol
), current_class
, (yylsp
[(1) - (3)]), true);
2015 symbol_type_set ((yyvsp
[(1) - (3)].symbol
), current_type
, (yylsp
[(1) - (3)]));
2016 symbol_user_token_number_set ((yyvsp
[(1) - (3)].symbol
), (yyvsp
[(2) - (3)].integer
), (yylsp
[(2) - (3)]));
2017 symbol_make_alias ((yyvsp
[(1) - (3)].symbol
), (yyvsp
[(3) - (3)].symbol
), (yyloc
));
2022 #line 395 "parse-gram.y"
2029 #line 401 "parse-gram.y"
2030 { current_lhs
= (yyvsp
[(1) - (1)].symbol
); current_lhs_location
= (yylsp
[(1) - (1)]); }
2034 #line 405 "parse-gram.y"
2035 { grammar_current_rule_end ((yylsp
[(1) - (1)])); }
2039 #line 406 "parse-gram.y"
2040 { grammar_current_rule_end ((yylsp
[(3) - (3)])); }
2044 #line 412 "parse-gram.y"
2045 { grammar_current_rule_begin (current_lhs
, current_lhs_location
); }
2049 #line 414 "parse-gram.y"
2050 { grammar_current_rule_symbol_append ((yyvsp
[(2) - (2)].symbol
), (yylsp
[(2) - (2)])); }
2054 #line 416 "parse-gram.y"
2055 { grammar_current_rule_action_append ((yyvsp
[(2) - (2)].chars
), (yylsp
[(2) - (2)])); }
2059 #line 418 "parse-gram.y"
2060 { grammar_current_rule_prec_set ((yyvsp
[(3) - (3)].symbol
), (yylsp
[(3) - (3)])); }
2064 #line 420 "parse-gram.y"
2065 { grammar_current_rule_dprec_set ((yyvsp
[(3) - (3)].integer
), (yylsp
[(3) - (3)])); }
2069 #line 422 "parse-gram.y"
2070 { grammar_current_rule_merge_set ((yyvsp
[(3) - (3)].uniqstr
), (yylsp
[(3) - (3)])); }
2074 #line 426 "parse-gram.y"
2075 { (yyval
.symbol
) = (yyvsp
[(1) - (1)].symbol
); }
2079 #line 427 "parse-gram.y"
2080 { (yyval
.symbol
) = (yyvsp
[(1) - (1)].symbol
); }
2084 #line 432 "parse-gram.y"
2085 { (yyval
.chars
) = (yyvsp
[(1) - (1)].chars
); }
2089 #line 438 "parse-gram.y"
2091 (yyval
.symbol
) = symbol_get (quotearg_style (c_quoting_style
, (yyvsp
[(1) - (1)].chars
)), (yylsp
[(1) - (1)]));
2092 symbol_class_set ((yyval
.symbol
), token_sym
, (yylsp
[(1) - (1)]), false);
2097 #line 447 "parse-gram.y"
2098 { (yyval
.chars
) = (yyvsp
[(1) - (1)].chars
); }
2102 #line 454 "parse-gram.y"
2104 muscle_code_grow ("epilogue", (yyvsp
[(2) - (2)].chars
), (yylsp
[(2) - (2)]));
2105 scanner_last_string_free ();
2110 /* Line 1277 of yacc.c. */
2111 #line 2112 "parse-gram.c"
2114 YY_SYMBOL_PRINT ("-> $$ =", yyr1
[yyn
], &yyval
, &yyloc
);
2118 YY_STACK_PRINT (yyss
, yyssp
);
2123 /* Now `shift' the result of the reduction. Determine what state
2124 that goes to, based on the state we popped back to and the rule
2125 number reduced by. */
2129 yystate
= yypgoto
[yyn
- YYNTOKENS
] + *yyssp
;
2130 if (0 <= yystate
&& yystate
<= YYLAST
&& yycheck
[yystate
] == *yyssp
)
2131 yystate
= yytable
[yystate
];
2133 yystate
= yydefgoto
[yyn
- YYNTOKENS
];
2138 /*------------------------------------.
2139 | yyerrlab -- here on detecting error |
2140 `------------------------------------*/
2142 /* If not already recovering from an error, report this error. */
2146 #if ! YYERROR_VERBOSE
2147 yyerror (YY_("syntax error"));
2150 YYSIZE_T yysize
= yysyntax_error (0, yystate
, yychar
);
2151 if (yymsg_alloc
< yysize
&& yymsg_alloc
< YYSTACK_ALLOC_MAXIMUM
)
2153 YYSIZE_T yyalloc
= 2 * yysize
;
2154 if (! (yysize
<= yyalloc
&& yyalloc
<= YYSTACK_ALLOC_MAXIMUM
))
2155 yyalloc
= YYSTACK_ALLOC_MAXIMUM
;
2156 if (yymsg
!= yymsgbuf
)
2157 YYSTACK_FREE (yymsg
);
2158 yymsg
= (char *) YYSTACK_ALLOC (yyalloc
);
2160 yymsg_alloc
= yyalloc
;
2164 yymsg_alloc
= sizeof yymsgbuf
;
2168 if (0 < yysize
&& yysize
<= yymsg_alloc
)
2170 (void) yysyntax_error (yymsg
, yystate
, yychar
);
2175 yyerror (YY_("syntax error"));
2177 goto yyexhaustedlab
;
2183 yyerror_range
[0] = yylloc
;
2185 if (yyerrstatus
== 3)
2187 /* If just tried and failed to reuse look-ahead token after an
2188 error, discard it. */
2190 if (yychar
<= YYEOF
)
2192 /* Return failure if at end of input. */
2193 if (yychar
== YYEOF
)
2198 yydestruct ("Error: discarding",
2199 yytoken
, &yylval
, &yylloc
);
2204 /* Else will try to reuse look-ahead token after shifting the error
2209 /*---------------------------------------------------.
2210 | yyerrorlab -- error raised explicitly by YYERROR. |
2211 `---------------------------------------------------*/
2214 /* Pacify compilers like GCC when the user code never invokes
2215 YYERROR and the label yyerrorlab therefore never appears in user
2217 if (/*CONSTCOND*/ 0)
2220 yyerror_range
[0] = yylsp
[1-yylen
];
2221 /* Do not reclaim the symbols of the rule which action triggered
2225 YY_STACK_PRINT (yyss
, yyssp
);
2230 /*-------------------------------------------------------------.
2231 | yyerrlab1 -- common code for both syntax error and YYERROR. |
2232 `-------------------------------------------------------------*/
2234 yyerrstatus
= 3; /* Each real token shifted decrements this. */
2238 yyn
= yypact
[yystate
];
2239 if (yyn
!= YYPACT_NINF
)
2242 if (0 <= yyn
&& yyn
<= YYLAST
&& yycheck
[yyn
] == YYTERROR
)
2250 /* Pop the current state because it cannot handle the error token. */
2254 yyerror_range
[0] = *yylsp
;
2255 yydestruct ("Error: popping",
2256 yystos
[yystate
], yyvsp
, yylsp
);
2259 YY_STACK_PRINT (yyss
, yyssp
);
2267 yyerror_range
[1] = yylloc
;
2268 /* Using YYLLOC is tempting, but would change the location of
2269 the look-ahead. YYLOC is available though. */
2270 YYLLOC_DEFAULT (yyloc
, yyerror_range
- 1, 2);
2273 /* Shift the error token. */
2274 YY_SYMBOL_PRINT ("Shifting", yystos
[yyn
], yyvsp
, yylsp
);
2280 /*-------------------------------------.
2281 | yyacceptlab -- YYACCEPT comes here. |
2282 `-------------------------------------*/
2287 /*-----------------------------------.
2288 | yyabortlab -- YYABORT comes here. |
2289 `-----------------------------------*/
2295 /*-------------------------------------------------.
2296 | yyexhaustedlab -- memory exhaustion comes here. |
2297 `-------------------------------------------------*/
2299 yyerror (YY_("memory exhausted"));
2305 if (yychar
!= YYEOF
&& yychar
!= YYEMPTY
)
2306 yydestruct ("Cleanup: discarding lookahead",
2307 yytoken
, &yylval
, &yylloc
);
2308 /* Do not reclaim the symbols of the rule which action triggered
2309 this YYABORT or YYACCEPT. */
2311 YY_STACK_PRINT (yyss
, yyssp
);
2312 while (yyssp
!= yyss
)
2314 yydestruct ("Cleanup: popping",
2315 yystos
[*yyssp
], yyvsp
, yylsp
);
2320 YYSTACK_FREE (yyss
);
2323 if (yymsg
!= yymsgbuf
)
2324 YYSTACK_FREE (yymsg
);
2330 #line 460 "parse-gram.y"
2334 /* Return the location of the left-hand side of a rule whose
2335 right-hand side is RHS[1] ... RHS[N]. Ignore empty nonterminals in
2336 the right-hand side, and return an empty location equal to the end
2337 boundary of RHS[0] if the right-hand side is empty. */
2340 lloc_default (YYLTYPE
const *rhs
, int n
)
2345 /* SGI MIPSpro 7.4.1m miscompiles "loc.start = loc.end = rhs[n].end;".
2346 The bug is fixed in 7.4.2m, but play it safe for now. */
2347 loc
.start
= rhs
[n
].end
;
2348 loc
.end
= rhs
[n
].end
;
2350 /* Ignore empty nonterminals the start of the the right-hand side.
2351 Do not bother to ignore them at the end of the right-hand side,
2352 since empty nonterminals have the same end as their predecessors. */
2353 for (i
= 1; i
<= n
; i
++)
2354 if (! equal_boundaries (rhs
[i
].start
, rhs
[i
].end
))
2356 loc
.start
= rhs
[i
].start
;
2364 /* Add a lex-param or a parse-param (depending on TYPE) with
2365 declaration DECL and location LOC. */
2368 add_param (char const *type
, char *decl
, location loc
)
2370 static char const alphanum
[26 + 26 + 1 + 10] =
2371 "abcdefghijklmnopqrstuvwxyz"
2372 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
2375 char const *name_start
= NULL
;
2378 /* Stop on last actual character. */
2379 for (p
= decl
; p
[1]; p
++)
2381 || ! memchr (alphanum
, p
[-1], sizeof alphanum
))
2382 && memchr (alphanum
, p
[0], sizeof alphanum
- 10))
2385 /* Strip the surrounding '{' and '}', and any blanks just inside
2387 while (*--p
== ' ' || *p
== '\t')
2390 while (*++decl
== ' ' || *decl
== '\t')
2394 complain_at (loc
, _("missing identifier in parameter declaration"));
2401 memchr (alphanum
, name_start
[name_len
], sizeof alphanum
);
2405 name
= xmalloc (name_len
+ 1);
2406 memcpy (name
, name_start
, name_len
);
2407 name
[name_len
] = '\0';
2408 muscle_pair_list_grow (type
, decl
, name
);
2412 scanner_last_string_free ();
2416 version_check (location
const *loc
, char const *version
)
2418 if (strverscmp (version
, PACKAGE_VERSION
) > 0)
2420 complain_at (*loc
, "require bison %s, but have %s",
2421 version
, PACKAGE_VERSION
);
2427 gram_error (location
const *loc
, char const *msg
)
2429 complain_at (*loc
, "%s", msg
);
2433 token_name (int type
)
2435 return yytname
[YYTRANSLATE (type
)];