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