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