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