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