]> git.saurik.com Git - bison.git/blame - src/parse-gram.c
("@oline@"): Output lineno+1, not lineno.
[bison.git] / src / parse-gram.c
CommitLineData
8e4900ef 1/* A Bison parser, made by GNU Bison 1.875. */
e9955c83 2
c76e14da 3/* Skeleton parser for Yacc-like parsing with Bison,
04b6e11e 4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 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. */
e9955c83
AD
160#line 31 "parse-gram.y"
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
PE
214#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
215#line 74 "parse-gram.y"
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. */
73521d9f
PE
225#line 225 "parse-gram.c"
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. */
73521d9f 249#line 249 "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{
73521d9f
PE
445 0, 160, 160, 168, 170, 174, 175, 176, 177, 178,
446 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
447 189, 190, 191, 192, 193, 194, 198, 199, 200, 204,
448 210, 217, 227, 227, 232, 232, 237, 247, 262, 263,
449 264, 268, 269, 275, 276, 281, 285, 290, 296, 302,
450 313, 314, 323, 324, 330, 331, 336, 340, 344, 344,
451 348, 349, 354, 355, 357, 359, 361, 363, 368, 369,
452 373, 379, 388, 395, 397
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
e9955c83 657#define YYERROR goto yyerrlab1
1921f1d7 658
e9955c83
AD
659/* Like YYERROR except do call yyerror. This remains here temporarily
660 to ease the transition to the new meaning of YYERROR, for GCC.
661 Once GCC version 2 has supplanted version 1, this can go. */
1921f1d7 662
e9955c83 663#define YYFAIL goto yyerrlab
1921f1d7 664
e9955c83 665#define YYRECOVERING() (!!yyerrstatus)
1921f1d7 666
e9955c83
AD
667#define YYBACKUP(Token, Value) \
668do \
73521d9f 669 if (yychar == YYEMPTY && yylen == 1) \
e9955c83
AD
670 { \
671 yychar = (Token); \
672 yylval = (Value); \
886b69d1 673 yytoken = YYTRANSLATE (yychar); \
e9955c83
AD
674 YYPOPSTACK; \
675 goto yybackup; \
676 } \
677 else \
678 { \
f0616f0b 679 yyerror ("syntax error: cannot back up");\
e9955c83
AD
680 YYERROR; \
681 } \
682while (0)
683
684#define YYTERROR 1
685#define YYERRCODE 256
686
687/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1921f1d7 688 are run). */
e9955c83
AD
689
690#ifndef YYLLOC_DEFAULT
f0616f0b 691# define YYLLOC_DEFAULT(Current, Rhs, N) \
1921f1d7
AD
692 Current.first_line = Rhs[1].first_line; \
693 Current.first_column = Rhs[1].first_column; \
694 Current.last_line = Rhs[N].last_line; \
695 Current.last_column = Rhs[N].last_column;
e9955c83
AD
696#endif
697
698/* YYLEX -- calling `yylex' with the right arguments. */
699
366eea36 700#ifdef YYLEX_PARAM
d33cb3ae 701# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
366eea36 702#else
d33cb3ae 703# define YYLEX yylex (&yylval, &yylloc)
366eea36 704#endif
e9955c83
AD
705
706/* Enable debugging if requested. */
707#if YYDEBUG
708
709# ifndef YYFPRINTF
710# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
711# define YYFPRINTF fprintf
712# endif
713
714# define YYDPRINTF(Args) \
715do { \
716 if (yydebug) \
717 YYFPRINTF Args; \
718} while (0)
05d18c24 719
e776192e
AD
720# define YYDSYMPRINT(Args) \
721do { \
722 if (yydebug) \
723 yysymprint Args; \
724} while (0)
05d18c24 725
f0616f0b
PE
726# define YYDSYMPRINTF(Title, Token, Value, Location) \
727do { \
728 if (yydebug) \
729 { \
730 YYFPRINTF (stderr, "%s ", Title); \
731 yysymprint (stderr, \
732 Token, Value, Location); \
733 YYFPRINTF (stderr, "\n"); \
734 } \
735} while (0)
736
05d18c24
PE
737/*------------------------------------------------------------------.
738| yy_stack_print -- Print the state stack from its BOTTOM up to its |
739| TOP (cinluded). |
740`------------------------------------------------------------------*/
741
742#if defined (__STDC__) || defined (__cplusplus)
743static void
744yy_stack_print (short *bottom, short *top)
745#else
746static void
747yy_stack_print (bottom, top)
748 short *bottom;
749 short *top;
750#endif
751{
752 YYFPRINTF (stderr, "Stack now");
753 for (/* Nothing. */; bottom <= top; ++bottom)
754 YYFPRINTF (stderr, " %d", *bottom);
755 YYFPRINTF (stderr, "\n");
756}
757
758# define YY_STACK_PRINT(Bottom, Top) \
759do { \
760 if (yydebug) \
761 yy_stack_print ((Bottom), (Top)); \
762} while (0)
763
764
765/*------------------------------------------------.
766| Report that the YYRULE is going to be reduced. |
767`------------------------------------------------*/
768
769#if defined (__STDC__) || defined (__cplusplus)
770static void
771yy_reduce_print (int yyrule)
772#else
773static void
774yy_reduce_print (yyrule)
775 int yyrule;
776#endif
777{
778 int yyi;
779 unsigned int yylineno = yyrline[yyrule];
780 YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
781 yyrule - 1, yylineno);
782 /* Print the symbols being reduced, and their result. */
783 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
784 YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
785 YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
786}
787
788# define YY_REDUCE_PRINT(Rule) \
789do { \
790 if (yydebug) \
791 yy_reduce_print (Rule); \
792} while (0)
793
e9955c83
AD
794/* Nonzero means print parse trace. It is left uninitialized so that
795 multiple parsers can coexist. */
796int yydebug;
797#else /* !YYDEBUG */
798# define YYDPRINTF(Args)
e776192e 799# define YYDSYMPRINT(Args)
f0616f0b 800# define YYDSYMPRINTF(Title, Token, Value, Location)
05d18c24
PE
801# define YY_STACK_PRINT(Bottom, Top)
802# define YY_REDUCE_PRINT(Rule)
e9955c83
AD
803#endif /* !YYDEBUG */
804
05d18c24 805
e9955c83
AD
806/* YYINITDEPTH -- initial size of the parser's stacks. */
807#ifndef YYINITDEPTH
808# define YYINITDEPTH 200
809#endif
810
811/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
812 if the built-in stack extension method is used).
813
814 Do not make this value too large; the results are undefined if
815 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
816 evaluated with infinite-precision integer arithmetic. */
817
818#if YYMAXDEPTH == 0
819# undef YYMAXDEPTH
820#endif
821
822#ifndef YYMAXDEPTH
823# define YYMAXDEPTH 10000
824#endif
1921f1d7 825
e9955c83 826\f
1921f1d7
AD
827
828#if YYERROR_VERBOSE
e9955c83
AD
829
830# ifndef yystrlen
831# if defined (__GLIBC__) && defined (_STRING_H)
832# define yystrlen strlen
833# else
834/* Return the length of YYSTR. */
835static YYSIZE_T
836# if defined (__STDC__) || defined (__cplusplus)
837yystrlen (const char *yystr)
838# else
839yystrlen (yystr)
840 const char *yystr;
841# endif
842{
843 register const char *yys = yystr;
844
845 while (*yys++ != '\0')
846 continue;
847
848 return yys - yystr - 1;
849}
850# endif
851# endif
852
853# ifndef yystpcpy
854# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
855# define yystpcpy stpcpy
856# else
857/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
858 YYDEST. */
859static char *
860# if defined (__STDC__) || defined (__cplusplus)
861yystpcpy (char *yydest, const char *yysrc)
862# else
863yystpcpy (yydest, yysrc)
864 char *yydest;
865 const char *yysrc;
866# endif
867{
868 register char *yyd = yydest;
869 register const char *yys = yysrc;
870
871 while ((*yyd++ = *yys++) != '\0')
872 continue;
873
874 return yyd - 1;
875}
876# endif
877# endif
0c15323d 878
1921f1d7
AD
879#endif /* !YYERROR_VERBOSE */
880
881\f
e9955c83 882
04b6e11e 883#if YYDEBUG
05d18c24
PE
884/*--------------------------------.
885| Print this symbol on YYOUTPUT. |
886`--------------------------------*/
04b6e11e 887
04b6e11e 888#if defined (__STDC__) || defined (__cplusplus)
d33cb3ae 889static void
05d18c24 890yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
04b6e11e 891#else
d33cb3ae 892static void
05d18c24
PE
893yysymprint (yyoutput, yytype, yyvaluep, yylocationp)
894 FILE *yyoutput;
04b6e11e 895 int yytype;
886b69d1
AD
896 YYSTYPE *yyvaluep;
897 YYLTYPE *yylocationp;
04b6e11e
PE
898#endif
899{
900 /* Pacify ``unused variable'' warnings. */
886b69d1
AD
901 (void) yyvaluep;
902 (void) yylocationp;
04b6e11e
PE
903
904 if (yytype < YYNTOKENS)
905 {
05d18c24 906 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04b6e11e 907# ifdef YYPRINT
05d18c24 908 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04b6e11e
PE
909# endif
910 }
911 else
05d18c24 912 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04b6e11e
PE
913
914 switch (yytype)
915 {
916 default:
917 break;
918 }
05d18c24 919 YYFPRINTF (yyoutput, ")");
04b6e11e 920}
04b6e11e 921
05d18c24 922#endif /* ! YYDEBUG */
04b6e11e
PE
923/*-----------------------------------------------.
924| Release the memory associated to this symbol. |
925`-----------------------------------------------*/
926
04b6e11e 927#if defined (__STDC__) || defined (__cplusplus)
d33cb3ae 928static void
886b69d1 929yydestruct (int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
04b6e11e 930#else
d33cb3ae 931static void
886b69d1 932yydestruct (yytype, yyvaluep, yylocationp)
04b6e11e 933 int yytype;
886b69d1
AD
934 YYSTYPE *yyvaluep;
935 YYLTYPE *yylocationp;
04b6e11e
PE
936#endif
937{
938 /* Pacify ``unused variable'' warnings. */
886b69d1
AD
939 (void) yyvaluep;
940 (void) yylocationp;
04b6e11e
PE
941
942 switch (yytype)
943 {
886b69d1 944
04b6e11e
PE
945 default:
946 break;
947 }
948}
04b6e11e
PE
949\f
950
d33cb3ae 951/* Prevent warnings from -Wmissing-prototypes. */
e9955c83
AD
952
953#ifdef YYPARSE_PARAM
954# if defined (__STDC__) || defined (__cplusplus)
d33cb3ae 955int yyparse (void *YYPARSE_PARAM);
e9955c83 956# else
d33cb3ae 957int yyparse ();
e9955c83 958# endif
d33cb3ae
PE
959#else /* ! YYPARSE_PARAM */
960#if defined (__STDC__) || defined (__cplusplus)
e9955c83 961int yyparse (void);
d33cb3ae
PE
962#else
963int yyparse ();
964#endif
05d18c24 965#endif /* ! YYPARSE_PARAM */
e776192e 966
e9955c83 967
e9955c83 968
e9955c83 969
d33cb3ae
PE
970
971
972/*----------.
973| yyparse. |
974`----------*/
975
976#ifdef YYPARSE_PARAM
977# if defined (__STDC__) || defined (__cplusplus)
978int yyparse (void *YYPARSE_PARAM)
979# else
980int yyparse (YYPARSE_PARAM)
981 void *YYPARSE_PARAM;
982# endif
983#else /* ! YYPARSE_PARAM */
984#if defined (__STDC__) || defined (__cplusplus)
985int
986yyparse (void)
987#else
e9955c83 988int
d33cb3ae
PE
989yyparse ()
990
991#endif
992#endif
e9955c83 993{
366eea36
AD
994 /* The lookahead symbol. */
995int yychar;
996
997/* The semantic value of the lookahead symbol. */
998YYSTYPE yylval;
999
f0616f0b 1000/* Number of syntax errors so far. */
366eea36
AD
1001int yynerrs;
1002/* Location data for the lookahead symbol. */
1003YYLTYPE yylloc;
e9955c83
AD
1004
1005 register int yystate;
1006 register int yyn;
1007 int yyresult;
1008 /* Number of tokens to shift before error messages enabled. */
1009 int yyerrstatus;
1010 /* Lookahead token as an internal (translated) token number. */
886b69d1 1011 int yytoken = 0;
e9955c83
AD
1012
1013 /* Three stacks and their tools:
1014 `yyss': related to states,
1015 `yyvs': related to semantic values,
1016 `yyls': related to locations.
1017
1018 Refer to the stacks thru separate pointers, to allow yyoverflow
1019 to reallocate them elsewhere. */
1020
1921f1d7 1021 /* The state stack. */
e9955c83
AD
1022 short yyssa[YYINITDEPTH];
1023 short *yyss = yyssa;
1024 register short *yyssp;
1025
1026 /* The semantic value stack. */
1027 YYSTYPE yyvsa[YYINITDEPTH];
1028 YYSTYPE *yyvs = yyvsa;
1029 register YYSTYPE *yyvsp;
1030
e9955c83
AD
1031 /* The location stack. */
1032 YYLTYPE yylsa[YYINITDEPTH];
1033 YYLTYPE *yyls = yylsa;
1034 YYLTYPE *yylsp;
78a00b7d 1035 YYLTYPE *yylerrsp;
e9955c83 1036
366eea36 1037#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
e9955c83
AD
1038
1039 YYSIZE_T yystacksize = YYINITDEPTH;
1040
1041 /* The variables used to return semantic value and location from the
1042 action routines. */
1043 YYSTYPE yyval;
e9955c83 1044 YYLTYPE yyloc;
e9955c83
AD
1045
1046 /* When reducing, the number of symbols on the RHS of the reduced
1921f1d7 1047 rule. */
e9955c83
AD
1048 int yylen;
1049
1050 YYDPRINTF ((stderr, "Starting parse\n"));
1051
1052 yystate = 0;
1053 yyerrstatus = 0;
1054 yynerrs = 0;
73521d9f 1055 yychar = YYEMPTY; /* Cause a token to be read. */
e9955c83
AD
1056
1057 /* Initialize stack pointers.
1058 Waste one element of value and location stack
1059 so that they stay on the same level as the state stack.
1060 The wasted elements are never initialized. */
1061
1062 yyssp = yyss;
1063 yyvsp = yyvs;
e9955c83 1064 yylsp = yyls;
e9955c83
AD
1065 goto yysetstate;
1066
1067/*------------------------------------------------------------.
1068| yynewstate -- Push a new state, which is found in yystate. |
1069`------------------------------------------------------------*/
1070 yynewstate:
1071 /* In all cases, when you get here, the value and location stacks
1072 have just been pushed. so pushing a state here evens the stacks.
1073 */
1074 yyssp++;
1075
1076 yysetstate:
1077 *yyssp = yystate;
1078
d33cb3ae 1079 if (yyss + yystacksize - 1 <= yyssp)
e9955c83
AD
1080 {
1081 /* Get the current used size of the three stacks, in elements. */
1082 YYSIZE_T yysize = yyssp - yyss + 1;
1083
1084#ifdef yyoverflow
1085 {
1086 /* Give user a chance to reallocate the stack. Use copies of
1087 these so that the &'s don't force the real ones into
1088 memory. */
1089 YYSTYPE *yyvs1 = yyvs;
1090 short *yyss1 = yyss;
366eea36 1091 YYLTYPE *yyls1 = yyls;
e9955c83
AD
1092
1093 /* Each stack pointer address is followed by the size of the
366eea36
AD
1094 data in use in that stack, in bytes. This used to be a
1095 conditional around just the two extra args, but that might
1096 be undefined if yyoverflow is a macro. */
e9955c83
AD
1097 yyoverflow ("parser stack overflow",
1098 &yyss1, yysize * sizeof (*yyssp),
1099 &yyvs1, yysize * sizeof (*yyvsp),
1100 &yyls1, yysize * sizeof (*yylsp),
1101 &yystacksize);
1102 yyls = yyls1;
e9955c83
AD
1103 yyss = yyss1;
1104 yyvs = yyvs1;
1105 }
1106#else /* no yyoverflow */
1107# ifndef YYSTACK_RELOCATE
1108 goto yyoverflowlab;
1109# else
1110 /* Extend the stack our own way. */
d33cb3ae 1111 if (YYMAXDEPTH <= yystacksize)
e9955c83
AD
1112 goto yyoverflowlab;
1113 yystacksize *= 2;
d33cb3ae 1114 if (YYMAXDEPTH < yystacksize)
e9955c83
AD
1115 yystacksize = YYMAXDEPTH;
1116
1117 {
1118 short *yyss1 = yyss;
1119 union yyalloc *yyptr =
1120 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1121 if (! yyptr)
1122 goto yyoverflowlab;
1123 YYSTACK_RELOCATE (yyss);
1124 YYSTACK_RELOCATE (yyvs);
e9955c83 1125 YYSTACK_RELOCATE (yyls);
1921f1d7 1126# undef YYSTACK_RELOCATE
e9955c83
AD
1127 if (yyss1 != yyssa)
1128 YYSTACK_FREE (yyss1);
1129 }
1130# endif
1131#endif /* no yyoverflow */
1132
1133 yyssp = yyss + yysize - 1;
1134 yyvsp = yyvs + yysize - 1;
e9955c83 1135 yylsp = yyls + yysize - 1;
e9955c83
AD
1136
1137 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1138 (unsigned long int) yystacksize));
1139
d33cb3ae 1140 if (yyss + yystacksize - 1 <= yyssp)
e9955c83
AD
1141 YYABORT;
1142 }
1143
1144 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1145
1146 goto yybackup;
1147
1148/*-----------.
1149| yybackup. |
1150`-----------*/
1151yybackup:
1152
1153/* Do appropriate processing given the current state. */
1154/* Read a lookahead token if we need one and don't already have one. */
1155/* yyresume: */
1156
1157 /* First try to decide what to do without reference to lookahead token. */
1158
1159 yyn = yypact[yystate];
04b6e11e 1160 if (yyn == YYPACT_NINF)
e9955c83
AD
1161 goto yydefault;
1162
1163 /* Not known => get a lookahead token if don't already have one. */
1164
73521d9f
PE
1165 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1166 if (yychar == YYEMPTY)
e9955c83
AD
1167 {
1168 YYDPRINTF ((stderr, "Reading a token: "));
1169 yychar = YYLEX;
1170 }
1171
73521d9f 1172 if (yychar <= YYEOF)
e9955c83 1173 {
73521d9f 1174 yychar = yytoken = YYEOF;
e9955c83
AD
1175 YYDPRINTF ((stderr, "Now at end of input.\n"));
1176 }
1177 else
1178 {
73521d9f 1179 yytoken = YYTRANSLATE (yychar);
f0616f0b 1180 YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
e9955c83
AD
1181 }
1182
886b69d1 1183 /* If the proper action on seeing token YYTOKEN is to reduce or to
ae7453f2 1184 detect an error, take that action. */
886b69d1
AD
1185 yyn += yytoken;
1186 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
e9955c83 1187 goto yydefault;
e9955c83 1188 yyn = yytable[yyn];
ae7453f2 1189 if (yyn <= 0)
e9955c83 1190 {
ae7453f2 1191 if (yyn == 0 || yyn == YYTABLE_NINF)
e9955c83
AD
1192 goto yyerrlab;
1193 yyn = -yyn;
1194 goto yyreduce;
1195 }
e9955c83
AD
1196
1197 if (yyn == YYFINAL)
1198 YYACCEPT;
1199
1200 /* Shift the lookahead token. */
f0616f0b 1201 YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
e9955c83
AD
1202
1203 /* Discard the token being shifted unless it is eof. */
73521d9f
PE
1204 if (yychar != YYEOF)
1205 yychar = YYEMPTY;
e9955c83
AD
1206
1207 *++yyvsp = yylval;
e9955c83 1208 *++yylsp = yylloc;
e9955c83
AD
1209
1210 /* Count tokens shifted since error; after three, turn off error
1211 status. */
1212 if (yyerrstatus)
1213 yyerrstatus--;
1214
1215 yystate = yyn;
1216 goto yynewstate;
1217
1218
1219/*-----------------------------------------------------------.
1220| yydefault -- do the default action for the current state. |
1221`-----------------------------------------------------------*/
1222yydefault:
1223 yyn = yydefact[yystate];
1224 if (yyn == 0)
1225 goto yyerrlab;
1226 goto yyreduce;
1227
1228
1229/*-----------------------------.
1230| yyreduce -- Do a reduction. |
1231`-----------------------------*/
1232yyreduce:
1233 /* yyn is the number of a rule to reduce with. */
1234 yylen = yyr2[yyn];
1235
1236 /* If YYLEN is nonzero, implement the default value of the action:
1237 `$$ = $1'.
1238
04b6e11e
PE
1239 Otherwise, the following line sets YYVAL to garbage.
1240 This behavior is undocumented and Bison
e9955c83
AD
1241 users should not rely upon it. Assigning to YYVAL
1242 unconditionally makes the parser a bit smaller, and it avoids a
1243 GCC warning that YYVAL may be used uninitialized. */
1244 yyval = yyvsp[1-yylen];
1245
1921f1d7 1246 /* Default location. */
e9955c83 1247 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
05d18c24 1248 YY_REDUCE_PRINT (yyn);
1921f1d7
AD
1249 switch (yyn)
1250 {
05d18c24 1251 case 6:
73521d9f 1252#line 175 "parse-gram.y"
05d18c24 1253 { prologue_augment (yyvsp[0].chars, yylsp[0]); }
1921f1d7
AD
1254 break;
1255
8efe435c 1256 case 7:
73521d9f 1257#line 176 "parse-gram.y"
1921f1d7
AD
1258 { debug_flag = 1; }
1259 break;
1260
8efe435c 1261 case 8:
73521d9f 1262#line 177 "parse-gram.y"
05d18c24 1263 { muscle_insert (yyvsp[-1].chars, yyvsp[0].chars); }
1921f1d7
AD
1264 break;
1265
8efe435c 1266 case 9:
73521d9f 1267#line 178 "parse-gram.y"
1921f1d7 1268 { defines_flag = 1; }
e9955c83 1269 break;
1921f1d7 1270
8efe435c 1271 case 10:
73521d9f 1272#line 179 "parse-gram.y"
1921f1d7 1273 { error_verbose = 1; }
e9955c83 1274 break;
1921f1d7 1275
8efe435c 1276 case 11:
73521d9f 1277#line 180 "parse-gram.y"
1921f1d7 1278 { expected_conflicts = yyvsp[0].integer; }
e9955c83 1279 break;
1921f1d7 1280
8efe435c 1281 case 12:
73521d9f 1282#line 181 "parse-gram.y"
05d18c24 1283 { spec_file_prefix = yyvsp[0].chars; }
e9955c83 1284 break;
1921f1d7 1285
8efe435c 1286 case 13:
73521d9f 1287#line 182 "parse-gram.y"
ae7453f2 1288 { glr_parser = 1; }
e9955c83 1289 break;
1921f1d7 1290
8efe435c 1291 case 14:
73521d9f 1292#line 183 "parse-gram.y"
05d18c24 1293 { add_param ("lex_param", yyvsp[0].chars, yylsp[0]); }
e9955c83 1294 break;
1921f1d7 1295
8efe435c 1296 case 15:
73521d9f 1297#line 184 "parse-gram.y"
ae7453f2 1298 { locations_flag = 1; }
e9955c83 1299 break;
1921f1d7 1300
8efe435c 1301 case 16:
73521d9f 1302#line 185 "parse-gram.y"
05d18c24 1303 { spec_name_prefix = yyvsp[0].chars; }
e9955c83 1304 break;
1921f1d7 1305
8efe435c 1306 case 17:
73521d9f 1307#line 186 "parse-gram.y"
ae7453f2 1308 { no_lines_flag = 1; }
e9955c83 1309 break;
1921f1d7 1310
8efe435c 1311 case 18:
73521d9f 1312#line 187 "parse-gram.y"
05d18c24 1313 { spec_outfile = yyvsp[0].chars; }
4cdb01db 1314 break;
1921f1d7 1315
8efe435c 1316 case 19:
73521d9f 1317#line 188 "parse-gram.y"
05d18c24 1318 { add_param ("parse_param", yyvsp[0].chars, yylsp[0]); }
4cdb01db 1319 break;
1921f1d7 1320
8efe435c 1321 case 20:
73521d9f 1322#line 189 "parse-gram.y"
ae7453f2 1323 { pure_parser = 1; }
4cdb01db 1324 break;
1921f1d7 1325
8efe435c 1326 case 21:
73521d9f 1327#line 190 "parse-gram.y"
05d18c24 1328 { skeleton = yyvsp[0].chars; }
676385e2
PH
1329 break;
1330
1331 case 22:
73521d9f 1332#line 191 "parse-gram.y"
ae7453f2
AD
1333 { token_table_flag = 1; }
1334 break;
1335
1336 case 23:
73521d9f 1337#line 192 "parse-gram.y"
78a00b7d 1338 { report_flag = report_states; }
ae7453f2
AD
1339 break;
1340
1341 case 24:
73521d9f 1342#line 193 "parse-gram.y"
1921f1d7 1343 { yacc_flag = 1; }
4cdb01db 1344 break;
1921f1d7 1345
05d18c24 1346 case 28:
73521d9f 1347#line 201 "parse-gram.y"
1921f1d7 1348 {
8efe435c 1349 grammar_start_symbol_set (yyvsp[0].symbol, yylsp[0]);
4cdb01db 1350 }
e9955c83 1351 break;
1921f1d7 1352
05d18c24 1353 case 29:
73521d9f 1354#line 205 "parse-gram.y"
1921f1d7 1355 {
2c569025 1356 typed = 1;
05d18c24
PE
1357 MUSCLE_INSERT_INT ("stype_line", yylsp[0].start.line);
1358 muscle_insert ("stype", yyvsp[0].chars);
4cdb01db 1359 }
e9955c83 1360 break;
1921f1d7 1361
05d18c24 1362 case 30:
73521d9f 1363#line 211 "parse-gram.y"
1921f1d7 1364 {
05d18c24 1365 symbol_list *list;
9280d3ef 1366 for (list = yyvsp[0].list; list; list = list->next)
05d18c24 1367 symbol_destructor_set (list->sym, yyvsp[-1].chars, yylsp[-1]);
9280d3ef 1368 symbol_list_free (yyvsp[0].list);
4cdb01db 1369 }
e9955c83 1370 break;
1921f1d7 1371
73521d9f
PE
1372 case 31:
1373#line 218 "parse-gram.y"
1921f1d7 1374 {
05d18c24 1375 symbol_list *list;
366eea36 1376 for (list = yyvsp[0].list; list; list = list->next)
05d18c24 1377 symbol_printer_set (list->sym, yyvsp[-1].chars, list->location);
366eea36 1378 symbol_list_free (yyvsp[0].list);
4cdb01db 1379 }
e9955c83 1380 break;
1921f1d7 1381
73521d9f
PE
1382 case 32:
1383#line 227 "parse-gram.y"
366eea36 1384 { current_class = nterm_sym; }
9280d3ef
AD
1385 break;
1386
73521d9f
PE
1387 case 33:
1388#line 228 "parse-gram.y"
9280d3ef
AD
1389 {
1390 current_class = unknown_sym;
1391 current_type = NULL;
1392 }
1393 break;
1394
73521d9f
PE
1395 case 34:
1396#line 232 "parse-gram.y"
366eea36
AD
1397 { current_class = token_sym; }
1398 break;
1399
73521d9f
PE
1400 case 35:
1401#line 233 "parse-gram.y"
366eea36
AD
1402 {
1403 current_class = unknown_sym;
1404 current_type = NULL;
1405 }
1406 break;
1407
73521d9f
PE
1408 case 36:
1409#line 238 "parse-gram.y"
1e0bab92 1410 {
05d18c24 1411 symbol_list *list;
1e0bab92 1412 for (list = yyvsp[0].list; list; list = list->next)
05d18c24 1413 symbol_type_set (list->sym, yyvsp[-1].uniqstr, yylsp[-1]);
dafdc66f 1414 symbol_list_free (yyvsp[0].list);
1e0bab92 1415 }
e9955c83 1416 break;
1921f1d7 1417
73521d9f
PE
1418 case 37:
1419#line 248 "parse-gram.y"
1921f1d7 1420 {
05d18c24 1421 symbol_list *list;
1e0bab92
AD
1422 ++current_prec;
1423 for (list = yyvsp[0].list; list; list = list->next)
1424 {
1a31ed21
AD
1425 symbol_type_set (list->sym, current_type, yylsp[-1]);
1426 symbol_precedence_set (list->sym, current_prec, yyvsp[-2].assoc, yylsp[-2]);
1e0bab92 1427 }
dafdc66f 1428 symbol_list_free (yyvsp[0].list);
2c569025
AD
1429 current_type = NULL;
1430 }
e9955c83 1431 break;
1921f1d7 1432
73521d9f
PE
1433 case 38:
1434#line 262 "parse-gram.y"
1e0bab92 1435 { yyval.assoc = left_assoc; }
e9955c83 1436 break;
1921f1d7 1437
73521d9f
PE
1438 case 39:
1439#line 263 "parse-gram.y"
1e0bab92 1440 { yyval.assoc = right_assoc; }
e9955c83 1441 break;
1921f1d7 1442
73521d9f
PE
1443 case 40:
1444#line 264 "parse-gram.y"
1e0bab92 1445 { yyval.assoc = non_assoc; }
4cdb01db 1446 break;
1921f1d7 1447
73521d9f
PE
1448 case 41:
1449#line 268 "parse-gram.y"
62ddaef6 1450 { current_type = NULL; }
e9955c83 1451 break;
1921f1d7 1452
73521d9f
PE
1453 case 42:
1454#line 269 "parse-gram.y"
05d18c24 1455 { current_type = yyvsp[0].uniqstr; }
e9955c83 1456 break;
1921f1d7 1457
73521d9f
PE
1458 case 43:
1459#line 275 "parse-gram.y"
1e0bab92 1460 { yyval.list = symbol_list_new (yyvsp[0].symbol, yylsp[0]); }
4cdb01db 1461 break;
1921f1d7 1462
73521d9f
PE
1463 case 44:
1464#line 276 "parse-gram.y"
1e0bab92 1465 { yyval.list = symbol_list_prepend (yyvsp[-1].list, yyvsp[0].symbol, yylsp[0]); }
4cdb01db 1466 break;
1921f1d7 1467
73521d9f
PE
1468 case 45:
1469#line 282 "parse-gram.y"
1921f1d7 1470 {
05d18c24 1471 current_type = yyvsp[0].uniqstr;
4cdb01db 1472 }
e9955c83 1473 break;
1921f1d7 1474
73521d9f
PE
1475 case 46:
1476#line 286 "parse-gram.y"
1921f1d7 1477 {
e776192e 1478 symbol_class_set (yyvsp[0].symbol, current_class, yylsp[0]);
1a31ed21 1479 symbol_type_set (yyvsp[0].symbol, current_type, yylsp[0]);
4cdb01db 1480 }
e9955c83 1481 break;
1921f1d7 1482
73521d9f
PE
1483 case 47:
1484#line 291 "parse-gram.y"
1921f1d7 1485 {
e776192e 1486 symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
1a31ed21 1487 symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
e776192e 1488 symbol_user_token_number_set (yyvsp[-1].symbol, yyvsp[0].integer, yylsp[0]);
4cdb01db 1489 }
e9955c83 1490 break;
1921f1d7 1491
73521d9f
PE
1492 case 48:
1493#line 297 "parse-gram.y"
1921f1d7 1494 {
e776192e 1495 symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
1a31ed21 1496 symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
a5d50994 1497 symbol_make_alias (yyvsp[-1].symbol, yyvsp[0].symbol, yyloc);
4cdb01db 1498 }
e9955c83 1499 break;
1921f1d7 1500
73521d9f
PE
1501 case 49:
1502#line 303 "parse-gram.y"
1921f1d7 1503 {
e776192e 1504 symbol_class_set (yyvsp[-2].symbol, current_class, yylsp[-2]);
1a31ed21 1505 symbol_type_set (yyvsp[-2].symbol, current_type, yylsp[-2]);
e776192e 1506 symbol_user_token_number_set (yyvsp[-2].symbol, yyvsp[-1].integer, yylsp[-1]);
a5d50994 1507 symbol_make_alias (yyvsp[-2].symbol, yyvsp[0].symbol, yyloc);
4cdb01db 1508 }
e9955c83 1509 break;
1921f1d7 1510
73521d9f
PE
1511 case 55:
1512#line 332 "parse-gram.y"
b275314e
AD
1513 {
1514 if (yacc_flag)
1515 complain_at (yyloc, _("POSIX forbids declarations in the grammar"));
1516 }
1517 break;
1518
73521d9f
PE
1519 case 56:
1520#line 337 "parse-gram.y"
b275314e
AD
1521 {
1522 yyerrok;
1523 }
e9955c83 1524 break;
1921f1d7 1525
73521d9f
PE
1526 case 58:
1527#line 344 "parse-gram.y"
05d18c24 1528 { current_lhs = yyvsp[0].symbol; current_lhs_location = yylsp[0]; }
e9955c83 1529 break;
1921f1d7 1530
73521d9f
PE
1531 case 60:
1532#line 348 "parse-gram.y"
676385e2 1533 { grammar_rule_end (yylsp[0]); }
e9955c83 1534 break;
1921f1d7 1535
73521d9f
PE
1536 case 61:
1537#line 349 "parse-gram.y"
b275314e 1538 { grammar_rule_end (yylsp[0]); }
e9955c83 1539 break;
1921f1d7 1540
73521d9f
PE
1541 case 62:
1542#line 354 "parse-gram.y"
b275314e 1543 { grammar_rule_begin (current_lhs, current_lhs_location); }
e9955c83 1544 break;
1921f1d7 1545
73521d9f
PE
1546 case 63:
1547#line 356 "parse-gram.y"
b275314e 1548 { grammar_current_rule_symbol_append (yyvsp[0].symbol, yylsp[0]); }
4cdb01db 1549 break;
1921f1d7 1550
73521d9f
PE
1551 case 64:
1552#line 358 "parse-gram.y"
05d18c24 1553 { grammar_current_rule_action_append (yyvsp[0].chars, yylsp[0]); }
e9955c83 1554 break;
1921f1d7 1555
73521d9f
PE
1556 case 65:
1557#line 360 "parse-gram.y"
b275314e 1558 { grammar_current_rule_prec_set (yyvsp[0].symbol, yylsp[0]); }
4cdb01db 1559 break;
1921f1d7 1560
73521d9f
PE
1561 case 66:
1562#line 362 "parse-gram.y"
b275314e 1563 { grammar_current_rule_dprec_set (yyvsp[0].integer, yylsp[0]); }
0c15323d 1564 break;
1921f1d7 1565
73521d9f
PE
1566 case 67:
1567#line 364 "parse-gram.y"
05d18c24 1568 { grammar_current_rule_merge_set (yyvsp[0].uniqstr, yylsp[0]); }
2c569025 1569 break;
1921f1d7 1570
73521d9f
PE
1571 case 68:
1572#line 368 "parse-gram.y"
676385e2
PH
1573 { yyval.symbol = yyvsp[0].symbol; }
1574 break;
1575
73521d9f
PE
1576 case 69:
1577#line 369 "parse-gram.y"
b275314e 1578 { yyval.symbol = yyvsp[0].symbol; }
676385e2
PH
1579 break;
1580
73521d9f
PE
1581 case 70:
1582#line 374 "parse-gram.y"
05d18c24 1583 { yyval.chars = yyvsp[0].chars; }
b275314e
AD
1584 break;
1585
73521d9f
PE
1586 case 71:
1587#line 380 "parse-gram.y"
1921f1d7 1588 {
05d18c24 1589 yyval.symbol = symbol_get (yyvsp[0].chars, yylsp[0]);
e776192e 1590 symbol_class_set (yyval.symbol, token_sym, yylsp[0]);
4cdb01db 1591 }
e9955c83 1592 break;
1921f1d7 1593
73521d9f
PE
1594 case 72:
1595#line 389 "parse-gram.y"
1921f1d7 1596 {
05d18c24
PE
1597 yyval.chars = yyvsp[0].chars + 1;
1598 yyval.chars[strlen (yyval.chars) - 1] = '\0';
4cdb01db 1599 }
e9955c83 1600 break;
1921f1d7 1601
73521d9f
PE
1602 case 74:
1603#line 398 "parse-gram.y"
1921f1d7 1604 {
05d18c24 1605 epilogue_augment (yyvsp[0].chars, yylsp[0]);
7ec2d4cd 1606 scanner_last_string_free ();
4cdb01db 1607 }
e9955c83
AD
1608 break;
1609
1610
1921f1d7
AD
1611 }
1612
05d18c24 1613/* Line 991 of yacc.c. */
78a00b7d 1614#line 1614 "parse-gram.c"
e9955c83
AD
1615\f
1616 yyvsp -= yylen;
1617 yyssp -= yylen;
e9955c83 1618 yylsp -= yylen;
e9955c83 1619
05d18c24 1620 YY_STACK_PRINT (yyss, yyssp);
e9955c83
AD
1621
1622 *++yyvsp = yyval;
e9955c83 1623 *++yylsp = yyloc;
e9955c83
AD
1624
1625 /* Now `shift' the result of the reduction. Determine what state
1626 that goes to, based on the state we popped back to and the rule
1627 number reduced by. */
1628
1629 yyn = yyr1[yyn];
1630
1921f1d7 1631 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
04b6e11e 1632 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
e9955c83
AD
1633 yystate = yytable[yystate];
1634 else
1921f1d7 1635 yystate = yydefgoto[yyn - YYNTOKENS];
e9955c83
AD
1636
1637 goto yynewstate;
1638
1639
1640/*------------------------------------.
1641| yyerrlab -- here on detecting error |
1642`------------------------------------*/
1643yyerrlab:
1644 /* If not already recovering from an error, report this error. */
1645 if (!yyerrstatus)
1646 {
1647 ++yynerrs;
ae7453f2
AD
1648#if YYERROR_VERBOSE
1649 yyn = yypact[yystate];
1650
1651 if (YYPACT_NINF < yyn && yyn < YYLAST)
1652 {
1653 YYSIZE_T yysize = 0;
1654 int yytype = YYTRANSLATE (yychar);
1655 char *yymsg;
1656 int yyx, yycount;
1657
1658 yycount = 0;
1659 /* Start YYX at -YYN if negative to avoid negative indexes in
1660 YYCHECK. */
1661 for (yyx = yyn < 0 ? -yyn : 0;
1662 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
1663 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1664 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
f0616f0b 1665 yysize += yystrlen ("syntax error, unexpected ") + 1;
ae7453f2
AD
1666 yysize += yystrlen (yytname[yytype]);
1667 yymsg = (char *) YYSTACK_ALLOC (yysize);
1668 if (yymsg != 0)
1669 {
f0616f0b 1670 char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
ae7453f2
AD
1671 yyp = yystpcpy (yyp, yytname[yytype]);
1672
1673 if (yycount < 5)
1674 {
1675 yycount = 0;
1676 for (yyx = yyn < 0 ? -yyn : 0;
1677 yyx < (int) (sizeof (yytname) / sizeof (char *));
1678 yyx++)
1679 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1680 {
1681 const char *yyq = ! yycount ? ", expecting " : " or ";
1682 yyp = yystpcpy (yyp, yyq);
1683 yyp = yystpcpy (yyp, yytname[yyx]);
1684 yycount++;
1685 }
1686 }
1687 yyerror (yymsg);
1688 YYSTACK_FREE (yymsg);
1689 }
1690 else
f0616f0b 1691 yyerror ("syntax error; also virtual memory exhausted");
ae7453f2
AD
1692 }
1693 else
1694#endif /* YYERROR_VERBOSE */
f0616f0b 1695 yyerror ("syntax error");
e9955c83 1696 }
e9955c83 1697
78a00b7d
PE
1698 yylerrsp = yylsp;
1699
e9955c83
AD
1700 if (yyerrstatus == 3)
1701 {
1702 /* If just tried and failed to reuse lookahead token after an
1703 error, discard it. */
1704
1921f1d7 1705 /* Return failure if at end of input. */
73521d9f 1706 if (yychar == YYEOF)
366eea36
AD
1707 {
1708 /* Pop the error token. */
1709 YYPOPSTACK;
1710 /* Pop the rest of the stack. */
d33cb3ae 1711 while (yyss < yyssp)
366eea36 1712 {
f0616f0b 1713 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
886b69d1 1714 yydestruct (yystos[*yyssp], yyvsp, yylsp);
366eea36
AD
1715 YYPOPSTACK;
1716 }
1717 YYABORT;
1718 }
1719
f0616f0b 1720 YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
886b69d1 1721 yydestruct (yytoken, &yylval, &yylloc);
73521d9f 1722 yychar = YYEMPTY;
78a00b7d 1723 *++yylerrsp = yylloc;
e9955c83
AD
1724 }
1725
1726 /* Else will try to reuse lookahead token after shifting the error
1727 token. */
78a00b7d 1728 goto yyerrlab2;
e9955c83 1729
05d18c24
PE
1730
1731/*----------------------------------------------------.
1732| yyerrlab1 -- error raised explicitly by an action. |
1733`----------------------------------------------------*/
1734yyerrlab1:
78a00b7d
PE
1735
1736 /* Suppress GCC warning that yyerrlab1 is unused when no action
1737 invokes YYERROR. */
1738#if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__)
1739 __attribute__ ((__unused__))
1740#endif
1741
1742 yylerrsp = yylsp;
1743 *++yylerrsp = yyloc;
1744 goto yyerrlab2;
1745
1746
1747/*---------------------------------------------------------------.
1748| yyerrlab2 -- pop states until the error token can be shifted. |
1749`---------------------------------------------------------------*/
1750yyerrlab2:
1921f1d7 1751 yyerrstatus = 3; /* Each real token shifted decrements this. */
e9955c83 1752
1921f1d7
AD
1753 for (;;)
1754 {
1755 yyn = yypact[yystate];
04b6e11e 1756 if (yyn != YYPACT_NINF)
1921f1d7
AD
1757 {
1758 yyn += YYTERROR;
1759 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1760 {
1761 yyn = yytable[yyn];
1762 if (0 < yyn)
1763 break;
1764 }
1765 }
4cdb01db 1766
1921f1d7
AD
1767 /* Pop the current state because it cannot handle the error token. */
1768 if (yyssp == yyss)
1769 YYABORT;
0c15323d 1770
f0616f0b 1771 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
886b69d1 1772 yydestruct (yystos[yystate], yyvsp, yylsp);
1921f1d7
AD
1773 yyvsp--;
1774 yystate = *--yyssp;
1921f1d7 1775 yylsp--;
05d18c24 1776 YY_STACK_PRINT (yyss, yyssp);
e9955c83
AD
1777 }
1778
1779 if (yyn == YYFINAL)
1780 YYACCEPT;
1781
1782 YYDPRINTF ((stderr, "Shifting error token, "));
1783
1784 *++yyvsp = yylval;
78a00b7d
PE
1785 YYLLOC_DEFAULT (yyloc, yylsp, (yylerrsp - yylsp));
1786 *++yylsp = yyloc;
e9955c83
AD
1787
1788 yystate = yyn;
1789 goto yynewstate;
1790
1791
1792/*-------------------------------------.
1793| yyacceptlab -- YYACCEPT comes here. |
1794`-------------------------------------*/
1795yyacceptlab:
1796 yyresult = 0;
1797 goto yyreturn;
1798
1799/*-----------------------------------.
1800| yyabortlab -- YYABORT comes here. |
1801`-----------------------------------*/
1802yyabortlab:
1803 yyresult = 1;
1804 goto yyreturn;
1805
366eea36
AD
1806#ifndef yyoverflow
1807/*----------------------------------------------.
1808| yyoverflowlab -- parser overflow comes here. |
1809`----------------------------------------------*/
e9955c83
AD
1810yyoverflowlab:
1811 yyerror ("parser stack overflow");
1812 yyresult = 2;
1813 /* Fall through. */
366eea36 1814#endif
e9955c83
AD
1815
1816yyreturn:
1817#ifndef yyoverflow
1818 if (yyss != yyssa)
1819 YYSTACK_FREE (yyss);
1820#endif
1821 return yyresult;
1822}
1921f1d7 1823
366eea36 1824
73521d9f 1825#line 404 "parse-gram.y"
05d18c24
PE
1826
1827
1828
1829/* Return the location of the left-hand side of a rule whose
1830 right-hand side is RHS[1] ... RHS[N]. Ignore empty nonterminals in
1831 the right-hand side, and return an empty location equal to the end
1832 boundary of RHS[0] if the right-hand side is empty. */
1833
1834static YYLTYPE
1835lloc_default (YYLTYPE const *rhs, int n)
1836{
1837 int i;
05d18c24
PE
1838 YYLTYPE r;
1839 r.start = r.end = rhs[n].end;
1840
73521d9f
PE
1841 /* Ignore empty nonterminals the start of the the right-hand side.
1842 Do not bother to ignore them at the end of the right-hand side,
1843 since empty nonterminals have the same end as their predecessors. */
05d18c24
PE
1844 for (i = 1; i <= n; i++)
1845 if (! equal_boundaries (rhs[i].start, rhs[i].end))
1846 {
1847 r.start = rhs[i].start;
05d18c24
PE
1848 break;
1849 }
1850
1851 return r;
1852}
1853
1854
1855/* Add a lex-param or a parse-param (depending on TYPE) with
1856 declaration DECL and location LOC. */
1857
1858static void
73521d9f 1859add_param (char const *type, char *decl, location loc)
05d18c24
PE
1860{
1861 static char const alphanum[] =
1862 "0123456789"
1863 "abcdefghijklmnopqrstuvwxyz"
1864 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1865 "_";
1866 char const *alpha = alphanum + 10;
1867 char const *name_start = NULL;
73521d9f 1868 char *p;
05d18c24
PE
1869
1870 for (p = decl; *p; p++)
1871 if ((p == decl || ! strchr (alphanum, p[-1])) && strchr (alpha, p[0]))
1872 name_start = p;
1873
73521d9f
PE
1874 /* Strip the surrounding '{' and '}'. */
1875 decl++;
1876 p[-1] = '\0';
1877
05d18c24
PE
1878 if (! name_start)
1879 complain_at (loc, _("missing identifier in parameter declaration"));
1880 else
1881 {
1882 char *name;
1883 size_t name_len;
1884
1885 for (name_len = 1;
1886 name_start[name_len] && strchr (alphanum, name_start[name_len]);
1887 name_len++)
1888 continue;
1889
1890 name = xmalloc (name_len + 1);
1891 memcpy (name, name_start, name_len);
1892 name[name_len] = '\0';
1893 muscle_pair_list_grow (type, decl, name);
1894 free (name);
1895 }
1896
1897 scanner_last_string_free ();
1898}
e9955c83 1899
73521d9f
PE
1900/*----------------------------------------------------.
1901| When debugging the parser, display tokens' values. |
1902`----------------------------------------------------*/
e9955c83
AD
1903
1904static void
05d18c24 1905print_token_value (FILE *file, int type, YYSTYPE const *value)
e9955c83 1906{
e776192e 1907 fputc (' ', file);
e9955c83
AD
1908 switch (type)
1909 {
e9955c83
AD
1910 case ID:
1911 fprintf (file, " = %s", value->symbol->tag);
1912 break;
1913
1914 case INT:
1915 fprintf (file, " = %d", value->integer);
1916 break;
1917
1918 case STRING:
05d18c24 1919 fprintf (file, " = \"%s\"", value->chars);
e9955c83
AD
1920 break;
1921
1922 case TYPE:
05d18c24 1923 fprintf (file, " = <%s>", value->uniqstr);
e9955c83
AD
1924 break;
1925
1926 case BRACED_CODE:
73521d9f
PE
1927 case PERCENT_DESTRUCTOR:
1928 case PERCENT_LEX_PARAM:
1929 case PERCENT_PARSE_PARAM:
1930 case PERCENT_PRINTER:
1931 case PERCENT_UNION:
e9955c83
AD
1932 case PROLOGUE:
1933 case EPILOGUE:
05d18c24 1934 fprintf (file, " = {{ %s }}", value->chars);
e9955c83 1935 break;
7ec2d4cd
AD
1936
1937 default:
1938 fprintf (file, "unknown token type");
1939 break;
e9955c83
AD
1940 }
1941}
1942
05d18c24
PE
1943static void
1944gram_error (location const *loc, char const *msg)
e9955c83 1945{
05d18c24 1946 complain_at (*loc, "%s", msg);
e9955c83 1947}
1921f1d7 1948
73521d9f
PE
1949char const *
1950token_name (int type)
1951{
1952 return yytname[type];
1953}
1954