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