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