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