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