]> git.saurik.com Git - bison.git/blame - data/glr.c
DJGPP specific file.
[bison.git] / data / glr.c
CommitLineData
720623af 1m4_divert(-1) -*- C -*-
01241d47 2
fb8135fa 3# GLR skeleton for Bison
010f91c3 4# Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
fb8135fa
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 of the License, or
9# (at your option) 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
0fb669f9
PE
18# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19# 02110-1301 USA
fb8135fa 20
66d30cd4
AD
21
22## ---------------- ##
23## Default values. ##
24## ---------------- ##
25
26# Stack parameters.
27m4_define_default([b4_stack_depth_max], [10000])
28m4_define_default([b4_stack_depth_init], [200])
29
2a8d363a
AD
30
31
32## ------------------------ ##
33## Pure/impure interfaces. ##
34## ------------------------ ##
35
36
4b367315
AD
37# b4_user_formals
38# ---------------
1989d947
AD
39# The possible parse-params formal arguments preceded by a comma.
40#
41# This is not shared with yacc.c in c.m4 because GLR relies on ISO C
42# formal argument declarations.
4b367315
AD
43m4_define([b4_user_formals],
44[m4_ifset([b4_parse_param], [, b4_c_ansi_formals(b4_parse_param)])])
45
46
2a8d363a
AD
47# b4_lex_param
48# ------------
21964f43
AD
49# Accumule in b4_lex_param all the yylex arguments.
50# Yes, this is quite ugly...
51m4_define([b4_lex_param],
52m4_dquote(b4_pure_if([[[[YYSTYPE *]], [[yylvalp]]][]dnl
53b4_location_if([, [[YYLTYPE *], [yyllocp]]])])dnl
54m4_ifdef([b4_lex_param], [, ]b4_lex_param)))
55
2a8d363a 56
93724f13
AD
57# b4_yyerror_args
58# ---------------
1989d947
AD
59# Optional effective arguments passed to yyerror: user args plus yylloc, and
60# a trailing comma.
93724f13
AD
61m4_define([b4_yyerror_args],
62[b4_pure_if([b4_location_if([yylocp, ])])dnl
63m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
64
65
66# b4_lyyerror_args
67# ----------------
8dd162d3 68# Same as above, but on the look-ahead, hence yyllocp instead of yylocp.
93724f13
AD
69m4_define([b4_lyyerror_args],
70[b4_pure_if([b4_location_if([yyllocp, ])])dnl
71m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
72
73
2a8d363a
AD
74# b4_pure_args
75# ------------
1989d947 76# Same as b4_yyerror_args, but with a leading comma.
2a8d363a
AD
77m4_define([b4_pure_args],
78[b4_pure_if([b4_location_if([, yylocp])])[]b4_user_args])
79
80
2a8d363a
AD
81# b4_lpure_args
82# -------------
8dd162d3 83# Same as above, but on the look-ahead, hence yyllocp instead of yylocp.
2a8d363a
AD
84m4_define([b4_lpure_args],
85[b4_pure_if([b4_location_if([, yyllocp])])[]b4_user_args])
0245f82d 86
66d30cd4 87
1989d947
AD
88# b4_pure_formals
89# ---------------
90# Arguments passed to yyerror: user formals plus yyllocp.
91m4_define([b4_pure_formals],
92[b4_pure_if([b4_location_if([, YYLTYPE *yylocp])])[]b4_user_formals])
93
94
2a8d363a
AD
95# b4_lpure_formals
96# ----------------
8dd162d3 97# Same as above, but on the look-ahead, hence yyllocp instead of yylocp.
2a8d363a
AD
98m4_define([b4_lpure_formals],
99[b4_pure_if([b4_location_if([YYLTYPE *yyllocp])])[]b4_user_formals])
100
66d30cd4
AD
101
102## ----------------- ##
103## Semantic Values. ##
104## ----------------- ##
105
106
01241d47
PH
107# b4_lhs_value([TYPE])
108# --------------------
109# Expansion of $<TYPE>$.
110m4_define([b4_lhs_value],
bc82c5a5 111[((*yyvalp)[]m4_ifval([$1], [.$1]))])
01241d47
PH
112
113
114# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
115# --------------------------------------
116# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
117# symbols on RHS.
118m4_define([b4_rhs_value],
6de5398d 119[(((yyGLRStackItem const *)yyvsp)@{YYFILL (($2) - ($1))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3]))])
01241d47
PH
120
121
122
123## ----------- ##
124## Locations. ##
125## ----------- ##
126
01241d47
PH
127# b4_lhs_location()
128# -----------------
129# Expansion of @$.
130m4_define([b4_lhs_location],
131[(*yylocp)])
132
133
134# b4_rhs_location(RULE-LENGTH, NUM)
135# ---------------------------------
136# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
137# on RHS.
138m4_define([b4_rhs_location],
6de5398d 139[(((yyGLRStackItem const *)yyvsp)@{YYFILL (($2) - ($1))@}.yystate.yyloc)])
01241d47 140
5059b5c8
AD
141
142
143## -------------- ##
144## Output files. ##
145## -------------- ##
146
b526ee61
AD
147# We do want M4 expansion after # for CPP macros.
148m4_changecom()
01241d47 149m4_divert(0)dnl
947427ae 150@output @output_parser_name@
010f91c3
PE
151b4_copyright([Skeleton parser for GLR parsing with Bison],
152 [2002, 2003, 2004, 2005])
fb8135fa 153[
01241d47
PH
154/* This is the parser code for GLR (Generalized LR) parser. */
155
2a8d363a 156]b4_identification
5059b5c8 157
2a8d363a 158m4_if(b4_prefix[], [yy], [],
c5b95ccf 159[/* Substitute the variable and function names. */
01241d47
PH
160#define yyparse b4_prefix[]parse
161#define yylex b4_prefix[]lex
162#define yyerror b4_prefix[]error
163#define yylval b4_prefix[]lval
164#define yychar b4_prefix[]char
165#define yydebug b4_prefix[]debug
166#define yynerrs b4_prefix[]nerrs
5059b5c8 167#define yylloc b4_prefix[]lloc])
01241d47 168
5059b5c8
AD
169dnl # b4_shared_declarations
170dnl # ----------------------
171dnl # Declaration that might either go into the header (if --defines)
172dnl # or open coded in the parser body.
173m4_define([b4_shared_declarations],
174[b4_token_enums(b4_tokens)[
01241d47 175
17acead5 176/* Copy the first part of user declarations. */
5059b5c8 177]b4_pre_prologue[
141f5793 178
fa8c3ebc 179#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
01241d47 180]m4_ifdef([b4_stype],
48b16bbc 181[b4_syncline([b4_stype_line], [b4_file_name])
fa8c3ebc 182typedef union m4_bregexp(b4_stype, [^{], [YYSTYPE ])b4_stype YYSTYPE;
996b1c7e 183/* Line __line__ of glr.c. */
947427ae 184b4_syncline([@oline@], [@ofile@])],
fa8c3ebc
PE
185[typedef int YYSTYPE;])[
186# define YYSTYPE_IS_DECLARED 1
01241d47
PH
187# define YYSTYPE_IS_TRIVIAL 1
188#endif
189
fa8c3ebc
PE
190#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
191typedef struct YYLTYPE
01241d47 192{
25005f6a 193]b4_location_if([
f50adbbd
AD
194 int first_line;
195 int first_column;
196 int last_line;
ffa4c58a 197 int last_column;
5cc16ecc
PE
198],[
199 char yydummy;
25005f6a 200])[
fa8c3ebc
PE
201} YYLTYPE;
202# define YYLTYPE_IS_DECLARED 1
01241d47
PH
203# define YYLTYPE_IS_TRIVIAL 1
204#endif
5059b5c8
AD
205]])
206
207m4_if(b4_defines_flag, 0,
208 [b4_shared_declarations],
209 [#include @output_header_name@])[
210
211/* Enabling traces. */
212#ifndef YYDEBUG
213# define YYDEBUG ]b4_debug[
214#endif
215
216/* Enabling verbose error messages. */
217#ifdef YYERROR_VERBOSE
218# undef YYERROR_VERBOSE
219# define YYERROR_VERBOSE 1
220#else
221# define YYERROR_VERBOSE ]b4_error_verbose[
222#endif
223
224/* Enabling the token table. */
225#ifndef YYTOKEN_TABLE
226# define YYTOKEN_TABLE ]b4_token_table[
227#endif
01241d47 228
288006a2 229/* Default (constant) value used for initialization for null
f6abc26e 230 right-hand sides. Unlike the standard yacc.c template,
288006a2 231 here we set the default value of $$ to a zeroed-out value.
b9b51bf0
PE
232 Since the default value is undefined, this behavior is
233 technically correct. */
01241d47 234static YYSTYPE yyval_default;
01241d47
PH
235
236/* Copy the second part of user declarations. */
237]b4_post_prologue[
238
996b1c7e 239]/* Line __line__ of glr.c. */
947427ae 240b4_syncline([@oline@], [@ofile@])
01241d47 241[
63cb01d6
PE
242#include <stdio.h>
243#include <stdlib.h>
244#include <string.h>
245#include <stdarg.h>
63cb01d6 246
30757c8c
PE
247#ifndef YY_
248# if YYENABLE_NLS
249# if ENABLE_NLS
250# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
251# define YY_(msgid) dgettext ("bison-runtime", msgid)
252# endif
253# endif
254# ifndef YY_
255# define YY_(msgid) msgid
256# endif
257#endif
258
2a4647a3 259/* Suppress unused-variable warnings by "using" E. */
12ce2df6
PE
260#ifndef lint
261# define YYUSE(e) ((void) (e))
613d8952 262#else
12ce2df6
PE
263# define YYUSE(e) /* empty */
264#endif
265
266/* Identity function, used to suppress warnings about constant conditions. */
267#ifndef lint
268# define YYID(n) (n)
269#else
270]b4_c_function_def([YYID], [static int], [[int i], [i]])[
271{
272 return i;
273}
613d8952 274#endif
2a4647a3 275
a525b568
PE
276#ifndef YYFREE
277# define YYFREE free
278#endif
279#ifndef YYMALLOC
280# define YYMALLOC malloc
281#endif
282#ifndef YYREALLOC
283# define YYREALLOC realloc
284#endif
285
63cb01d6
PE
286#define YYSIZEMAX ((size_t) -1)
287
f7c398aa
PE
288#ifdef __cplusplus
289 typedef bool yybool;
290#else
291 typedef unsigned char yybool;
01241d47 292#endif
f7c398aa
PE
293#define yytrue 1
294#define yyfalse 0
01241d47 295
c89b4c03
PE
296#ifndef YYSETJMP
297# include <setjmp.h>
298# define YYJMP_BUF jmp_buf
299# define YYSETJMP(env) setjmp (env)
300# define YYLONGJMP(env, val) longjmp (env, val)
301#endif
302
1154cced
AD
303/*-----------------.
304| GCC extensions. |
305`-----------------*/
306
307#ifndef __attribute__
308/* This feature is available in gcc versions 2.5 and later. */
3bc00d6c
PE
309# if (!defined (__GNUC__) || __GNUC__ < 2 \
310 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__)
1154cced
AD
311# define __attribute__(Spec) /* empty */
312# endif
313#endif
314
3bc00d6c
PE
315]b4_location_if([#define YYOPTIONAL_LOC(Name) Name],[
316#ifdef __cplusplus
317# define YYOPTIONAL_LOC(Name) /* empty */
318#else
319# define YYOPTIONAL_LOC(Name) Name __attribute__ ((__unused__))
320#endif])[
321
64c4fd52
PE
322#ifndef YYASSERT
323# define YYASSERT(condition) ((void) ((condition) || (abort (), 0)))
324#endif
325
01241d47 326/* YYFINAL -- State number of the termination state. */
7db2ed2d 327#define YYFINAL ]b4_final_state_number[
39912f52 328/* YYLAST -- Last index in YYTABLE. */
01241d47
PH
329#define YYLAST ]b4_last[
330
331/* YYNTOKENS -- Number of terminals. */
7db2ed2d 332#define YYNTOKENS ]b4_tokens_number[
01241d47 333/* YYNNTS -- Number of nonterminals. */
7db2ed2d 334#define YYNNTS ]b4_nterms_number[
01241d47 335/* YYNRULES -- Number of rules. */
7db2ed2d 336#define YYNRULES ]b4_rules_number[
01241d47 337/* YYNRULES -- Number of states. */
7db2ed2d 338#define YYNSTATES ]b4_states_number[
01241d47
PH
339/* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
340#define YYMAXRHS ]b4_r2_max[
25005f6a
PH
341/* YYMAXLEFT -- Maximum number of symbols to the left of a handle
342 accessed by $0, $-1, etc., in any rule. */
343#define YYMAXLEFT ]b4_max_left_semantic_context[
01241d47
PH
344
345/* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
346#define YYUNDEFTOK ]b4_undef_token_number[
347#define YYMAXUTOK ]b4_user_token_number_max[
348
5cc16ecc 349#define YYTRANSLATE(YYX) \
b0400cc6 350 ((YYX <= 0) ? YYEOF : \
779e7ceb 351 (unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01241d47
PH
352
353/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
a762e609 354static const ]b4_int_type_for([b4_translate])[ yytranslate[] =
01241d47
PH
355{
356 ]b4_translate[
357};
358
359#if YYDEBUG
360/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
361 YYRHS. */
a762e609 362static const ]b4_int_type_for([b4_prhs])[ yyprhs[] =
01241d47
PH
363{
364 ]b4_prhs[
365};
366
367/* YYRHS -- A `-1'-separated list of the rules' RHS. */
a762e609 368static const ]b4_int_type_for([b4_rhs])[ yyrhs[] =
01241d47
PH
369{
370 ]b4_rhs[
371};
372
373/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
a762e609 374static const ]b4_int_type_for([b4_rline])[ yyrline[] =
01241d47
PH
375{
376 ]b4_rline[
377};
378#endif
379
141f5793 380#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
9e0876fb 381/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
01241d47
PH
382 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
383static const char *const yytname[] =
384{
385 ]b4_tname[
386};
01241d47
PH
387#endif
388
389/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
a762e609 390static const ]b4_int_type_for([b4_r1])[ yyr1[] =
01241d47
PH
391{
392 ]b4_r1[
393};
394
395/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
a762e609 396static const ]b4_int_type_for([b4_r2])[ yyr2[] =
01241d47
PH
397{
398 ]b4_r2[
399};
400
401/* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
a762e609 402static const ]b4_int_type_for([b4_dprec])[ yydprec[] =
01241d47
PH
403{
404 ]b4_dprec[
405};
406
407/* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
a762e609 408static const ]b4_int_type_for([b4_merger])[ yymerger[] =
01241d47
PH
409{
410 ]b4_merger[
411};
412
413/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
414 doesn't specify something else to do. Zero means the default is an
415 error. */
a762e609 416static const ]b4_int_type_for([b4_defact])[ yydefact[] =
01241d47
PH
417{
418 ]b4_defact[
419};
420
12b0043a 421/* YYPDEFGOTO[NTERM-NUM]. */
a762e609 422static const ]b4_int_type_for([b4_defgoto])[ yydefgoto[] =
01241d47
PH
423{
424 ]b4_defgoto[
425};
426
427/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
428 STATE-NUM. */
12b0043a 429#define YYPACT_NINF ]b4_pact_ninf[
a762e609 430static const ]b4_int_type_for([b4_pact])[ yypact[] =
01241d47
PH
431{
432 ]b4_pact[
433};
434
435/* YYPGOTO[NTERM-NUM]. */
a762e609 436static const ]b4_int_type_for([b4_pgoto])[ yypgoto[] =
01241d47
PH
437{
438 ]b4_pgoto[
439};
440
441/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
442 positive, shift that token. If negative, reduce the rule which
f50adbbd 443 number is the opposite. If zero, do what YYDEFACT says.
6e649e65 444 If YYTABLE_NINF, syntax error. */
12b0043a 445#define YYTABLE_NINF ]b4_table_ninf[
a762e609 446static const ]b4_int_type_for([b4_table])[ yytable[] =
01241d47
PH
447{
448 ]b4_table[
449};
450
ea99527d
AD
451/* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
452 list of conflicting reductions corresponding to action entry for
453 state STATE-NUM in yytable. 0 means no conflicts. The list in
454 yyconfl is terminated by a rule number of 0. */
a762e609 455static const ]b4_int_type_for([b4_conflict_list_heads])[ yyconflp[] =
01241d47
PH
456{
457 ]b4_conflict_list_heads[
458};
459
ea99527d
AD
460/* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
461 0, pointed into by YYCONFLP. */
a762e609 462]dnl Do not use b4_int_type_for here, since there are places where
779e7ceb 463dnl pointers onto yyconfl are taken, which type is "short int *".
a762e609 464dnl We probably ought to introduce a type for confl.
779e7ceb 465[static const short int yyconfl[] =
01241d47
PH
466{
467 ]b4_conflicting_rules[
468};
469
a762e609 470static const ]b4_int_type_for([b4_check])[ yycheck[] =
01241d47
PH
471{
472 ]b4_check[
473};
474
7bd6c77e
AD
475/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
476 symbol of state STATE-NUM. */
477static const ]b4_int_type_for([b4_stos])[ yystos[] =
478{
479 ]b4_stos[
480};
481
01241d47 482\f
0245f82d 483/* Prevent warning if -Wmissing-prototypes. */
2a8d363a 484]b4_c_ansi_function_decl([yyparse], [int], b4_parse_param)[
e7cb57c0 485
2a8d363a 486/* Error token number */
01241d47
PH
487#define YYTERROR 1
488
b4a20338
AD
489/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
490 If N is 0, then set CURRENT to the empty location which ends
491 the previous symbol: RHS[0] (always defined). */
01241d47 492
25005f6a 493]b4_location_if([[
9fafc4dd 494#define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
01241d47 495#ifndef YYLLOC_DEFAULT
9fafc4dd
PE
496# define YYLLOC_DEFAULT(Current, Rhs, N) \
497 do \
498 if (N) \
499 { \
9bec482e
PE
500 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
501 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
502 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
503 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
9fafc4dd
PE
504 } \
505 else \
506 { \
507 (Current).first_line = (Current).last_line = \
9bec482e 508 YYRHSLOC (Rhs, 0).last_line; \
9fafc4dd 509 (Current).first_column = (Current).last_column = \
9bec482e 510 YYRHSLOC (Rhs, 0).last_column; \
9fafc4dd 511 } \
12ce2df6 512 while (YYID (0))
3fc16193
AD
513
514/* YY_LOCATION_PRINT -- Print the location on the stream.
515 This macro was not mandated originally: define only if we know
516 we won't break user code: when these are the locations we know. */
517
518# define YY_LOCATION_PRINT(File, Loc) \
519 fprintf (File, "%d.%d-%d.%d", \
69ce078b
PE
520 (Loc).first_line, (Loc).first_column, \
521 (Loc).last_line, (Loc).last_column)
25005f6a
PH
522#endif
523]],[
524#ifndef YYLLOC_DEFAULT
9fafc4dd 525# define YYLLOC_DEFAULT(Current, Rhs, N) ((void) 0)
01241d47 526#endif
25005f6a
PH
527])[
528
3fc16193
AD
529#ifndef YY_LOCATION_PRINT
530# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
531#endif
532
01241d47
PH
533
534/* YYLEX -- calling `yylex' with the right arguments. */
21964f43 535#define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
01241d47
PH
536
537]b4_pure_if(
538[
01241d47 539#undef yynerrs
3e7a2cd9 540#define yynerrs (yystackp->yyerrcnt)
01241d47 541#undef yychar
3e7a2cd9 542#define yychar (yystackp->yyrawchar)],
01241d47
PH
543[YYSTYPE yylval;
544
545YYLTYPE yylloc;
546
547int yynerrs;
548int yychar;])[
549
550static const int YYEOF = 0;
551static const int YYEMPTY = -2;
552
553typedef enum { yyok, yyaccept, yyabort, yyerr } YYRESULTTAG;
554
555#define YYCHK(YYE) \
5cc16ecc 556 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
12ce2df6 557 while (YYID (0))
01241d47
PH
558
559#if YYDEBUG
560
2f4f028d 561#if ! defined (YYFPRINTF)
01241d47 562# define YYFPRINTF fprintf
2f4f028d 563#endif
01241d47
PH
564
565# define YYDPRINTF(Args) \
566do { \
567 if (yydebug) \
568 YYFPRINTF Args; \
12ce2df6 569} while (YYID (0))
7bd6c77e
AD
570
571]b4_yysymprint_generate([b4_c_ansi_function_def])[
572
4b367315
AD
573# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
574do { \
575 if (yydebug) \
576 { \
577 YYFPRINTF (stderr, "%s ", Title); \
578 yysymprint (stderr, \
69ce078b 579 Type, Value]b4_location_if([, Location])[]b4_user_args[); \
4b367315
AD
580 YYFPRINTF (stderr, "\n"); \
581 } \
12ce2df6 582} while (YYID (0))
9c1e26bd 583
01241d47
PH
584/* Nonzero means print parse trace. It is left uninitialized so that
585 multiple parsers can coexist. */
586int yydebug;
7bd6c77e 587
01241d47 588#else /* !YYDEBUG */
7bd6c77e 589
ee16363f 590# define YYDPRINTF(Args)
284acc8b 591# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
7bd6c77e 592
01241d47
PH
593#endif /* !YYDEBUG */
594
595/* YYINITDEPTH -- initial size of the parser's stacks. */
596#ifndef YYINITDEPTH
66d30cd4 597# define YYINITDEPTH ]b4_stack_depth_init[
01241d47
PH
598#endif
599
600/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
601 if the built-in stack extension method is used).
602
603 Do not make this value too large; the results are undefined if
fb8135fa 604 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
01241d47
PH
605 evaluated with infinite-precision integer arithmetic. */
606
01241d47 607#ifndef YYMAXDEPTH
66d30cd4 608# define YYMAXDEPTH ]b4_stack_depth_max[
01241d47
PH
609#endif
610
611/* Minimum number of free items on the stack allowed after an
fb8135fa 612 allocation. This is to allow allocation and initialization
63cb01d6 613 to be completed by functions that call yyexpandGLRStack before the
fb8135fa 614 stack is expanded, thus insuring that all necessary pointers get
01241d47
PH
615 properly redirected to new data. */
616#define YYHEADROOM 2
617
e2688cd9
PE
618#ifndef YYSTACKEXPANDABLE
619# if (! defined (__cplusplus) \
620 || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
621 && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))
622# define YYSTACKEXPANDABLE 1
623# else
624# define YYSTACKEXPANDABLE 0
625# endif
01241d47
PH
626#endif
627
02998094
AD
628#if YYSTACKEXPANDABLE
629# define YY_RESERVE_GLRSTACK(Yystack) \
630 do { \
631 if (Yystack->yyspaceLeft < YYHEADROOM) \
632 yyexpandGLRStack (Yystack); \
12ce2df6 633 } while (YYID (0))
02998094
AD
634#else
635# define YY_RESERVE_GLRSTACK(Yystack) \
636 do { \
637 if (Yystack->yyspaceLeft < YYHEADROOM) \
638 yyMemoryExhausted (Yystack); \
12ce2df6 639 } while (YYID (0))
02998094
AD
640#endif
641
642
63cb01d6
PE
643#if YYERROR_VERBOSE
644
645# ifndef yystpcpy
646# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
647# define yystpcpy stpcpy
648# else
649/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
650 YYDEST. */
651static char *
652yystpcpy (char *yydest, const char *yysrc)
653{
654 char *yyd = yydest;
655 const char *yys = yysrc;
656
657 while ((*yyd++ = *yys++) != '\0')
658 continue;
659
660 return yyd - 1;
661}
662# endif
663# endif
664
9e0876fb
PE
665# ifndef yytnamerr
666/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
667 quotes and backslashes, so that it's suitable for yyerror. The
668 heuristic is that double-quoting is unnecessary unless the string
669 contains an apostrophe, a comma, or backslash (other than
670 backslash-backslash). YYSTR is taken from yytname. If YYRES is
671 null, do not copy; instead, return the length of what the result
672 would have been. */
673static size_t
674yytnamerr (char *yyres, const char *yystr)
675{
676 if (*yystr == '"')
677 {
678 size_t yyn = 0;
679 char const *yyp = yystr;
680
681 for (;;)
682 switch (*++yyp)
683 {
684 case '\'':
685 case ',':
686 goto do_not_strip_quotes;
687
688 case '\\':
689 if (*++yyp != '\\')
690 goto do_not_strip_quotes;
691 /* Fall through. */
692 default:
693 if (yyres)
694 yyres[yyn] = *yyp;
695 yyn++;
696 break;
697
698 case '"':
699 if (yyres)
700 yyres[yyn] = '\0';
701 return yyn;
702 }
703 do_not_strip_quotes: ;
704 }
705
706 if (! yyres)
707 return strlen (yystr);
708
709 return yystpcpy (yyres, yystr) - yyres;
710}
711# endif
712
63cb01d6
PE
713#endif /* !YYERROR_VERBOSE */
714
01241d47
PH
715/** State numbers, as in LALR(1) machine */
716typedef int yyStateNum;
717
718/** Rule numbers, as in LALR(1) machine */
719typedef int yyRuleNum;
720
721/** Grammar symbol */
779e7ceb 722typedef short int yySymbol;
01241d47
PH
723
724/** Item references, as in LALR(1) machine */
779e7ceb 725typedef short int yyItemNum;
01241d47
PH
726
727typedef struct yyGLRState yyGLRState;
3e7a2cd9 728typedef struct yyGLRStateSet yyGLRStateSet;
01241d47
PH
729typedef struct yySemanticOption yySemanticOption;
730typedef union yyGLRStackItem yyGLRStackItem;
731typedef struct yyGLRStack yyGLRStack;
01241d47
PH
732
733struct yyGLRState {
5e6f62f2 734 /** Type tag: always true. */
f7c398aa 735 yybool yyisState;
5e6f62f2
PH
736 /** Type tag for yysemantics. If true, yysval applies, otherwise
737 * yyfirstVal applies. */
f7c398aa 738 yybool yyresolved;
5e6f62f2 739 /** Number of corresponding LALR(1) machine state. */
01241d47 740 yyStateNum yylrState;
5e6f62f2 741 /** Preceding state in this stack */
01241d47 742 yyGLRState* yypred;
5e6f62f2 743 /** Source position of the first token produced by my symbol */
01241d47
PH
744 size_t yyposn;
745 union {
5e6f62f2 746 /** First in a chain of alternative reductions producing the
010f91c3 747 * non-terminal corresponding to this state, threaded through
5e6f62f2 748 * yynext. */
01241d47 749 yySemanticOption* yyfirstVal;
5e6f62f2 750 /** Semantic value for this state. */
01241d47
PH
751 YYSTYPE yysval;
752 } yysemantics;
5e6f62f2 753 /** Source location for this state. */
01241d47
PH
754 YYLTYPE yyloc;
755};
756
757struct yyGLRStateSet {
758 yyGLRState** yystates;
759 size_t yysize, yycapacity;
760};
761
762struct yySemanticOption {
5e6f62f2 763 /** Type tag: always false. */
f7c398aa 764 yybool yyisState;
5e6f62f2 765 /** Rule number for this reduction */
01241d47 766 yyRuleNum yyrule;
5e6f62f2 767 /** The last RHS state in the list of states to be reduced. */
01241d47 768 yyGLRState* yystate;
5e6f62f2
PH
769 /** Next sibling in chain of options. To facilitate merging,
770 * options are chained in decreasing order by address. */
01241d47
PH
771 yySemanticOption* yynext;
772};
773
010f91c3 774/** Type of the items in the GLR stack. The yyisState field
5e6f62f2 775 * indicates which item of the union is valid. */
01241d47
PH
776union yyGLRStackItem {
777 yyGLRState yystate;
778 yySemanticOption yyoption;
779};
780
781struct yyGLRStack {
01241d47 782 int yyerrState;
63d72da7
PE
783]b4_location_if([[ /* To compute the location of the error token. */
784 yyGLRStackItem yyerror_range[3];]])[
01241d47
PH
785]b4_pure_if(
786[
787 int yyerrcnt;
788 int yyrawchar;
789])[
790 yySymbol* yytokenp;
c89b4c03 791 YYJMP_BUF yyexception_buffer;
01241d47
PH
792 yyGLRStackItem* yyitems;
793 yyGLRStackItem* yynextFree;
63cb01d6 794 size_t yyspaceLeft;
01241d47
PH
795 yyGLRState* yysplitPoint;
796 yyGLRState* yylastDeleted;
797 yyGLRStateSet yytops;
798};
799
b2741627 800#if YYSTACKEXPANDABLE
3e7a2cd9 801static void yyexpandGLRStack (yyGLRStack* yystackp);
b2741627 802#endif
01241d47 803
3e7a2cd9 804static void yyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
135bc829 805 __attribute__ ((__noreturn__));
01241d47 806static void
3e7a2cd9 807yyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
01241d47 808{
fd2df2ed
PE
809 if (yymsg != NULL)
810 yyerror (]b4_yyerror_args[yymsg);
3e7a2cd9 811 YYLONGJMP (yystackp->yyexception_buffer, 1);
01241d47
PH
812}
813
3e7a2cd9 814static void yyMemoryExhausted (yyGLRStack* yystackp)
135bc829 815 __attribute__ ((__noreturn__));
63cb01d6 816static void
3e7a2cd9 817yyMemoryExhausted (yyGLRStack* yystackp)
63cb01d6 818{
3e7a2cd9 819 YYLONGJMP (yystackp->yyexception_buffer, 2);
63cb01d6
PE
820}
821
01241d47 822#if YYDEBUG || YYERROR_VERBOSE
63cb01d6 823/** A printable representation of TOKEN. */
fb8135fa
AD
824static inline const char*
825yytokenName (yySymbol yytoken)
01241d47 826{
d0d5aa64
PE
827 if (yytoken == YYEMPTY)
828 return "";
829
01241d47
PH
830 return yytname[yytoken];
831}
832#endif
833
f868dc04
PH
834/** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
835 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
44e7ead1 836 * containing the pointer to the next state in the chain. */
135bc829 837static void yyfillin (yyGLRStackItem *, int, int) __attribute__ ((__unused__));
6a84279c
PE
838static void
839yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1)
f868dc04
PH
840{
841 yyGLRState* s;
842 int i;
c4749565 843 s = yyvsp[yylow0].yystate.yypred;
f868dc04
PH
844 for (i = yylow0-1; i >= yylow1; i -= 1)
845 {
64c4fd52 846 YYASSERT (s->yyresolved);
f868dc04
PH
847 yyvsp[i].yystate.yyresolved = yytrue;
848 yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval;
849 yyvsp[i].yystate.yyloc = s->yyloc;
850 s = yyvsp[i].yystate.yypred = s->yypred;
851 }
6a84279c
PE
852}
853
854/* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
44e7ead1
PH
855 * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
856 * For convenience, always return YYLOW1. */
6a84279c 857static inline int yyfill (yyGLRStackItem *, int *, int, yybool)
135bc829 858 __attribute__ ((__unused__));
6a84279c
PE
859static inline int
860yyfill (yyGLRStackItem *yyvsp, int *yylow, int yylow1, yybool yynormal)
861{
862 if (!yynormal && yylow1 < *yylow)
863 {
864 yyfillin (yyvsp, *yylow, yylow1);
865 *yylow = yylow1;
866 }
f868dc04
PH
867 return yylow1;
868}
869
01241d47
PH
870/** Perform user action for rule number YYN, with RHS length YYRHSLEN,
871 * and top stack item YYVSP. YYLVALP points to place to put semantic
872 * value ($$), and yylocp points to place for location information
947427ae 873 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
01241d47 874 * yyerr for YYERROR, yyabort for YYABORT. */
12ce2df6 875/*ARGSUSED*/ static YYRESULTTAG
fb8135fa 876yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
80a18357 877 YYSTYPE* yyvalp,
43d3b664 878 YYLTYPE* YYOPTIONAL_LOC (yylocp),
3e7a2cd9 879 yyGLRStack* yystackp
69ce078b 880 ]b4_user_formals[)
01241d47 881{
135bc829 882 yybool yynormal __attribute__ ((__unused__)) =
3e7a2cd9 883 (yystackp->yysplitPoint == NULL);
f868dc04 884 int yylow;
613d8952
AD
885]b4_parse_param_use[]dnl
886[# undef yyerrok
3e7a2cd9 887# define yyerrok (yystackp->yyerrState = 0)
01241d47
PH
888# undef YYACCEPT
889# define YYACCEPT return yyaccept
890# undef YYABORT
891# define YYABORT return yyabort
892# undef YYERROR
5cc16ecc 893# define YYERROR return yyerrok, yyerr
01241d47 894# undef YYRECOVERING
3e7a2cd9 895# define YYRECOVERING (yystackp->yyerrState != 0)
01241d47 896# undef yyclearin
3e7a2cd9 897# define yyclearin (yychar = *(yystackp->yytokenp) = YYEMPTY)
f868dc04 898# undef YYFILL
6a84279c 899# define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
01241d47
PH
900# undef YYBACKUP
901# define YYBACKUP(Token, Value) \
30757c8c 902 return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")), \
5cc16ecc 903 yyerrok, yyerr
01241d47 904
25005f6a
PH
905 yylow = 1;
906 if (yyrhslen == 0)
b4a20338 907 *yyvalp = yyval_default;
25005f6a 908 else
b4a20338
AD
909 *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval;
910 YYLLOC_DEFAULT (*yylocp, yyvsp - yyrhslen, yyrhslen);
3e7a2cd9 911]b4_location_if([[ yystackp->yyerror_range[1].yystate.yyloc = *yylocp;
d741bd1b 912]])
25005f6a
PH
913 switch (yyn)
914 {
915 b4_actions
95f22ad2 916 default: break;
25005f6a 917 }
01241d47 918
25005f6a 919 return yyok;
01241d47
PH
920# undef yyerrok
921# undef YYABORT
922# undef YYACCEPT
923# undef YYERROR
924# undef YYBACKUP
925# undef yyclearin
926# undef YYRECOVERING
996b1c7e 927/* Line __line__ of glr.c. */
947427ae 928b4_syncline([@oline@], [@ofile@])
01241d47
PH
929}
930\f
931
12ce2df6 932/*ARGSUSED*/ static void
01241d47
PH
933yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1)
934{
2a4647a3
PE
935 YYUSE (yy0);
936 YYUSE (yy1);
1154cced 937
fb8135fa 938 switch (yyn)
01241d47
PH
939 {
940 b4_mergers
e2688cd9 941 default: break;
01241d47 942 }
01241d47
PH
943}
944[
2a8d363a 945 /* Bison grammar-table manipulation. */
01241d47 946
7bd6c77e
AD
947]b4_yydestruct_generate([b4_c_ansi_function_def])[
948
42a6501d
PE
949/** Number of symbols composing the right hand side of rule #RULE. */
950static inline int
951yyrhsLength (yyRuleNum yyrule)
952{
953 return yyr2[yyrule];
954}
955
a4cf101a 956static void
4b367315 957yydestroyGLRState (char const *yymsg, yyGLRState *yys]b4_user_formals[)
a4cf101a
PE
958{
959 if (yys->yyresolved)
960 yydestruct (yymsg, yystos[yys->yylrState],
4b367315 961 &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[]b4_user_args[);
a4cf101a
PE
962 else
963 {
964#if YYDEBUG
965 if (yydebug)
966 {
967 YYFPRINTF (stderr, "%s unresolved ", yymsg);
968 yysymprint (stderr, yystos[yys->yylrState],
4b367315 969 &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[]b4_user_args[);
2f4f028d 970 YYFPRINTF (stderr, "\n");
a4cf101a
PE
971 }
972#endif
a4cf101a 973
42a6501d 974 if (yys->yysemantics.yyfirstVal)
69ce078b
PE
975 {
976 yySemanticOption *yyoption = yys->yysemantics.yyfirstVal;
977 yyGLRState *yyrh;
978 int yyn;
979 for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule);
980 yyn > 0;
981 yyrh = yyrh->yypred, yyn -= 1)
982 yydestroyGLRState (yymsg, yyrh]b4_user_args[);
983 }
42a6501d 984 }
01241d47
PH
985}
986
987/** Left-hand-side symbol for rule #RULE. */
988static inline yySymbol
fb8135fa 989yylhsNonterm (yyRuleNum yyrule)
01241d47
PH
990{
991 return yyr1[yyrule];
992}
993
944ed9f4 994#define yyis_pact_ninf(yystate) \
62b08cfc
AD
995 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), [1],
996 [0],
997 [((yystate) == YYPACT_NINF)])[
944ed9f4 998
01241d47
PH
999/** True iff LR state STATE has only a default reduction (regardless
1000 * of token). */
f7c398aa 1001static inline yybool
01241d47
PH
1002yyisDefaultedState (yyStateNum yystate)
1003{
944ed9f4 1004 return yyis_pact_ninf (yypact[yystate]);
01241d47 1005}
fb8135fa 1006
01241d47
PH
1007/** The default reduction for STATE, assuming it has one. */
1008static inline yyRuleNum
1009yydefaultAction (yyStateNum yystate)
1010{
1011 return yydefact[yystate];
1012}
1013
df38312a 1014#define yyis_table_ninf(yytable_value) \
62b08cfc 1015 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), [1],
3e7a2cd9 1016 [YYID (0)],
62b08cfc 1017 [((yytable_value) == YYTABLE_NINF)])[
944ed9f4 1018
2a1fe6ed 1019/** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
01241d47
PH
1020 * Result R means
1021 * R < 0: Reduce on rule -R.
1022 * R = 0: Error.
fb8135fa
AD
1023 * R > 0: Shift to state R.
1024 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
01241d47
PH
1025 * conflicting reductions.
1026 */
1027static inline void
fb8135fa 1028yygetLRActions (yyStateNum yystate, int yytoken,
69ce078b 1029 int* yyaction, const short int** yyconflicts)
01241d47
PH
1030{
1031 int yyindex = yypact[yystate] + yytoken;
f50adbbd 1032 if (yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
01241d47
PH
1033 {
1034 *yyaction = -yydefact[yystate];
1035 *yyconflicts = yyconfl;
1036 }
df38312a 1037 else if (! yyis_table_ninf (yytable[yyindex]))
01241d47
PH
1038 {
1039 *yyaction = yytable[yyindex];
1040 *yyconflicts = yyconfl + yyconflp[yyindex];
1041 }
f50adbbd
AD
1042 else
1043 {
1044 *yyaction = 0;
1045 *yyconflicts = yyconfl + yyconflp[yyindex];
1046 }
01241d47
PH
1047}
1048
1049static inline yyStateNum
1050yyLRgotoState (yyStateNum yystate, yySymbol yylhs)
1051{
1052 int yyr;
1053 yyr = yypgoto[yylhs - YYNTOKENS] + yystate;
f50adbbd 1054 if (0 <= yyr && yyr <= YYLAST && yycheck[yyr] == yystate)
01241d47
PH
1055 return yytable[yyr];
1056 else
1057 return yydefgoto[yylhs - YYNTOKENS];
1058}
1059
f7c398aa 1060static inline yybool
fb8135fa 1061yyisShiftAction (int yyaction)
01241d47 1062{
39912f52 1063 return 0 < yyaction;
01241d47
PH
1064}
1065
f7c398aa 1066static inline yybool
fb8135fa 1067yyisErrorAction (int yyaction)
01241d47 1068{
f50adbbd 1069 return yyaction == 0;
01241d47
PH
1070}
1071
1072 /* GLRStates */
1073
02998094
AD
1074/** Return a fresh GLRStackItem. Callers should call
1075 * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
1076 * headroom. */
1077
1078static inline yyGLRStackItem*
3e7a2cd9 1079yynewGLRStackItem (yyGLRStack* yystackp, yybool yyisState)
02998094 1080{
3e7a2cd9
PE
1081 yyGLRStackItem* yynewItem = yystackp->yynextFree;
1082 yystackp->yyspaceLeft -= 1;
1083 yystackp->yynextFree += 1;
02998094
AD
1084 yynewItem->yystate.yyisState = yyisState;
1085 return yynewItem;
1086}
1087
1154cced 1088static void
3e7a2cd9 1089yyaddDeferredAction (yyGLRStack* yystackp, yyGLRState* yystate,
df9a1ba4 1090 yyGLRState* rhs, yyRuleNum yyrule)
01241d47 1091{
02998094 1092 yySemanticOption* yynewOption =
3e7a2cd9 1093 &yynewGLRStackItem (yystackp, yyfalse)->yyoption;
02998094
AD
1094 yynewOption->yystate = rhs;
1095 yynewOption->yyrule = yyrule;
1096 yynewOption->yynext = yystate->yysemantics.yyfirstVal;
1097 yystate->yysemantics.yyfirstVal = yynewOption;
1098
3e7a2cd9 1099 YY_RESERVE_GLRSTACK (yystackp);
01241d47
PH
1100}
1101
1102 /* GLRStacks */
1103
1104/** Initialize SET to a singleton set containing an empty stack. */
63cb01d6 1105static yybool
01241d47
PH
1106yyinitStateSet (yyGLRStateSet* yyset)
1107{
1108 yyset->yysize = 1;
1109 yyset->yycapacity = 16;
be16239b 1110 yyset->yystates = (yyGLRState**) YYMALLOC (16 * sizeof yyset->yystates[0]);
63cb01d6
PE
1111 if (! yyset->yystates)
1112 return yyfalse;
01241d47 1113 yyset->yystates[0] = NULL;
63cb01d6 1114 return yytrue;
01241d47
PH
1115}
1116
fb8135fa 1117static void yyfreeStateSet (yyGLRStateSet* yyset)
01241d47 1118{
a525b568 1119 YYFREE (yyset->yystates);
01241d47
PH
1120}
1121
1122/** Initialize STACK to a single empty stack, with total maximum
1123 * capacity for all stacks of SIZE. */
63cb01d6 1124static yybool
3e7a2cd9 1125yyinitGLRStack (yyGLRStack* yystackp, size_t yysize)
01241d47 1126{
3e7a2cd9 1127 yystackp->yyerrState = 0;
01241d47 1128 yynerrs = 0;
3e7a2cd9
PE
1129 yystackp->yyspaceLeft = yysize;
1130 yystackp->yyitems =
1131 (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystackp->yynextFree[0]);
1132 if (!yystackp->yyitems)
3922956a 1133 return yyfalse;
3e7a2cd9
PE
1134 yystackp->yynextFree = yystackp->yyitems;
1135 yystackp->yysplitPoint = NULL;
1136 yystackp->yylastDeleted = NULL;
1137 return yyinitStateSet (&yystackp->yytops);
01241d47
PH
1138}
1139
02998094
AD
1140
1141#if YYSTACKEXPANDABLE
1142# define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
01241d47
PH
1143 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
1144
1145/** If STACK is expandable, extend it. WARNING: Pointers into the
1146 stack from outside should be considered invalid after this call.
1147 We always expand when there are 1 or fewer items left AFTER an
1148 allocation, so that we can avoid having external pointers exist
1149 across an allocation. */
1150static void
3e7a2cd9 1151yyexpandGLRStack (yyGLRStack* yystackp)
01241d47 1152{
63cb01d6 1153 yyGLRStackItem* yynewItems;
01241d47
PH
1154 yyGLRStackItem* yyp0, *yyp1;
1155 size_t yysize, yynewSize;
1156 size_t yyn;
3e7a2cd9 1157 yysize = yystackp->yynextFree - yystackp->yyitems;
39912f52 1158 if (YYMAXDEPTH <= yysize)
3e7a2cd9 1159 yyMemoryExhausted (yystackp);
01241d47 1160 yynewSize = 2*yysize;
39912f52 1161 if (YYMAXDEPTH < yynewSize)
01241d47 1162 yynewSize = YYMAXDEPTH;
63cb01d6
PE
1163 yynewItems = (yyGLRStackItem*) YYMALLOC (yynewSize * sizeof yynewItems[0]);
1164 if (! yynewItems)
3e7a2cd9
PE
1165 yyMemoryExhausted (yystackp);
1166 for (yyp0 = yystackp->yyitems, yyp1 = yynewItems, yyn = yysize;
39912f52 1167 0 < yyn;
fb8135fa 1168 yyn -= 1, yyp0 += 1, yyp1 += 1)
01241d47
PH
1169 {
1170 *yyp1 = *yyp0;
f7c398aa 1171 if (*(yybool *) yyp0)
fb8135fa 1172 {
01241d47
PH
1173 yyGLRState* yys0 = &yyp0->yystate;
1174 yyGLRState* yys1 = &yyp1->yystate;
fb8135fa
AD
1175 if (yys0->yypred != NULL)
1176 yys1->yypred =
01241d47
PH
1177 YYRELOC (yyp0, yyp1, yys0->yypred, yystate);
1178 if (! yys0->yyresolved && yys0->yysemantics.yyfirstVal != NULL)
fb8135fa 1179 yys1->yysemantics.yyfirstVal =
01241d47
PH
1180 YYRELOC(yyp0, yyp1, yys0->yysemantics.yyfirstVal, yyoption);
1181 }
fb8135fa 1182 else
01241d47
PH
1183 {
1184 yySemanticOption* yyv0 = &yyp0->yyoption;
1185 yySemanticOption* yyv1 = &yyp1->yyoption;
1186 if (yyv0->yystate != NULL)
1187 yyv1->yystate = YYRELOC (yyp0, yyp1, yyv0->yystate, yystate);
1188 if (yyv0->yynext != NULL)
1189 yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption);
1190 }
1191 }
3e7a2cd9
PE
1192 if (yystackp->yysplitPoint != NULL)
1193 yystackp->yysplitPoint = YYRELOC (yystackp->yyitems, yynewItems,
1194 yystackp->yysplitPoint, yystate);
1195
1196 for (yyn = 0; yyn < yystackp->yytops.yysize; yyn += 1)
1197 if (yystackp->yytops.yystates[yyn] != NULL)
1198 yystackp->yytops.yystates[yyn] =
1199 YYRELOC (yystackp->yyitems, yynewItems,
1200 yystackp->yytops.yystates[yyn], yystate);
1201 YYFREE (yystackp->yyitems);
1202 yystackp->yyitems = yynewItems;
1203 yystackp->yynextFree = yynewItems + yysize;
1204 yystackp->yyspaceLeft = yynewSize - yysize;
01241d47 1205}
02998094 1206#endif
01241d47
PH
1207
1208static void
3e7a2cd9 1209yyfreeGLRStack (yyGLRStack* yystackp)
01241d47 1210{
3e7a2cd9
PE
1211 YYFREE (yystackp->yyitems);
1212 yyfreeStateSet (&yystackp->yytops);
01241d47
PH
1213}
1214
1215/** Assuming that S is a GLRState somewhere on STACK, update the
fb8135fa 1216 * splitpoint of STACK, if needed, so that it is at least as deep as
01241d47
PH
1217 * S. */
1218static inline void
3e7a2cd9 1219yyupdateSplit (yyGLRStack* yystackp, yyGLRState* yys)
01241d47 1220{
3e7a2cd9
PE
1221 if (yystackp->yysplitPoint != NULL && yystackp->yysplitPoint > yys)
1222 yystackp->yysplitPoint = yys;
01241d47
PH
1223}
1224
1225/** Invalidate stack #K in STACK. */
1226static inline void
3e7a2cd9 1227yymarkStackDeleted (yyGLRStack* yystackp, size_t yyk)
01241d47 1228{
3e7a2cd9
PE
1229 if (yystackp->yytops.yystates[yyk] != NULL)
1230 yystackp->yylastDeleted = yystackp->yytops.yystates[yyk];
1231 yystackp->yytops.yystates[yyk] = NULL;
01241d47
PH
1232}
1233
fb8135fa 1234/** Undelete the last stack that was marked as deleted. Can only be
01241d47
PH
1235 done once after a deletion, and only when all other stacks have
1236 been deleted. */
1237static void
3e7a2cd9 1238yyundeleteLastStack (yyGLRStack* yystackp)
01241d47 1239{
3e7a2cd9 1240 if (yystackp->yylastDeleted == NULL || yystackp->yytops.yysize != 0)
01241d47 1241 return;
3e7a2cd9
PE
1242 yystackp->yytops.yystates[0] = yystackp->yylastDeleted;
1243 yystackp->yytops.yysize = 1;
2f4f028d 1244 YYDPRINTF ((stderr, "Restoring last deleted stack as stack #0.\n"));
3e7a2cd9 1245 yystackp->yylastDeleted = NULL;
01241d47
PH
1246}
1247
1248static inline void
3e7a2cd9 1249yyremoveDeletes (yyGLRStack* yystackp)
01241d47 1250{
1154cced 1251 size_t yyi, yyj;
01241d47 1252 yyi = yyj = 0;
3e7a2cd9 1253 while (yyj < yystackp->yytops.yysize)
01241d47 1254 {
3e7a2cd9 1255 if (yystackp->yytops.yystates[yyi] == NULL)
01241d47 1256 {
1154cced 1257 if (yyi == yyj)
ee16363f 1258 {
2f4f028d 1259 YYDPRINTF ((stderr, "Removing dead stacks.\n"));
ee16363f 1260 }
3e7a2cd9 1261 yystackp->yytops.yysize -= 1;
01241d47 1262 }
fb8135fa 1263 else
01241d47 1264 {
3e7a2cd9 1265 yystackp->yytops.yystates[yyj] = yystackp->yytops.yystates[yyi];
01241d47 1266 if (yyj != yyi)
ee16363f 1267 {
08fc98e5
PE
1268 YYDPRINTF ((stderr, "Rename stack %lu -> %lu.\n",
1269 (unsigned long int) yyi, (unsigned long int) yyj));
ee16363f 1270 }
01241d47
PH
1271 yyj += 1;
1272 }
1273 yyi += 1;
1274 }
1275}
1276
fb8135fa 1277/** Shift to a new state on stack #K of STACK, corresponding to LR state
01241d47
PH
1278 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1279static inline void
3e7a2cd9 1280yyglrShift (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
63cb01d6 1281 size_t yyposn,
3e7a2cd9 1282 YYSTYPE* yyvalp, YYLTYPE* yylocp)
01241d47 1283{
3e7a2cd9 1284 yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
01241d47 1285
02998094
AD
1286 yynewState->yylrState = yylrState;
1287 yynewState->yyposn = yyposn;
1288 yynewState->yyresolved = yytrue;
3e7a2cd9
PE
1289 yynewState->yypred = yystackp->yytops.yystates[yyk];
1290 yynewState->yysemantics.yysval = *yyvalp;
02998094 1291 yynewState->yyloc = *yylocp;
3e7a2cd9 1292 yystackp->yytops.yystates[yyk] = yynewState;
02998094 1293
3e7a2cd9 1294 YY_RESERVE_GLRSTACK (yystackp);
01241d47
PH
1295}
1296
f868dc04 1297/** Shift stack #K of YYSTACK, to a new state corresponding to LR
c4749565 1298 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
f868dc04 1299 * semantic value of YYRHS under the action for YYRULE. */
01241d47 1300static inline void
3e7a2cd9 1301yyglrShiftDefer (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
df9a1ba4 1302 size_t yyposn, yyGLRState* rhs, yyRuleNum yyrule)
01241d47 1303{
3e7a2cd9 1304 yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
02998094
AD
1305
1306 yynewState->yylrState = yylrState;
1307 yynewState->yyposn = yyposn;
1308 yynewState->yyresolved = yyfalse;
3e7a2cd9 1309 yynewState->yypred = yystackp->yytops.yystates[yyk];
02998094 1310 yynewState->yysemantics.yyfirstVal = NULL;
3e7a2cd9 1311 yystackp->yytops.yystates[yyk] = yynewState;
02998094
AD
1312
1313 /* Invokes YY_RESERVE_GLRSTACK. */
3e7a2cd9 1314 yyaddDeferredAction (yystackp, yynewState, rhs, yyrule);
01241d47
PH
1315}
1316
1317/** Pop the symbols consumed by reduction #RULE from the top of stack
fb8135fa
AD
1318 * #K of STACK, and perform the appropriate semantic action on their
1319 * semantic values. Assumes that all ambiguities in semantic values
01241d47
PH
1320 * have been previously resolved. Set *VALP to the resulting value,
1321 * and *LOCP to the computed location (if any). Return value is as
1322 * for userAction. */
ff032592 1323static inline YYRESULTTAG
3e7a2cd9 1324yydoAction (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
5cc16ecc 1325 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
01241d47
PH
1326{
1327 int yynrhs = yyrhsLength (yyrule);
1328
3e7a2cd9 1329 if (yystackp->yysplitPoint == NULL)
01241d47
PH
1330 {
1331 /* Standard special case: single stack. */
3e7a2cd9 1332 yyGLRStackItem* rhs = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
64c4fd52 1333 YYASSERT (yyk == 0);
3e7a2cd9
PE
1334 yystackp->yynextFree -= yynrhs;
1335 yystackp->yyspaceLeft += yynrhs;
1336 yystackp->yytops.yystates[0] = & yystackp->yynextFree[-1].yystate;
e7cb57c0 1337 return yyuserAction (yyrule, yynrhs, rhs,
3e7a2cd9 1338 yyvalp, yylocp, yystackp]b4_user_args[);
01241d47 1339 }
fb8135fa 1340 else
01241d47 1341 {
44e7ead1
PH
1342 /* At present, doAction is never called in nondeterministic
1343 * mode, so this branch is never taken. It is here in
1344 * anticipation of a future feature that will allow immediate
1345 * evaluation of selected actions in nondeterministic mode. */
01241d47
PH
1346 int yyi;
1347 yyGLRState* yys;
25005f6a 1348 yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
5cc16ecc 1349 yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred
3e7a2cd9 1350 = yystackp->yytops.yystates[yyk];]b4_location_if([[
44e7ead1
PH
1351 if (yynrhs == 0)
1352 /* Set default location. */
69ce078b 1353 yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc;]])[
f868dc04 1354 for (yyi = 0; yyi < yynrhs; yyi += 1)
01241d47 1355 {
f868dc04 1356 yys = yys->yypred;
64c4fd52 1357 YYASSERT (yys);
01241d47 1358 }
3e7a2cd9
PE
1359 yyupdateSplit (yystackp, yys);
1360 yystackp->yytops.yystates[yyk] = yys;
25005f6a 1361 return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
3e7a2cd9 1362 yyvalp, yylocp, yystackp]b4_user_args[);
01241d47
PH
1363 }
1364}
1365
e7cb57c0 1366#if !YYDEBUG
62b08cfc 1367# define YY_REDUCE_PRINT(Args)
e7cb57c0 1368#else
62b08cfc 1369# define YY_REDUCE_PRINT(Args) \
e7cb57c0
AD
1370do { \
1371 if (yydebug) \
62b08cfc 1372 yy_reduce_print Args; \
12ce2df6 1373} while (YYID (0))
e7cb57c0
AD
1374
1375/*----------------------------------------------------------.
1376| Report that the RULE is going to be reduced on stack #K. |
1377`----------------------------------------------------------*/
1378
12ce2df6 1379/*ARGSUSED*/ static inline void
3e7a2cd9 1380yy_reduce_print (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
62b08cfc 1381 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
e7cb57c0 1382{
62b08cfc
AD
1383 int yynrhs = yyrhsLength (yyrule);
1384 yybool yynormal __attribute__ ((__unused__)) =
3e7a2cd9
PE
1385 (yystackp->yysplitPoint == NULL);
1386 yyGLRStackItem* yyvsp = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
62b08cfc 1387 int yylow = 1;
e7cb57c0 1388 int yyi;
613d8952
AD
1389 YYUSE (yyvalp);
1390 YYUSE (yylocp);
1391]b4_parse_param_use[]dnl
1392[ YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu):\n",
08fc98e5
PE
1393 (unsigned long int) yyk, yyrule - 1,
1394 (unsigned long int) yyrline[yyrule]);
6de5398d 1395 /* The symbols being reduced. */
62b08cfc
AD
1396 for (yyi = 0; yyi < yynrhs; yyi++)
1397 {
a1373f55 1398 fprintf (stderr, " $%d = ", yyi + 1);
62b08cfc 1399 yysymprint (stderr, yyrhs[yyprhs[yyrule] + yyi],
69ce078b
PE
1400 &]b4_rhs_value(yynrhs, yyi + 1)[
1401 ]b4_location_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
1402 b4_user_args[);
62b08cfc
AD
1403 fprintf (stderr, "\n");
1404 }
e7cb57c0
AD
1405}
1406#endif
1407
01241d47
PH
1408/** Pop items off stack #K of STACK according to grammar rule RULE,
1409 * and push back on the resulting nonterminal symbol. Perform the
fb8135fa 1410 * semantic action associated with RULE and store its value with the
01241d47
PH
1411 * newly pushed state, if FORCEEVAL or if STACK is currently
1412 * unambiguous. Otherwise, store the deferred semantic action with
1413 * the new state. If the new state would have an identical input
1414 * position, LR state, and predecessor to an existing state on the stack,
fb8135fa
AD
1415 * it is identified with that existing state, eliminating stack #K from
1416 * the STACK. In this case, the (necessarily deferred) semantic value is
1417 * added to the options for the existing state's semantic value.
01241d47
PH
1418 */
1419static inline YYRESULTTAG
3e7a2cd9 1420yyglrReduce (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
69ce078b 1421 yybool yyforceEval]b4_user_formals[)
01241d47 1422{
3e7a2cd9 1423 size_t yyposn = yystackp->yytops.yystates[yyk]->yyposn;
01241d47 1424
3e7a2cd9 1425 if (yyforceEval || yystackp->yysplitPoint == NULL)
01241d47
PH
1426 {
1427 YYSTYPE yysval;
1428 YYLTYPE yyloc;
fb8135fa 1429
3e7a2cd9
PE
1430 YY_REDUCE_PRINT ((yystackp, yyk, yyrule, &yysval, &yyloc]b4_user_args[));
1431 YYCHK (yydoAction (yystackp, yyk, yyrule, &yysval,
1432 &yyloc]b4_user_args[));
62b08cfc 1433 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyrule], &yysval, &yyloc);
3e7a2cd9
PE
1434 yyglrShift (yystackp, yyk,
1435 yyLRgotoState (yystackp->yytops.yystates[yyk]->yylrState,
01241d47 1436 yylhsNonterm (yyrule)),
3e7a2cd9 1437 yyposn, &yysval, &yyloc);
01241d47 1438 }
fb8135fa 1439 else
01241d47 1440 {
1154cced
AD
1441 size_t yyi;
1442 int yyn;
3e7a2cd9 1443 yyGLRState* yys, *yys0 = yystackp->yytops.yystates[yyk];
01241d47
PH
1444 yyStateNum yynewLRState;
1445
3e7a2cd9 1446 for (yys = yystackp->yytops.yystates[yyk], yyn = yyrhsLength (yyrule);
39912f52 1447 0 < yyn; yyn -= 1)
01241d47
PH
1448 {
1449 yys = yys->yypred;
64c4fd52 1450 YYASSERT (yys);
01241d47 1451 }
3e7a2cd9 1452 yyupdateSplit (yystackp, yys);
01241d47 1453 yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule));
fb8135fa 1454 YYDPRINTF ((stderr,
dfc8a220 1455 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
08fc98e5 1456 (unsigned long int) yyk, yyrule - 1, yynewLRState));
3e7a2cd9
PE
1457 for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
1458 if (yyi != yyk && yystackp->yytops.yystates[yyi] != NULL)
01241d47 1459 {
3e7a2cd9
PE
1460 yyGLRState* yyp, *yysplit = yystackp->yysplitPoint;
1461 yyp = yystackp->yytops.yystates[yyi];
fb8135fa 1462 while (yyp != yys && yyp != yysplit && yyp->yyposn >= yyposn)
01241d47 1463 {
fb8135fa 1464 if (yyp->yylrState == yynewLRState && yyp->yypred == yys)
01241d47 1465 {
3e7a2cd9
PE
1466 yyaddDeferredAction (yystackp, yyp, yys0, yyrule);
1467 yymarkStackDeleted (yystackp, yyk);
08fc98e5
PE
1468 YYDPRINTF ((stderr, "Merging stack %lu into stack %lu.\n",
1469 (unsigned long int) yyk,
1470 (unsigned long int) yyi));
ff032592 1471 return yyok;
01241d47
PH
1472 }
1473 yyp = yyp->yypred;
1474 }
1475 }
3e7a2cd9
PE
1476 yystackp->yytops.yystates[yyk] = yys;
1477 yyglrShiftDefer (yystackp, yyk, yynewLRState, yyposn, yys0, yyrule);
fb8135fa 1478 }
ff032592 1479 return yyok;
01241d47
PH
1480}
1481
63cb01d6 1482static size_t
3e7a2cd9 1483yysplitStack (yyGLRStack* yystackp, size_t yyk)
01241d47 1484{
3e7a2cd9 1485 if (yystackp->yysplitPoint == NULL)
01241d47 1486 {
64c4fd52 1487 YYASSERT (yyk == 0);
3e7a2cd9 1488 yystackp->yysplitPoint = yystackp->yytops.yystates[yyk];
01241d47 1489 }
3e7a2cd9 1490 if (yystackp->yytops.yysize >= yystackp->yytops.yycapacity)
01241d47 1491 {
63cb01d6 1492 yyGLRState** yynewStates;
3e7a2cd9 1493 if (! ((yystackp->yytops.yycapacity
63cb01d6
PE
1494 <= (YYSIZEMAX / (2 * sizeof yynewStates[0])))
1495 && (yynewStates =
3e7a2cd9
PE
1496 (yyGLRState**) YYREALLOC (yystackp->yytops.yystates,
1497 ((yystackp->yytops.yycapacity *= 2)
63cb01d6 1498 * sizeof yynewStates[0])))))
3e7a2cd9
PE
1499 yyMemoryExhausted (yystackp);
1500 yystackp->yytops.yystates = yynewStates;
01241d47 1501 }
3e7a2cd9
PE
1502 yystackp->yytops.yystates[yystackp->yytops.yysize]
1503 = yystackp->yytops.yystates[yyk];
1504 yystackp->yytops.yysize += 1;
1505 return yystackp->yytops.yysize-1;
01241d47
PH
1506}
1507
1508/** True iff Y0 and Y1 represent identical options at the top level.
1509 * That is, they represent the same rule applied to RHS symbols
1510 * that produce the same terminal symbols. */
f7c398aa 1511static yybool
01241d47
PH
1512yyidenticalOptions (yySemanticOption* yyy0, yySemanticOption* yyy1)
1513{
fb8135fa 1514 if (yyy0->yyrule == yyy1->yyrule)
01241d47
PH
1515 {
1516 yyGLRState *yys0, *yys1;
1517 int yyn;
fb8135fa 1518 for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
01241d47
PH
1519 yyn = yyrhsLength (yyy0->yyrule);
1520 yyn > 0;
1521 yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
1522 if (yys0->yyposn != yys1->yyposn)
1523 return yyfalse;
1524 return yytrue;
1525 }
1526 else
1527 return yyfalse;
1528}
1529
5e6f62f2
PH
1530/** Assuming identicalOptions (Y0,Y1), destructively merge the
1531 * alternative semantic values for the RHS-symbols of Y1 and Y0. */
01241d47
PH
1532static void
1533yymergeOptionSets (yySemanticOption* yyy0, yySemanticOption* yyy1)
1534{
1535 yyGLRState *yys0, *yys1;
1536 int yyn;
fb8135fa 1537 for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
01241d47
PH
1538 yyn = yyrhsLength (yyy0->yyrule);
1539 yyn > 0;
1540 yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
5e6f62f2
PH
1541 {
1542 if (yys0 == yys1)
1543 break;
010f91c3 1544 else if (yys0->yyresolved)
5e6f62f2
PH
1545 {
1546 yys1->yyresolved = yytrue;
1547 yys1->yysemantics.yysval = yys0->yysemantics.yysval;
1548 }
1549 else if (yys1->yyresolved)
1550 {
1551 yys0->yyresolved = yytrue;
1552 yys0->yysemantics.yysval = yys1->yysemantics.yysval;
1553 }
010f91c3 1554 else
5e6f62f2
PH
1555 {
1556 yySemanticOption** yyz0p;
1557 yySemanticOption* yyz1;
1558 yyz0p = &yys0->yysemantics.yyfirstVal;
1559 yyz1 = yys1->yysemantics.yyfirstVal;
3e7a2cd9 1560 while (YYID (yytrue))
5e6f62f2
PH
1561 {
1562 if (yyz1 == *yyz0p || yyz1 == NULL)
1563 break;
1564 else if (*yyz0p == NULL)
1565 {
1566 *yyz0p = yyz1;
1567 break;
1568 }
1569 else if (*yyz0p < yyz1)
1570 {
1571 yySemanticOption* yyz = *yyz0p;
1572 *yyz0p = yyz1;
1573 yyz1 = yyz1->yynext;
1574 (*yyz0p)->yynext = yyz;
1575 }
1576 yyz0p = &(*yyz0p)->yynext;
1577 }
1578 yys1->yysemantics.yyfirstVal = yys0->yysemantics.yyfirstVal;
1579 }
1580 }
01241d47
PH
1581}
1582
1583/** Y0 and Y1 represent two possible actions to take in a given
1584 * parsing state; return 0 if no combination is possible,
1585 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1586static int
1154cced 1587yypreference (yySemanticOption* y0, yySemanticOption* y1)
01241d47 1588{
1154cced
AD
1589 yyRuleNum r0 = y0->yyrule, r1 = y1->yyrule;
1590 int p0 = yydprec[r0], p1 = yydprec[r1];
01241d47 1591
1154cced 1592 if (p0 == p1)
01241d47 1593 {
1154cced 1594 if (yymerger[r0] == 0 || yymerger[r0] != yymerger[r1])
01241d47
PH
1595 return 0;
1596 else
1597 return 1;
1598 }
1154cced 1599 if (p0 == 0 || p1 == 0)
01241d47 1600 return 0;
1154cced 1601 if (p0 < p1)
01241d47 1602 return 3;
39912f52 1603 if (p1 < p0)
01241d47
PH
1604 return 2;
1605 return 0;
1606}
1607
fb8135fa 1608static YYRESULTTAG yyresolveValue (yySemanticOption* yyoptionList,
3e7a2cd9 1609 yyGLRStack* yystackp, YYSTYPE* yyvalp,
2a8d363a 1610 YYLTYPE* yylocp]b4_user_formals[);
01241d47
PH
1611
1612static YYRESULTTAG
3e7a2cd9
PE
1613yyresolveStates (yyGLRState* yys, int yyn,
1614 yyGLRStack* yystackp]b4_user_formals[)
01241d47
PH
1615{
1616 YYRESULTTAG yyflag;
39912f52 1617 if (0 < yyn)
01241d47 1618 {
64c4fd52 1619 YYASSERT (yys->yypred);
3e7a2cd9 1620 yyflag = yyresolveStates (yys->yypred, yyn-1, yystackp]b4_user_args[);
01241d47
PH
1621 if (yyflag != yyok)
1622 return yyflag;
fb8135fa 1623 if (! yys->yyresolved)
01241d47 1624 {
3e7a2cd9 1625 yyflag = yyresolveValue (yys->yysemantics.yyfirstVal, yystackp,
e7cb57c0 1626 &yys->yysemantics.yysval, &yys->yyloc
2a8d363a 1627 ]b4_user_args[);
01241d47
PH
1628 if (yyflag != yyok)
1629 return yyflag;
1630 yys->yyresolved = yytrue;
1631 }
1632 }
1633 return yyok;
1634}
1635
1636static YYRESULTTAG
3e7a2cd9 1637yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystackp,
69ce078b 1638 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
01241d47 1639{
25005f6a 1640 yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
f868dc04 1641 int yynrhs;
01241d47
PH
1642
1643 yynrhs = yyrhsLength (yyopt->yyrule);
3e7a2cd9 1644 YYCHK (yyresolveStates (yyopt->yystate, yynrhs, yystackp]b4_user_args[));
44e7ead1
PH
1645 yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred = yyopt->yystate;]b4_location_if([[
1646 if (yynrhs == 0)
1647 /* Set default location. */
1648 yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yyopt->yystate->yyloc;]])[
5cc16ecc 1649 return yyuserAction (yyopt->yyrule, yynrhs,
25005f6a 1650 yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
3e7a2cd9 1651 yyvalp, yylocp, yystackp]b4_user_args[);
01241d47
PH
1652}
1653
1654#if YYDEBUG
e7cb57c0
AD
1655static void
1656yyreportTree (yySemanticOption* yyx, int yyindent)
01241d47
PH
1657{
1658 int yynrhs = yyrhsLength (yyx->yyrule);
1659 int yyi;
1660 yyGLRState* yys;
1661 yyGLRState* yystates[YYMAXRHS];
782a05f9 1662 yyGLRState yyleftmost_state;
01241d47 1663
39912f52 1664 for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred)
01241d47
PH
1665 yystates[yyi] = yys;
1666 if (yys == NULL)
782a05f9
PE
1667 {
1668 yyleftmost_state.yyposn = 0;
1669 yystates[0] = &yyleftmost_state;
1670 }
01241d47
PH
1671 else
1672 yystates[0] = yys;
1673
39912f52 1674 if (yyx->yystate->yyposn < yys->yyposn + 1)
01241d47 1675 YYFPRINTF (stderr, "%*s%s -> <Rule %d, empty>\n",
fb8135fa 1676 yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
01241d47
PH
1677 yyx->yyrule);
1678 else
08fc98e5 1679 YYFPRINTF (stderr, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
01241d47 1680 yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
08fc98e5
PE
1681 yyx->yyrule, (unsigned long int) (yys->yyposn + 1),
1682 (unsigned long int) yyx->yystate->yyposn);
fb8135fa 1683 for (yyi = 1; yyi <= yynrhs; yyi += 1)
01241d47 1684 {
fb8135fa 1685 if (yystates[yyi]->yyresolved)
01241d47
PH
1686 {
1687 if (yystates[yyi-1]->yyposn+1 > yystates[yyi]->yyposn)
1688 YYFPRINTF (stderr, "%*s%s <empty>\n", yyindent+2, "",
1689 yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]));
1690 else
08fc98e5 1691 YYFPRINTF (stderr, "%*s%s <tokens %lu .. %lu>\n", yyindent+2, "",
01241d47 1692 yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]),
08fc98e5
PE
1693 (unsigned long int) (yystates[yyi - 1]->yyposn + 1),
1694 (unsigned long int) yystates[yyi]->yyposn);
01241d47 1695 }
fb8135fa 1696 else
01241d47
PH
1697 yyreportTree (yystates[yyi]->yysemantics.yyfirstVal, yyindent+2);
1698 }
1699}
fb8135fa 1700#endif
01241d47 1701
135bc829 1702static void yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1,
3e7a2cd9 1703 yyGLRStack* yystackp]b4_pure_formals[)
135bc829 1704 __attribute__ ((__noreturn__));
01241d47
PH
1705static void
1706yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1,
3e7a2cd9 1707 yyGLRStack* yystackp]b4_pure_formals[)
01241d47 1708{
2a4647a3
PE
1709 YYUSE (yyx0);
1710 YYUSE (yyx1);
1154cced 1711
01241d47 1712#if YYDEBUG
2f4f028d
PE
1713 YYFPRINTF (stderr, "Ambiguity detected.\n");
1714 YYFPRINTF (stderr, "Option 1,\n");
01241d47 1715 yyreportTree (yyx0, 2);
2f4f028d 1716 YYFPRINTF (stderr, "\nOption 2,\n");
01241d47 1717 yyreportTree (yyx1, 2);
2f4f028d 1718 YYFPRINTF (stderr, "\n");
01241d47 1719#endif
3e7a2cd9 1720 yyFail (yystackp][]b4_pure_args[, YY_("syntax is ambiguous"));
01241d47
PH
1721}
1722
1723
1724/** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1725 * actions, and return the result. */
1726static YYRESULTTAG
3e7a2cd9 1727yyresolveValue (yySemanticOption* yyoptionList, yyGLRStack* yystackp,
2a8d363a 1728 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
01241d47
PH
1729{
1730 yySemanticOption* yybest;
f9315de5 1731 yySemanticOption** yypp;
63cb01d6 1732 yybool yymerge;
01241d47 1733
fb8135fa 1734 yybest = yyoptionList;
63cb01d6 1735 yymerge = yyfalse;
f9315de5 1736 for (yypp = &yyoptionList->yynext; *yypp != NULL; )
01241d47 1737 {
f9315de5
PE
1738 yySemanticOption* yyp = *yypp;
1739
01241d47 1740 if (yyidenticalOptions (yybest, yyp))
f9315de5
PE
1741 {
1742 yymergeOptionSets (yybest, yyp);
1743 *yypp = yyp->yynext;
1744 }
01241d47 1745 else
f9315de5
PE
1746 {
1747 switch (yypreference (yybest, yyp))
1748 {
1749 case 0:
3e7a2cd9 1750 yyreportAmbiguity (yybest, yyp, yystackp]b4_pure_args[);
f9315de5
PE
1751 break;
1752 case 1:
1753 yymerge = yytrue;
1754 break;
1755 case 2:
1756 break;
1757 case 3:
1758 yybest = yyp;
1759 yymerge = yyfalse;
1760 break;
ae199bf1 1761 default:
d1101454 1762 /* This cannot happen so it is not worth a YYASSERT (yyfalse),
69ce078b 1763 but some compilers complain if the default case is
ae199bf1
PE
1764 omitted. */
1765 break;
f9315de5
PE
1766 }
1767 yypp = &yyp->yynext;
1768 }
01241d47
PH
1769 }
1770
fb8135fa 1771 if (yymerge)
01241d47 1772 {
f9315de5 1773 yySemanticOption* yyp;
01241d47 1774 int yyprec = yydprec[yybest->yyrule];
3e7a2cd9 1775 YYCHK (yyresolveAction (yybest, yystackp, yyvalp, yylocp]b4_user_args[));
fb8135fa 1776 for (yyp = yybest->yynext; yyp != NULL; yyp = yyp->yynext)
01241d47 1777 {
fb8135fa 1778 if (yyprec == yydprec[yyp->yyrule])
01241d47
PH
1779 {
1780 YYSTYPE yyval1;
1781 YYLTYPE yydummy;
3e7a2cd9
PE
1782 YYCHK (yyresolveAction (yyp, yystackp, &yyval1,
1783 &yydummy]b4_user_args[));
7b98f503 1784 yyuserMerge (yymerger[yyp->yyrule], yyvalp, &yyval1);
01241d47
PH
1785 }
1786 }
1787 return yyok;
1788 }
1789 else
3e7a2cd9 1790 return yyresolveAction (yybest, yystackp, yyvalp, yylocp]b4_user_args[);
01241d47
PH
1791}
1792
1793static YYRESULTTAG
3e7a2cd9 1794yyresolveStack (yyGLRStack* yystackp]b4_user_formals[)
01241d47 1795{
3e7a2cd9 1796 if (yystackp->yysplitPoint != NULL)
01241d47
PH
1797 {
1798 yyGLRState* yys;
1799 int yyn;
1800
3e7a2cd9
PE
1801 for (yyn = 0, yys = yystackp->yytops.yystates[0];
1802 yys != yystackp->yysplitPoint;
01241d47 1803 yys = yys->yypred, yyn += 1)
ee16363f 1804 continue;
3e7a2cd9 1805 YYCHK (yyresolveStates (yystackp->yytops.yystates[0], yyn, yystackp
2a8d363a 1806 ]b4_user_args[));
01241d47
PH
1807 }
1808 return yyok;
1809}
1810
1811static void
3e7a2cd9 1812yycompressStack (yyGLRStack* yystackp)
01241d47
PH
1813{
1814 yyGLRState* yyp, *yyq, *yyr;
1815
3e7a2cd9 1816 if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == NULL)
01241d47
PH
1817 return;
1818
3e7a2cd9
PE
1819 for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = NULL;
1820 yyp != yystackp->yysplitPoint;
01241d47
PH
1821 yyr = yyp, yyp = yyq, yyq = yyp->yypred)
1822 yyp->yypred = yyr;
fb8135fa 1823
3e7a2cd9
PE
1824 yystackp->yyspaceLeft += yystackp->yynextFree - yystackp->yyitems;
1825 yystackp->yynextFree = ((yyGLRStackItem*) yystackp->yysplitPoint) + 1;
1826 yystackp->yyspaceLeft -= yystackp->yynextFree - yystackp->yyitems;
1827 yystackp->yysplitPoint = NULL;
1828 yystackp->yylastDeleted = NULL;
fb8135fa
AD
1829
1830 while (yyr != NULL)
1831 {
3e7a2cd9 1832 yystackp->yynextFree->yystate = *yyr;
01241d47 1833 yyr = yyr->yypred;
3e7a2cd9
PE
1834 yystackp->yynextFree->yystate.yypred = &yystackp->yynextFree[-1].yystate;
1835 yystackp->yytops.yystates[0] = &yystackp->yynextFree->yystate;
1836 yystackp->yynextFree += 1;
1837 yystackp->yyspaceLeft -= 1;
01241d47
PH
1838 }
1839}
1840
1841static YYRESULTTAG
3e7a2cd9 1842yyprocessOneStack (yyGLRStack* yystackp, size_t yyk,
69ce078b 1843 size_t yyposn, YYSTYPE* yylvalp, YYLTYPE* yyllocp
63cb01d6 1844 ]b4_pure_formals[)
01241d47
PH
1845{
1846 int yyaction;
779e7ceb 1847 const short int* yyconflicts;
01241d47 1848 yyRuleNum yyrule;
3e7a2cd9 1849 yySymbol* const yytokenp = yystackp->yytokenp;
01241d47 1850
3e7a2cd9 1851 while (yystackp->yytops.yystates[yyk] != NULL)
01241d47 1852 {
3e7a2cd9 1853 yyStateNum yystate = yystackp->yytops.yystates[yyk]->yylrState;
63cb01d6
PE
1854 YYDPRINTF ((stderr, "Stack %lu Entering state %d\n",
1855 (unsigned long int) yyk, yystate));
01241d47 1856
64c4fd52
PE
1857 YYASSERT (yystate != YYFINAL);
1858
fb8135fa 1859 if (yyisDefaultedState (yystate))
01241d47
PH
1860 {
1861 yyrule = yydefaultAction (yystate);
fb8135fa 1862 if (yyrule == 0)
01241d47 1863 {
63cb01d6
PE
1864 YYDPRINTF ((stderr, "Stack %lu dies.\n",
1865 (unsigned long int) yyk));
3e7a2cd9 1866 yymarkStackDeleted (yystackp, yyk);
01241d47
PH
1867 return yyok;
1868 }
3e7a2cd9 1869 YYCHK (yyglrReduce (yystackp, yyk, yyrule, yyfalse]b4_user_args[));
01241d47 1870 }
fb8135fa 1871 else
01241d47 1872 {
fb8135fa 1873 if (*yytokenp == YYEMPTY)
01241d47 1874 {
2f4f028d 1875 YYDPRINTF ((stderr, "Reading a token: "));
01241d47 1876 yychar = YYLEX;
b0400cc6 1877 *yytokenp = YYTRANSLATE (yychar);
284acc8b 1878 YY_SYMBOL_PRINT ("Next token is", *yytokenp, yylvalp, yyllocp);
01241d47
PH
1879 }
1880 yygetLRActions (yystate, *yytokenp, &yyaction, &yyconflicts);
1881
fb8135fa 1882 while (*yyconflicts != 0)
01241d47 1883 {
3e7a2cd9 1884 size_t yynewStack = yysplitStack (yystackp, yyk);
63cb01d6
PE
1885 YYDPRINTF ((stderr, "Splitting off stack %lu from %lu.\n",
1886 (unsigned long int) yynewStack,
1887 (unsigned long int) yyk));
3e7a2cd9 1888 YYCHK (yyglrReduce (yystackp, yynewStack,
df9a1ba4 1889 *yyconflicts, yyfalse]b4_user_args[));
3e7a2cd9 1890 YYCHK (yyprocessOneStack (yystackp, yynewStack, yyposn,
63cb01d6 1891 yylvalp, yyllocp]b4_pure_args[));
01241d47
PH
1892 yyconflicts += 1;
1893 }
fb8135fa
AD
1894
1895 if (yyisShiftAction (yyaction))
69ce078b 1896 break;
fb8135fa 1897 else if (yyisErrorAction (yyaction))
01241d47 1898 {
63cb01d6
PE
1899 YYDPRINTF ((stderr, "Stack %lu dies.\n",
1900 (unsigned long int) yyk));
3e7a2cd9 1901 yymarkStackDeleted (yystackp, yyk);
01241d47
PH
1902 break;
1903 }
1904 else
3e7a2cd9 1905 YYCHK (yyglrReduce (yystackp, yyk, -yyaction, yyfalse]b4_user_args[));
01241d47
PH
1906 }
1907 }
1908 return yyok;
1909}
1910
3e7a2cd9
PE
1911/*ARGSUSED*/ static void
1912yyreportSyntaxError (yyGLRStack* yystackp,
ee16363f 1913 YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[)
01241d47 1914{
2a4647a3
PE
1915 YYUSE (yylvalp);
1916 YYUSE (yyllocp);
01241d47 1917
3e7a2cd9 1918 if (yystackp->yyerrState == 0)
01241d47 1919 {
fb8135fa 1920#if YYERROR_VERBOSE
3e7a2cd9 1921 yySymbol* const yytokenp = yystackp->yytokenp;
93a0df69 1922 int yyn;
3e7a2cd9 1923 yyn = yypact[yystackp->yytops.yystates[0]->yylrState];
12b0043a 1924 if (YYPACT_NINF < yyn && yyn < YYLAST)
01241d47 1925 {
9e0876fb 1926 size_t yysize0 = yytnamerr (NULL, yytokenName (*yytokenp));
63cb01d6
PE
1927 size_t yysize = yysize0;
1928 size_t yysize1;
1929 yybool yysize_overflow = yyfalse;
1930 char* yymsg = NULL;
1931 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1932 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
93a0df69 1933 int yyx;
63cb01d6
PE
1934 char *yyfmt;
1935 char const *yyf;
1936 static char const yyunexpected[] = "syntax error, unexpected %s";
1937 static char const yyexpecting[] = ", expecting %s";
1938 static char const yyor[] = " or %s";
1939 char yyformat[sizeof yyunexpected
1940 + sizeof yyexpecting - 1
1941 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
1942 * (sizeof yyor - 1))];
1943 char const *yyprefix = yyexpecting;
93a0df69 1944
01241d47
PH
1945 /* Start YYX at -YYN if negative to avoid negative indexes in
1946 YYCHECK. */
c4749565 1947 int yyxbegin = yyn < 0 ? -yyn : 0;
93a0df69
PE
1948
1949 /* Stay within bounds of both yycheck and yytname. */
1950 int yychecklim = YYLAST - yyn;
c4749565 1951 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
63cb01d6
PE
1952 int yycount = 1;
1953
1954 yyarg[0] = yytokenName (*yytokenp);
1955 yyfmt = yystpcpy (yyformat, yyunexpected);
93a0df69 1956
c4749565 1957 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
217598da 1958 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
93a0df69 1959 {
63cb01d6 1960 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
01241d47 1961 {
63cb01d6
PE
1962 yycount = 1;
1963 yysize = yysize0;
1964 yyformat[sizeof yyunexpected - 1] = '\0';
93a0df69 1965 break;
01241d47 1966 }
63cb01d6 1967 yyarg[yycount++] = yytokenName (yyx);
9e0876fb 1968 yysize1 = yysize + yytnamerr (NULL, yytokenName (yyx));
63cb01d6
PE
1969 yysize_overflow |= yysize1 < yysize;
1970 yysize = yysize1;
1971 yyfmt = yystpcpy (yyfmt, yyprefix);
1972 yyprefix = yyor;
93a0df69 1973 }
63cb01d6 1974
30757c8c
PE
1975 yyf = YY_(yyformat);
1976 yysize1 = yysize + strlen (yyf);
63cb01d6
PE
1977 yysize_overflow |= yysize1 < yysize;
1978 yysize = yysize1;
1979
1980 if (!yysize_overflow)
1981 yymsg = (char *) YYMALLOC (yysize);
1982
1983 if (yymsg)
93a0df69 1984 {
63cb01d6
PE
1985 char *yyp = yymsg;
1986 int yyi = 0;
1987 while ((*yyp = *yyf))
93a0df69 1988 {
63cb01d6
PE
1989 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
1990 {
9e0876fb 1991 yyp += yytnamerr (yyp, yyarg[yyi++]);
63cb01d6
PE
1992 yyf += 2;
1993 }
1994 else
1995 {
1996 yyp++;
1997 yyf++;
1998 }
93a0df69
PE
1999 }
2000 yyerror (]b4_lyyerror_args[yymsg);
a525b568 2001 YYFREE (yymsg);
01241d47 2002 }
93a0df69 2003 else
1a059451
PE
2004 {
2005 yyerror (]b4_lyyerror_args[YY_("syntax error"));
3e7a2cd9 2006 yyMemoryExhausted (yystackp);
1a059451 2007 }
01241d47
PH
2008 }
2009 else
93a0df69 2010#endif /* YYERROR_VERBOSE */
30757c8c 2011 yyerror (]b4_lyyerror_args[YY_("syntax error"));
01241d47
PH
2012 yynerrs += 1;
2013 }
2014}
2015
f50adbbd 2016/* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
01241d47 2017 YYLVALP, and YYLLOCP point to the syntactic category, semantic
8dd162d3 2018 value, and location of the look-ahead. */
12ce2df6 2019/*ARGSUSED*/ static void
3e7a2cd9 2020yyrecoverSyntaxError (yyGLRStack* yystackp,
80a18357 2021 YYSTYPE* yylvalp,
43d3b664 2022 YYLTYPE* YYOPTIONAL_LOC (yyllocp)
80a18357 2023 ]b4_user_formals[)
01241d47 2024{
3e7a2cd9 2025 yySymbol* const yytokenp = yystackp->yytokenp;
1154cced
AD
2026 size_t yyk;
2027 int yyj;
01241d47 2028
3e7a2cd9 2029 if (yystackp->yyerrState == 3)
2a1fe6ed
AD
2030 /* We just shifted the error token and (perhaps) took some
2031 reductions. Skip tokens until we can proceed. */
3e7a2cd9 2032 while (YYID (yytrue))
2a1fe6ed 2033 {
01241d47 2034 if (*yytokenp == YYEOF)
3e7a2cd9 2035 yyFail (yystackp][]b4_lpure_args[, NULL);
01241d47 2036 if (*yytokenp != YYEMPTY)
e342c3be
AD
2037 {]b4_location_if([[
2038 /* We throw away the lookahead, but the error range
2039 of the shifted error token must take it into account. */
3e7a2cd9 2040 yyGLRState *yys = yystackp->yytops.yystates[0];
63d72da7
PE
2041 yyGLRStackItem yyerror_range[3];
2042 yyerror_range[1].yystate.yyloc = yys->yyloc;
2043 yyerror_range[2].yystate.yyloc = *yyllocp;
2044 YYLLOC_DEFAULT (yys->yyloc, yyerror_range, 2);]])[
e342c3be 2045 yydestruct ("Error: discarding",
4b367315 2046 *yytokenp, yylvalp]b4_location_if([, yyllocp])[]b4_user_args[);
e342c3be 2047 }
2f4f028d 2048 YYDPRINTF ((stderr, "Reading a token: "));
01241d47
PH
2049 yychar = YYLEX;
2050 *yytokenp = YYTRANSLATE (yychar);
284acc8b 2051 YY_SYMBOL_PRINT ("Next token is", *yytokenp, yylvalp, yyllocp);
3e7a2cd9 2052 yyj = yypact[yystackp->yytops.yystates[0]->yylrState];
944ed9f4 2053 if (yyis_pact_ninf (yyj))
25005f6a 2054 return;
01241d47 2055 yyj += *yytokenp;
ea99527d 2056 if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != *yytokenp)
01241d47 2057 {
3e7a2cd9 2058 if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0)
01241d47
PH
2059 return;
2060 }
944ed9f4 2061 else if (yytable[yyj] != 0 && ! yyis_table_ninf (yytable[yyj]))
01241d47 2062 return;
2a1fe6ed 2063 }
fb8135fa 2064
2a1fe6ed 2065 /* Reduce to one stack. */
3e7a2cd9
PE
2066 for (yyk = 0; yyk < yystackp->yytops.yysize; yyk += 1)
2067 if (yystackp->yytops.yystates[yyk] != NULL)
01241d47 2068 break;
3e7a2cd9
PE
2069 if (yyk >= yystackp->yytops.yysize)
2070 yyFail (yystackp][]b4_lpure_args[, NULL);
2071 for (yyk += 1; yyk < yystackp->yytops.yysize; yyk += 1)
2072 yymarkStackDeleted (yystackp, yyk);
2073 yyremoveDeletes (yystackp);
2074 yycompressStack (yystackp);
01241d47
PH
2075
2076 /* Now pop stack until we find a state that shifts the error token. */
3e7a2cd9
PE
2077 yystackp->yyerrState = 3;
2078 while (yystackp->yytops.yystates[0] != NULL)
01241d47 2079 {
3e7a2cd9 2080 yyGLRState *yys = yystackp->yytops.yystates[0];
7bd6c77e 2081 yyj = yypact[yys->yylrState];
944ed9f4 2082 if (! yyis_pact_ninf (yyj))
01241d47 2083 {
944ed9f4
PE
2084 yyj += YYTERROR;
2085 if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR
2086 && yyisShiftAction (yytable[yyj]))
2087 {
e342c3be
AD
2088 /* Shift the error token having adjusted its location. */
2089 YYLTYPE yyerrloc;]b4_location_if([[
3e7a2cd9
PE
2090 yystackp->yyerror_range[2].yystate.yyloc = *yyllocp;
2091 YYLLOC_DEFAULT (yyerrloc, yystackp->yyerror_range, 2);]])[
1576d44d 2092 YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]],
e342c3be 2093 yylvalp, &yyerrloc);
3e7a2cd9
PE
2094 yyglrShift (yystackp, 0, yytable[yyj],
2095 yys->yyposn, yylvalp, &yyerrloc);
2096 yys = yystackp->yytops.yystates[0];
944ed9f4
PE
2097 break;
2098 }
01241d47 2099 }
3e7a2cd9 2100]b4_location_if([[ yystackp->yyerror_range[1].yystate.yyloc = yys->yyloc;]])[
4b367315 2101 yydestroyGLRState ("Error: popping", yys]b4_user_args[);
3e7a2cd9
PE
2102 yystackp->yytops.yystates[0] = yys->yypred;
2103 yystackp->yynextFree -= 1;
2104 yystackp->yyspaceLeft += 1;
01241d47 2105 }
3e7a2cd9
PE
2106 if (yystackp->yytops.yystates[0] == NULL)
2107 yyFail (yystackp][]b4_lpure_args[, NULL);
fb8135fa
AD
2108}
2109
01241d47
PH
2110#define YYCHK1(YYE) \
2111 do { \
2112 switch (YYE) { \
127287e9 2113 case yyok: \
01241d47
PH
2114 break; \
2115 case yyabort: \
6100a9aa 2116 goto yyabortlab; \
01241d47 2117 case yyaccept: \
6100a9aa 2118 goto yyacceptlab; \
01241d47
PH
2119 case yyerr: \
2120 goto yyuser_error; \
127287e9
PE
2121 default: \
2122 goto yybuglab; \
01241d47 2123 } \
12ce2df6 2124 } while (YYID (0))
01241d47 2125
0245f82d
AD
2126
2127/*----------.
2128| yyparse. |
2129`----------*/
2130
2131]b4_c_ansi_function_def([yyparse], [int], b4_parse_param)[
01241d47 2132{
6100a9aa 2133 int yyresult;
fd2df2ed 2134 yySymbol yytoken;
01241d47
PH
2135 yyGLRStack yystack;
2136 size_t yyposn;
2137]b4_pure_if(
2138[
2139 YYSTYPE yylval;
2140 YYLTYPE yylloc;
2141 #undef yychar
2142 #define yychar (yystack.yyrawchar)
2143])[
2144
2145 YYSTYPE* const yylvalp = &yylval;
2146 YYLTYPE* const yyllocp = &yylloc;
fb8135fa 2147
2f4f028d 2148 YYDPRINTF ((stderr, "Starting parse\n"));
2a1fe6ed 2149
fd2df2ed 2150 yytoken = YYEMPTY;
b8458aa5
AD
2151 yylval = yyval_default;
2152]b4_location_if([
2153#if YYLTYPE_IS_TRIVIAL
2154 yylloc.first_line = yylloc.last_line = 1;
2155 yylloc.first_column = yylloc.last_column = 0;
2156#endif
2157])
2158m4_ifdef([b4_initial_action], [
1c02d4bf
AD
2159m4_pushdef([b4_at_dollar], [yylloc])dnl
2160m4_pushdef([b4_dollar_dollar], [yylval])dnl
b8458aa5
AD
2161 /* User initialization code. */
2162 b4_initial_action
2163m4_popdef([b4_dollar_dollar])dnl
2164m4_popdef([b4_at_dollar])dnl
2165/* Line __line__ of glr.c. */
2166b4_syncline([@oline@], [@ofile@])])dnl
2167[
15f40952 2168 if (! yyinitGLRStack (&yystack, YYINITDEPTH))
1a059451 2169 goto yyexhaustedlab;
c89b4c03 2170 switch (YYSETJMP (yystack.yyexception_buffer))
6100a9aa 2171 {
c89b4c03 2172 case 0: break;
6100a9aa 2173 case 1: goto yyabortlab;
1a059451 2174 case 2: goto yyexhaustedlab;
c89b4c03 2175 default: goto yybuglab;
6100a9aa 2176 }
15f40952 2177 yystack.yytokenp = &yytoken;
3e7a2cd9 2178 yyglrShift (&yystack, 0, 0, 0, &yylval, &yylloc);
01241d47
PH
2179 yyposn = 0;
2180
3e7a2cd9 2181 while (YYID (yytrue))
01241d47 2182 {
21964f43
AD
2183 /* For efficiency, we have two loops, the first of which is
2184 specialized to deterministic operation (single stack, no
2185 potential ambiguity). */
01241d47 2186 /* Standard mode */
3e7a2cd9 2187 while (YYID (yytrue))
01241d47
PH
2188 {
2189 yyRuleNum yyrule;
2190 int yyaction;
779e7ceb 2191 const short int* yyconflicts;
01241d47
PH
2192
2193 yyStateNum yystate = yystack.yytops.yystates[0]->yylrState;
69ce078b 2194 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
01241d47 2195 if (yystate == YYFINAL)
6100a9aa 2196 goto yyacceptlab;
fb8135fa 2197 if (yyisDefaultedState (yystate))
01241d47
PH
2198 {
2199 yyrule = yydefaultAction (yystate);
fb8135fa 2200 if (yyrule == 0)
01241d47 2201 {
63d72da7 2202]b4_location_if([[ yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[
ee16363f 2203 yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
01241d47
PH
2204 goto yyuser_error;
2205 }
df9a1ba4 2206 YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue]b4_user_args[));
01241d47 2207 }
fb8135fa 2208 else
01241d47 2209 {
fb8135fa 2210 if (yytoken == YYEMPTY)
01241d47 2211 {
2f4f028d 2212 YYDPRINTF ((stderr, "Reading a token: "));
01241d47
PH
2213 yychar = YYLEX;
2214 yytoken = YYTRANSLATE (yychar);
69ce078b 2215 YY_SYMBOL_PRINT ("Next token is", yytoken, yylvalp, yyllocp);
01241d47
PH
2216 }
2217 yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
2218 if (*yyconflicts != 0)
2219 break;
fb8135fa 2220 if (yyisShiftAction (yyaction))
01241d47 2221 {
1576d44d 2222 YY_SYMBOL_PRINT ("Shifting", yytoken, yylvalp, yyllocp);
01241d47
PH
2223 if (yytoken != YYEOF)
2224 yytoken = YYEMPTY;
2225 yyposn += 1;
3e7a2cd9 2226 yyglrShift (&yystack, 0, yyaction, yyposn, yylvalp, yyllocp);
39912f52 2227 if (0 < yystack.yyerrState)
01241d47 2228 yystack.yyerrState -= 1;
01241d47
PH
2229 }
2230 else if (yyisErrorAction (yyaction))
2231 {
63d72da7 2232]b4_location_if([[ yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[
ee16363f 2233 yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
01241d47
PH
2234 goto yyuser_error;
2235 }
2236 else
df9a1ba4 2237 YYCHK1 (yyglrReduce (&yystack, 0, -yyaction, yytrue]b4_user_args[));
01241d47
PH
2238 }
2239 }
2240
3e7a2cd9 2241 while (YYID (yytrue))
01241d47 2242 {
69ce078b 2243 yySymbol yytoken_to_shift;
63cb01d6
PE
2244 size_t yys;
2245 size_t yyn = yystack.yytops.yysize;
69ce078b
PE
2246
2247 /* yyprocessOneStack returns one of three things:
2248
2249 - An error flag. If the caller is yyprocessOneStack, it
2250 immediately returns as well. When the caller is finally
2251 yyparse, it jumps to an error label via YYCHK1.
2252
2253 - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
2254 (&yystack, yys), which sets the top state of yys to NULL. Thus,
2255 yyparse's following invocation of yyremoveDeletes will remove
2256 the stack.
2257
2258 - yyok, when ready to shift a token.
2259
2260 Except in the first case, yyparse will invoke yyremoveDeletes and
2261 then shift the next token onto all remaining stacks. This
2262 synchronization of the shift (that is, after all preceding
2263 reductions on all stacks) helps prevents double destructor calls
2264 on yylval in the event of memory exhaustion. */
2265
01241d47
PH
2266 for (yys = 0; yys < yyn; yys += 1)
2267 YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn,
63cb01d6 2268 yylvalp, yyllocp]b4_lpure_args[));
69ce078b
PE
2269 yyremoveDeletes (&yystack);
2270 yyn = yystack.yytops.yysize;
2271
2272 /* If any yyglrShift call fails, it will fail after shifting. Thus,
2273 a copy of yylval will already be on stack 0 in the event of a
2274 failure in the following loop. Thus, yytoken is set to YYEMPTY
2275 before the loop to make sure the user destructor for yylval isn't
2276 called twice. */
2277 yytoken_to_shift = yytoken;
01241d47
PH
2278 yytoken = YYEMPTY;
2279 yyposn += 1;
69ce078b
PE
2280 for (yys = 0; yys < yyn; yys += 1)
2281 {
2282 int yyaction;
2283 const short int* yyconflicts;
2284 yyStateNum yystate = yystack.yytops.yystates[yys]->yylrState;
2285 yygetLRActions (yystate, yytoken_to_shift, &yyaction,
2286 &yyconflicts);
2287 /* Note that yyconflicts were handled by yyprocessOneStack. */
2288 YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yys));
2289 YY_SYMBOL_PRINT ("shifting", yytoken_to_shift, yylvalp, yyllocp);
2290 yyglrShift (&yystack, yys, yyaction, yyposn,
3e7a2cd9 2291 yylvalp, yyllocp);
69ce078b
PE
2292 YYDPRINTF ((stderr, "Stack %lu now in state #%d\n",
2293 (unsigned long int) yys,
2294 yystack.yytops.yystates[yys]->yylrState));
2295 }
01241d47
PH
2296 if (yystack.yytops.yysize == 0)
2297 {
2298 yyundeleteLastStack (&yystack);
2299 if (yystack.yytops.yysize == 0)
30757c8c 2300 yyFail (&yystack][]b4_lpure_args[, YY_("syntax error"));
2a8d363a 2301 YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
2f4f028d 2302 YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
63d72da7 2303]b4_location_if([[ yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[
ee16363f 2304 yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
01241d47
PH
2305 goto yyuser_error;
2306 }
fb8135fa 2307 else if (yystack.yytops.yysize == 1)
01241d47 2308 {
2a8d363a 2309 YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
2f4f028d 2310 YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
01241d47
PH
2311 yycompressStack (&yystack);
2312 break;
2313 }
2314 }
2315 continue;
2316 yyuser_error:
ee16363f 2317 yyrecoverSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
01241d47
PH
2318 yyposn = yystack.yytops.yystates[0]->yyposn;
2319 }
6100a9aa
PE
2320
2321 yyacceptlab:
2322 yyresult = 0;
2323 goto yyreturn;
2324
127287e9
PE
2325 yybuglab:
2326 YYASSERT (yyfalse);
2327 /* Fall through. */
2328
6100a9aa
PE
2329 yyabortlab:
2330 yyresult = 1;
2331 goto yyreturn;
2332
1a059451
PE
2333 yyexhaustedlab:
2334 yyerror (]b4_lyyerror_args[YY_("memory exhausted"));
6100a9aa
PE
2335 yyresult = 2;
2336 /* Fall through. */
2337
2338 yyreturn:
2339 if (yytoken != YYEOF && yytoken != YYEMPTY)
dd5f2af2 2340 yydestruct ("Cleanup: discarding lookahead",
69ce078b 2341 yytoken, yylvalp]b4_location_if([, yyllocp])[]b4_user_args[);
01241d47 2342
3922956a
PE
2343 /* If the stack is well-formed, pop the stack until it is empty,
2344 destroying its entries as we go. But free the stack regardless
2345 of whether it is well-formed. */
2346 if (yystack.yyitems)
2347 {
2348 yyGLRState** yystates = yystack.yytops.yystates;
2349 if (yystates)
69ce078b
PE
2350 {
2351 size_t yysize = yystack.yytops.yysize;
2352 size_t yyk;
2353 for (yyk = 0; yyk < yysize; yyk += 1)
2354 if (yystates[yyk])
2355 {
2356 while (yystates[yyk])
2357 {
2358 yyGLRState *yys = yystates[yyk];
2359]b4_location_if([[ yystack.yyerror_range[1].yystate.yyloc = yys->yyloc;]]
2360)[ yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
2361 yystates[yyk] = yys->yypred;
2362 yystack.yynextFree -= 1;
2363 yystack.yyspaceLeft += 1;
2364 }
2365 break;
2366 }
2367 }
3922956a
PE
2368 yyfreeGLRStack (&yystack);
2369 }
258b75ca 2370
6100a9aa 2371 return yyresult;
01241d47
PH
2372}
2373
2374/* DEBUGGING ONLY */
417141dd 2375#ifdef YYDEBUG
3e7a2cd9 2376static void yypstack (yyGLRStack* yystackp, size_t yyk)
135bc829 2377 __attribute__ ((__unused__));
3e7a2cd9 2378static void yypdumpstack (yyGLRStack* yystackp) __attribute__ ((__unused__));
01241d47 2379
1154cced 2380static void
cf126971 2381yy_yypstack (yyGLRState* yys)
01241d47 2382{
cf126971 2383 if (yys->yypred)
01241d47 2384 {
cf126971 2385 yy_yypstack (yys->yypred);
2f4f028d 2386 fprintf (stderr, " -> ");
01241d47 2387 }
779e7ceb 2388 fprintf (stderr, "%d@@%lu", yys->yylrState, (unsigned long int) yys->yyposn);
cf126971 2389}
01241d47 2390
cf126971
PE
2391static void
2392yypstates (yyGLRState* yyst)
2393{
fb8135fa 2394 if (yyst == NULL)
2f4f028d 2395 fprintf (stderr, "<null>");
fb8135fa 2396 else
01241d47 2397 yy_yypstack (yyst);
2f4f028d 2398 fprintf (stderr, "\n");
01241d47
PH
2399}
2400
1154cced 2401static void
3e7a2cd9 2402yypstack (yyGLRStack* yystackp, size_t yyk)
01241d47 2403{
3e7a2cd9 2404 yypstates (yystackp->yytops.yystates[yyk]);
01241d47
PH
2405}
2406
5cc16ecc 2407#define YYINDEX(YYX) \
3e7a2cd9 2408 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
01241d47
PH
2409
2410
1154cced 2411static void
3e7a2cd9 2412yypdumpstack (yyGLRStack* yystackp)
01241d47
PH
2413{
2414 yyGLRStackItem* yyp;
1154cced 2415 size_t yyi;
3e7a2cd9 2416 for (yyp = yystackp->yyitems; yyp < yystackp->yynextFree; yyp += 1)
01241d47 2417 {
3e7a2cd9 2418 fprintf (stderr, "%3lu. ", (unsigned long int) (yyp - yystackp->yyitems));
f7c398aa 2419 if (*(yybool *) yyp)
01241d47 2420 {
cf126971 2421 fprintf (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
fb8135fa 2422 yyp->yystate.yyresolved, yyp->yystate.yylrState,
779e7ceb
PE
2423 (unsigned long int) yyp->yystate.yyposn,
2424 (long int) YYINDEX (yyp->yystate.yypred));
fb8135fa 2425 if (! yyp->yystate.yyresolved)
cf126971 2426 fprintf (stderr, ", firstVal: %ld",
779e7ceb 2427 (long int) YYINDEX (yyp->yystate.yysemantics.yyfirstVal));
01241d47 2428 }
fb8135fa 2429 else
01241d47 2430 {
cf126971
PE
2431 fprintf (stderr, "Option. rule: %d, state: %ld, next: %ld",
2432 yyp->yyoption.yyrule,
779e7ceb
PE
2433 (long int) YYINDEX (yyp->yyoption.yystate),
2434 (long int) YYINDEX (yyp->yyoption.yynext));
01241d47 2435 }
2f4f028d 2436 fprintf (stderr, "\n");
01241d47 2437 }
2f4f028d 2438 fprintf (stderr, "Tops:");
3e7a2cd9 2439 for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
779e7ceb 2440 fprintf (stderr, "%lu: %ld; ", (unsigned long int) yyi,
3e7a2cd9 2441 (long int) YYINDEX (yystackp->yytops.yystates[yyi]));
2f4f028d 2442 fprintf (stderr, "\n");
01241d47 2443}
417141dd 2444#endif
01241d47
PH
2445]
2446
2447b4_epilogue
2448m4_if(b4_defines_flag, 0, [],
947427ae 2449[@output @output_header_name@
010f91c3 2450b4_copyright([Skeleton parser for GLR parsing with Bison],
69ce078b 2451 [2002, 2003, 2004, 2005])[
af3412cd
PE
2452
2453/* As a special exception, when this parser skeleton is copied by
2454 Bison into a Bison output file, you may use that output file
2455 without restriction. This special exception was added by the Free
2456 Software Foundation for C GLR parsers in version 2.2 of Bison. */
2457
2458/* C GLR parser skeleton written by Paul Hilfinger. */
2459]
01241d47 2460
5059b5c8 2461b4_shared_declarations
01241d47 2462
5059b5c8 2463extern YYSTYPE b4_prefix[]lval;
01241d47 2464
e342c3be 2465b4_location_if([b4_pure_if([],
01241d47
PH
2466[extern YYLTYPE b4_prefix[]lloc;])
2467])
01241d47 2468])