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