]> git.saurik.com Git - bison.git/blob - data/glr.c
(yyreportSyntaxError) [YYERROR_VERBOSE]:
[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([YYLTYPE_IS_TRIVIAL && ])[YYSTYPE_IS_TRIVIAL)))
514 #define YYSTACKEXPANDABLE 1
515 #else
516 #define YYSTACKEXPANDABLE 0
517 #endif
518
519 /** State numbers, as in LALR(1) machine */
520 typedef int yyStateNum;
521
522 /** Rule numbers, as in LALR(1) machine */
523 typedef int yyRuleNum;
524
525 /** Grammar symbol */
526 typedef short yySymbol;
527
528 /** Item references, as in LALR(1) machine */
529 typedef short yyItemNum;
530
531 typedef struct yyGLRState yyGLRState;
532 typedef struct yySemanticOption yySemanticOption;
533 typedef union yyGLRStackItem yyGLRStackItem;
534 typedef struct yyGLRStack yyGLRStack;
535 typedef struct yyGLRStateSet yyGLRStateSet;
536
537 struct yyGLRState {
538 yybool yyisState;
539 yybool yyresolved;
540 yyStateNum yylrState;
541 yyGLRState* yypred;
542 size_t yyposn;
543 union {
544 yySemanticOption* yyfirstVal;
545 YYSTYPE yysval;
546 } yysemantics;
547 YYLTYPE yyloc;
548 };
549
550 struct yyGLRStateSet {
551 yyGLRState** yystates;
552 size_t yysize, yycapacity;
553 };
554
555 struct yySemanticOption {
556 yybool yyisState;
557 yyRuleNum yyrule;
558 yyGLRState* yystate;
559 yySemanticOption* yynext;
560 };
561
562 union yyGLRStackItem {
563 yyGLRState yystate;
564 yySemanticOption yyoption;
565 };
566
567 struct yyGLRStack {
568 int yyerrflag;
569 int yyerrState;
570 ]b4_pure_if(
571 [
572 int yyerrcnt;
573 int yyrawchar;
574 ])[
575 yySymbol* yytokenp;
576 jmp_buf yyexception_buffer;
577 yyGLRStackItem* yyitems;
578 yyGLRStackItem* yynextFree;
579 int yyspaceLeft;
580 yyGLRState* yysplitPoint;
581 yyGLRState* yylastDeleted;
582 yyGLRStateSet yytops;
583 };
584
585 static void yyinitGLRStack (yyGLRStack* yystack, size_t yysize);
586 static void yyexpandGLRStack (yyGLRStack* yystack]b4_pure_formals[);
587 static void yyfreeGLRStack (yyGLRStack* yystack);
588
589 static void
590 yyFail (yyGLRStack* yystack]b4_pure_formals[, const char* yyformat, ...)
591 {
592 yystack->yyerrflag = 1;
593 if (yyformat != NULL)
594 {
595 char yymsg[256];
596 va_list yyap;
597 va_start (yyap, yyformat);
598 vsprintf (yymsg, yyformat, yyap);
599 yyerror (]b4_yyerror_args[yymsg);
600 }
601 longjmp (yystack->yyexception_buffer, 1);
602 }
603
604 #if YYDEBUG || YYERROR_VERBOSE
605 /** A printable representation of TOKEN. Valid until next call to
606 * tokenName. */
607 static inline const char*
608 yytokenName (yySymbol yytoken)
609 {
610 return yytname[yytoken];
611 }
612 #endif
613
614 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
615 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
616 * containing the pointer to the next state in the chain. Assumes
617 * YYLOW1 < YYLOW0. For convenience, returns YYLOW1. */
618 static int
619 yyfill (yyGLRStackItem* yyvsp, int yylow0, int yylow1)
620 {
621 yyGLRState* s;
622 int i;
623 s = yyvsp[yylow0].yystate.yypred;
624 for (i = yylow0-1; i >= yylow1; i -= 1)
625 {
626 if (! s->yyresolved)
627 abort ();
628 yyvsp[i].yystate.yyresolved = yytrue;
629 yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval;
630 yyvsp[i].yystate.yyloc = s->yyloc;
631 s = yyvsp[i].yystate.yypred = s->yypred;
632 }
633 return yylow1;
634 }
635
636 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
637 * and top stack item YYVSP. YYLVALP points to place to put semantic
638 * value ($$), and yylocp points to place for location information
639 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
640 * yyerr for YYERROR, yyabort for YYABORT. */
641 static YYRESULTTAG
642 yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
643 YYSTYPE* yyvalp, YYLTYPE* yylocp, yyGLRStack* yystack
644 ]b4_user_formals[)
645 {
646 int yynormal = (yystack->yysplitPoint == NULL);
647 int yylow;
648
649 if (yyrhslen == 0)
650 {
651 *yyvalp = yyval_default;
652 *yylocp = yyloc_default;
653 }
654 else
655 {
656 *yyvalp = yyvsp[1-yyrhslen].yystate.yysemantics.yysval;
657 *yylocp = yyvsp[1-yyrhslen].yystate.yyloc;
658 }
659 # undef yyerrok
660 # define yyerrok (yystack->yyerrState = 0)
661 # undef YYACCEPT
662 # define YYACCEPT return yyaccept
663 # undef YYABORT
664 # define YYABORT return yyabort
665 # undef YYERROR
666 # define YYERROR return yyerr
667 # undef YYRECOVERING
668 # define YYRECOVERING (yystack->yyerrState != 0)
669 # undef yyclearin
670 # define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
671 # undef YYFILL
672 # define YYFILL(N) \
673 ((yynormal || yylow <= (N)) ? (N) : (yylow = yyfill (yyvsp, yylow, N)))
674 # undef YYBACKUP
675 # define YYBACKUP(Token, Value) \
676 do { \
677 yyerror (]b4_yyerror_args["syntax error: cannot back up"); \
678 YYERROR; \
679 } while (0)
680
681 ]
682 yylow = 1;
683 switch (yyn)
684 {
685 b4_actions
686 }
687
688 return yyok;
689 # undef yyerrok
690 # undef YYABORT
691 # undef YYACCEPT
692 # undef YYERROR
693 # undef YYBACKUP
694 # undef yyclearin
695 # undef YYRECOVERING
696 /* Line __line__ of glr.c. */
697 b4_syncline([@oline@], [@ofile@])
698 }
699 \f
700
701 static YYSTYPE
702 yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1)
703 {
704 YYSTYPE yyval = *yy0;
705 /* `Use' the arguments. */
706 (void) yy0;
707 (void) yy1;
708
709 switch (yyn)
710 {
711 b4_mergers
712 }
713 return yyval;
714 }
715 [
716 /* Bison grammar-table manipulation. */
717
718 ]b4_yydestruct_generate([b4_c_ansi_function_def])[
719
720 /** Number of symbols composing the right hand side of rule #RULE. */
721 static inline int
722 yyrhsLength (yyRuleNum yyrule)
723 {
724 return yyr2[yyrule];
725 }
726
727 /** Left-hand-side symbol for rule #RULE. */
728 static inline yySymbol
729 yylhsNonterm (yyRuleNum yyrule)
730 {
731 return yyr1[yyrule];
732 }
733
734 #define yyis_pact_ninf(yystate) \
735 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
736 0,
737 ((yystate) == YYPACT_NINF))[
738
739 /** True iff LR state STATE has only a default reduction (regardless
740 * of token). */
741 static inline yybool
742 yyisDefaultedState (yyStateNum yystate)
743 {
744 return yyis_pact_ninf (yypact[yystate]);
745 }
746
747 /** The default reduction for STATE, assuming it has one. */
748 static inline yyRuleNum
749 yydefaultAction (yyStateNum yystate)
750 {
751 return yydefact[yystate];
752 }
753
754 #define yyis_table_ninf(yytable_value) \
755 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
756 0,
757 ((yytable_value) == YYTABLE_NINF))[
758
759 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
760 * Result R means
761 * R < 0: Reduce on rule -R.
762 * R = 0: Error.
763 * R > 0: Shift to state R.
764 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
765 * conflicting reductions.
766 */
767 static inline void
768 yygetLRActions (yyStateNum yystate, int yytoken,
769 int* yyaction, const short** yyconflicts)
770 {
771 int yyindex = yypact[yystate] + yytoken;
772 if (yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
773 {
774 *yyaction = -yydefact[yystate];
775 *yyconflicts = yyconfl;
776 }
777 else if (! yyis_table_ninf (yytable[yyindex]))
778 {
779 *yyaction = yytable[yyindex];
780 *yyconflicts = yyconfl + yyconflp[yyindex];
781 }
782 else
783 {
784 *yyaction = 0;
785 *yyconflicts = yyconfl + yyconflp[yyindex];
786 }
787 }
788
789 static inline yyStateNum
790 yyLRgotoState (yyStateNum yystate, yySymbol yylhs)
791 {
792 int yyr;
793 yyr = yypgoto[yylhs - YYNTOKENS] + yystate;
794 if (0 <= yyr && yyr <= YYLAST && yycheck[yyr] == yystate)
795 return yytable[yyr];
796 else
797 return yydefgoto[yylhs - YYNTOKENS];
798 }
799
800 static inline yybool
801 yyisShiftAction (int yyaction)
802 {
803 return 0 < yyaction;
804 }
805
806 static inline yybool
807 yyisErrorAction (int yyaction)
808 {
809 return yyaction == 0;
810 }
811
812 /* GLRStates */
813
814 static void
815 yyaddDeferredAction (yyGLRStack* yystack, yyGLRState* yystate,
816 yyGLRState* rhs, yyRuleNum yyrule]b4_pure_formals[)
817 {
818 yySemanticOption* yynewItem;
819 yynewItem = &yystack->yynextFree->yyoption;
820 yystack->yyspaceLeft -= 1;
821 yystack->yynextFree += 1;
822 yynewItem->yyisState = yyfalse;
823 yynewItem->yystate = rhs;
824 yynewItem->yyrule = yyrule;
825 yynewItem->yynext = yystate->yysemantics.yyfirstVal;
826 yystate->yysemantics.yyfirstVal = yynewItem;
827 if (yystack->yyspaceLeft < YYHEADROOM)
828 yyexpandGLRStack (yystack]b4_pure_args[);
829 }
830
831 /* GLRStacks */
832
833 /** Initialize SET to a singleton set containing an empty stack. */
834 static void
835 yyinitStateSet (yyGLRStateSet* yyset)
836 {
837 yyset->yysize = 1;
838 yyset->yycapacity = 16;
839 yyset->yystates = (yyGLRState**) malloc (16 * sizeof (yyset->yystates[0]));
840 yyset->yystates[0] = NULL;
841 }
842
843 static void yyfreeStateSet (yyGLRStateSet* yyset)
844 {
845 free (yyset->yystates);
846 }
847
848 /** Initialize STACK to a single empty stack, with total maximum
849 * capacity for all stacks of SIZE. */
850 static void
851 yyinitGLRStack (yyGLRStack* yystack, size_t yysize)
852 {
853 yystack->yyerrflag = 0;
854 yystack->yyerrState = 0;
855 yynerrs = 0;
856 yystack->yyspaceLeft = yysize;
857 yystack->yynextFree = yystack->yyitems =
858 (yyGLRStackItem*) malloc (yysize * sizeof (yystack->yynextFree[0]));
859 yystack->yysplitPoint = NULL;
860 yystack->yylastDeleted = NULL;
861 yyinitStateSet (&yystack->yytops);
862 }
863
864 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
865 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
866
867 /** If STACK is expandable, extend it. WARNING: Pointers into the
868 stack from outside should be considered invalid after this call.
869 We always expand when there are 1 or fewer items left AFTER an
870 allocation, so that we can avoid having external pointers exist
871 across an allocation. */
872 static void
873 yyexpandGLRStack (yyGLRStack* yystack]b4_pure_formals[)
874 {
875 #if YYSTACKEXPANDABLE
876 yyGLRStack yynewStack;
877 yyGLRStackItem* yyp0, *yyp1;
878 size_t yysize, yynewSize;
879 size_t yyn;
880 yysize = yystack->yynextFree - yystack->yyitems;
881 if (YYMAXDEPTH <= yysize)
882 yyFail (yystack][]b4_pure_args[, "parser stack overflow");
883 yynewSize = 2*yysize;
884 if (YYMAXDEPTH < yynewSize)
885 yynewSize = YYMAXDEPTH;
886 yyinitGLRStack (&yynewStack, yynewSize);
887 for (yyp0 = yystack->yyitems, yyp1 = yynewStack.yyitems, yyn = yysize;
888 0 < yyn;
889 yyn -= 1, yyp0 += 1, yyp1 += 1)
890 {
891 *yyp1 = *yyp0;
892 if (*(yybool *) yyp0)
893 {
894 yyGLRState* yys0 = &yyp0->yystate;
895 yyGLRState* yys1 = &yyp1->yystate;
896 if (yys0->yypred != NULL)
897 yys1->yypred =
898 YYRELOC (yyp0, yyp1, yys0->yypred, yystate);
899 if (! yys0->yyresolved && yys0->yysemantics.yyfirstVal != NULL)
900 yys1->yysemantics.yyfirstVal =
901 YYRELOC(yyp0, yyp1, yys0->yysemantics.yyfirstVal, yyoption);
902 }
903 else
904 {
905 yySemanticOption* yyv0 = &yyp0->yyoption;
906 yySemanticOption* yyv1 = &yyp1->yyoption;
907 if (yyv0->yystate != NULL)
908 yyv1->yystate = YYRELOC (yyp0, yyp1, yyv0->yystate, yystate);
909 if (yyv0->yynext != NULL)
910 yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption);
911 }
912 }
913 if (yystack->yysplitPoint != NULL)
914 yystack->yysplitPoint = YYRELOC (yystack->yyitems, yynewStack.yyitems,
915 yystack->yysplitPoint, yystate);
916
917 for (yyn = 0; yyn < yystack->yytops.yysize; yyn += 1)
918 if (yystack->yytops.yystates[yyn] != NULL)
919 yystack->yytops.yystates[yyn] =
920 YYRELOC (yystack->yyitems, yynewStack.yyitems,
921 yystack->yytops.yystates[yyn], yystate);
922 free (yystack->yyitems);
923 yystack->yyitems = yynewStack.yyitems;
924 yystack->yynextFree = yynewStack.yynextFree + yysize;
925 yystack->yyspaceLeft = yynewStack.yyspaceLeft - yysize;
926
927 #else
928
929 yyFail (yystack][]b4_lpure_args[, "parser stack overflow");
930 #endif
931 }
932
933 static void
934 yyfreeGLRStack (yyGLRStack* yystack)
935 {
936 free (yystack->yyitems);
937 yyfreeStateSet (&yystack->yytops);
938 }
939
940 /** Assuming that S is a GLRState somewhere on STACK, update the
941 * splitpoint of STACK, if needed, so that it is at least as deep as
942 * S. */
943 static inline void
944 yyupdateSplit (yyGLRStack* yystack, yyGLRState* yys)
945 {
946 if (yystack->yysplitPoint != NULL && yystack->yysplitPoint > yys)
947 yystack->yysplitPoint = yys;
948 }
949
950 /** Invalidate stack #K in STACK. */
951 static inline void
952 yymarkStackDeleted (yyGLRStack* yystack, int yyk)
953 {
954 if (yystack->yytops.yystates[yyk] != NULL)
955 yystack->yylastDeleted = yystack->yytops.yystates[yyk];
956 yystack->yytops.yystates[yyk] = NULL;
957 }
958
959 /** Undelete the last stack that was marked as deleted. Can only be
960 done once after a deletion, and only when all other stacks have
961 been deleted. */
962 static void
963 yyundeleteLastStack (yyGLRStack* yystack)
964 {
965 if (yystack->yylastDeleted == NULL || yystack->yytops.yysize != 0)
966 return;
967 yystack->yytops.yystates[0] = yystack->yylastDeleted;
968 yystack->yytops.yysize = 1;
969 YYDPRINTF ((stderr, "Restoring last deleted stack as stack #0.\n"));
970 yystack->yylastDeleted = NULL;
971 }
972
973 static inline void
974 yyremoveDeletes (yyGLRStack* yystack)
975 {
976 size_t yyi, yyj;
977 yyi = yyj = 0;
978 while (yyj < yystack->yytops.yysize)
979 {
980 if (yystack->yytops.yystates[yyi] == NULL)
981 {
982 if (yyi == yyj)
983 {
984 YYDPRINTF ((stderr, "Removing dead stacks.\n"));
985 }
986 yystack->yytops.yysize -= 1;
987 }
988 else
989 {
990 yystack->yytops.yystates[yyj] = yystack->yytops.yystates[yyi];
991 if (yyj != yyi)
992 {
993 YYDPRINTF ((stderr, "Rename stack %d -> %d.\n", yyi, yyj));
994 }
995 yyj += 1;
996 }
997 yyi += 1;
998 }
999 }
1000
1001 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1002 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1003 static inline void
1004 yyglrShift (yyGLRStack* yystack, int yyk, yyStateNum yylrState, size_t yyposn,
1005 YYSTYPE yysval, YYLTYPE* yylocp]b4_user_formals[)
1006 {
1007 yyGLRStackItem* yynewItem;
1008
1009 yynewItem = yystack->yynextFree;
1010 yystack->yynextFree += 1;
1011 yystack->yyspaceLeft -= 1;
1012 yynewItem->yystate.yyisState = yytrue;
1013 yynewItem->yystate.yylrState = yylrState;
1014 yynewItem->yystate.yyposn = yyposn;
1015 yynewItem->yystate.yyresolved = yytrue;
1016 yynewItem->yystate.yypred = yystack->yytops.yystates[yyk];
1017 yystack->yytops.yystates[yyk] = &yynewItem->yystate;
1018 yynewItem->yystate.yysemantics.yysval = yysval;
1019 yynewItem->yystate.yyloc = *yylocp;
1020 if (yystack->yyspaceLeft < YYHEADROOM)
1021 yyexpandGLRStack (yystack]b4_pure_args[);
1022 }
1023
1024 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1025 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1026 * semantic value of YYRHS under the action for YYRULE. */
1027 static inline void
1028 yyglrShiftDefer (yyGLRStack* yystack, int yyk, yyStateNum yylrState,
1029 size_t yyposn, yyGLRState* rhs, yyRuleNum yyrule]b4_pure_formals[)
1030 {
1031 yyGLRStackItem* yynewItem;
1032
1033 yynewItem = yystack->yynextFree;
1034 yynewItem->yystate.yyisState = yytrue;
1035 yynewItem->yystate.yylrState = yylrState;
1036 yynewItem->yystate.yyposn = yyposn;
1037 yynewItem->yystate.yyresolved = yyfalse;
1038 yynewItem->yystate.yypred = yystack->yytops.yystates[yyk];
1039 yynewItem->yystate.yysemantics.yyfirstVal = NULL;
1040 yystack->yytops.yystates[yyk] = &yynewItem->yystate;
1041 yystack->yynextFree += 1;
1042 yystack->yyspaceLeft -= 1;
1043 yyaddDeferredAction (yystack, &yynewItem->yystate, rhs, yyrule]b4_pure_args[);
1044 }
1045
1046 /** Pop the symbols consumed by reduction #RULE from the top of stack
1047 * #K of STACK, and perform the appropriate semantic action on their
1048 * semantic values. Assumes that all ambiguities in semantic values
1049 * have been previously resolved. Set *VALP to the resulting value,
1050 * and *LOCP to the computed location (if any). Return value is as
1051 * for userAction. */
1052 static inline YYRESULTTAG
1053 yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule,
1054 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
1055 {
1056 int yynrhs = yyrhsLength (yyrule);
1057
1058 if (yystack->yysplitPoint == NULL)
1059 {
1060 /* Standard special case: single stack. */
1061 yyGLRStackItem* rhs = (yyGLRStackItem*) yystack->yytops.yystates[yyk];
1062 if (yyk != 0)
1063 abort ();
1064 yystack->yynextFree -= yynrhs;
1065 yystack->yyspaceLeft += yynrhs;
1066 yystack->yytops.yystates[0] = & yystack->yynextFree[-1].yystate;
1067 if (yynrhs == 0)
1068 {
1069 *yyvalp = yyval_default;
1070 *yylocp = yyloc_default;
1071 }
1072 else
1073 {
1074 *yyvalp = rhs[1-yynrhs].yystate.yysemantics.yysval;
1075 *yylocp = rhs[1-yynrhs].yystate.yyloc;
1076 }
1077 return yyuserAction (yyrule, yynrhs, rhs,
1078 yyvalp, yylocp, yystack]b4_user_args[);
1079 }
1080 else
1081 {
1082 int yyi;
1083 yyGLRState* yys;
1084 yyGLRStackItem yyrhsVals[YYMAXRHS+1];
1085 yys = yyrhsVals[YYMAXRHS].yystate.yypred = yystack->yytops.yystates[yyk];
1086 for (yyi = 0; yyi < yynrhs; yyi += 1)
1087 {
1088 yys = yys->yypred;
1089 if (yys == NULL)
1090 abort ();
1091 }
1092 yyupdateSplit (yystack, yys);
1093 yystack->yytops.yystates[yyk] = yys;
1094 if (yynrhs == 0)
1095 {
1096 *yyvalp = yyval_default;
1097 *yylocp = yyloc_default;
1098 }
1099 else
1100 {
1101 *yyvalp = yyrhsVals[1].yystate.yysemantics.yysval;
1102 *yylocp = yyrhsVals[1].yystate.yyloc;
1103 }
1104 return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS - 1,
1105 yyvalp, yylocp, yystack]b4_user_args[);
1106 }
1107 }
1108
1109 #if !YYDEBUG
1110 # define YY_REDUCE_PRINT(K, Rule)
1111 #else
1112 # define YY_REDUCE_PRINT(K, Rule) \
1113 do { \
1114 if (yydebug) \
1115 yy_reduce_print (K, Rule); \
1116 } while (0)
1117
1118 /*----------------------------------------------------------.
1119 | Report that the RULE is going to be reduced on stack #K. |
1120 `----------------------------------------------------------*/
1121
1122 static inline void
1123 yy_reduce_print (size_t yyk, yyRuleNum yyrule)
1124 {
1125 int yyi;
1126 unsigned int yylineno = yyrline[yyrule];
1127 YYFPRINTF (stderr, "Reducing stack %d by rule %d (line %u), ",
1128 yyk, yyrule - 1, yylineno);
1129 /* Print the symbols being reduced, and their result. */
1130 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
1131 YYFPRINTF (stderr, "%s ", yytokenName (yyrhs[yyi]));
1132 YYFPRINTF (stderr, "-> %s\n", yytokenName (yyr1[yyrule]));
1133 }
1134 #endif
1135
1136 /** Pop items off stack #K of STACK according to grammar rule RULE,
1137 * and push back on the resulting nonterminal symbol. Perform the
1138 * semantic action associated with RULE and store its value with the
1139 * newly pushed state, if FORCEEVAL or if STACK is currently
1140 * unambiguous. Otherwise, store the deferred semantic action with
1141 * the new state. If the new state would have an identical input
1142 * position, LR state, and predecessor to an existing state on the stack,
1143 * it is identified with that existing state, eliminating stack #K from
1144 * the STACK. In this case, the (necessarily deferred) semantic value is
1145 * added to the options for the existing state's semantic value.
1146 */
1147 static inline YYRESULTTAG
1148 yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule,
1149 yybool yyforceEval]b4_pure_formals[)
1150 {
1151 size_t yyposn = yystack->yytops.yystates[yyk]->yyposn;
1152
1153 if (yyforceEval || yystack->yysplitPoint == NULL)
1154 {
1155 YYSTYPE yysval;
1156 YYLTYPE yyloc;
1157
1158 YY_REDUCE_PRINT (yyk, yyrule);
1159 YYCHK (yydoAction (yystack, yyk, yyrule, &yysval, &yyloc]b4_user_args[));
1160 yyglrShift (yystack, yyk,
1161 yyLRgotoState (yystack->yytops.yystates[yyk]->yylrState,
1162 yylhsNonterm (yyrule)),
1163 yyposn, yysval, &yyloc]b4_user_args[);
1164 }
1165 else
1166 {
1167 size_t yyi;
1168 int yyn;
1169 yyGLRState* yys, *yys0 = yystack->yytops.yystates[yyk];
1170 yyStateNum yynewLRState;
1171
1172 for (yys = yystack->yytops.yystates[yyk], yyn = yyrhsLength (yyrule);
1173 0 < yyn; yyn -= 1)
1174 {
1175 yys = yys->yypred;
1176 if (yys == NULL)
1177 abort ();
1178 }
1179 yyupdateSplit (yystack, yys);
1180 yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule));
1181 YYDPRINTF ((stderr,
1182 "Reduced stack %d by rule #%d; action deferred. "
1183 "Now in state %d.\n",
1184 yyk, yyrule-1, yynewLRState));
1185 for (yyi = 0; yyi < yystack->yytops.yysize; yyi += 1)
1186 if (yyi != yyk && yystack->yytops.yystates[yyi] != NULL)
1187 {
1188 yyGLRState* yyp, *yysplit = yystack->yysplitPoint;
1189 yyp = yystack->yytops.yystates[yyi];
1190 while (yyp != yys && yyp != yysplit && yyp->yyposn >= yyposn)
1191 {
1192 if (yyp->yylrState == yynewLRState && yyp->yypred == yys)
1193 {
1194 yyaddDeferredAction (yystack, yyp, yys0, yyrule]b4_pure_args[);
1195 yymarkStackDeleted (yystack, yyk);
1196 YYDPRINTF ((stderr, "Merging stack %d into stack %d.\n",
1197 yyk, yyi));
1198 return yyok;
1199 }
1200 yyp = yyp->yypred;
1201 }
1202 }
1203 yystack->yytops.yystates[yyk] = yys;
1204 yyglrShiftDefer (yystack, yyk, yynewLRState, yyposn, yys0, yyrule]b4_pure_args[);
1205 }
1206 return yyok;
1207 }
1208
1209 static int
1210 yysplitStack (yyGLRStack* yystack, int yyk)
1211 {
1212 if (yystack->yysplitPoint == NULL)
1213 {
1214 if (yyk != 0)
1215 abort ();
1216 yystack->yysplitPoint = yystack->yytops.yystates[yyk];
1217 }
1218 if (yystack->yytops.yysize >= yystack->yytops.yycapacity)
1219 {
1220 yystack->yytops.yycapacity *= 2;
1221 yystack->yytops.yystates =
1222 (yyGLRState**) realloc (yystack->yytops.yystates,
1223 yystack->yytops.yycapacity
1224 * sizeof (yyGLRState*));
1225 }
1226 yystack->yytops.yystates[yystack->yytops.yysize]
1227 = yystack->yytops.yystates[yyk];
1228 yystack->yytops.yysize += 1;
1229 return yystack->yytops.yysize-1;
1230 }
1231
1232 /** True iff Y0 and Y1 represent identical options at the top level.
1233 * That is, they represent the same rule applied to RHS symbols
1234 * that produce the same terminal symbols. */
1235 static yybool
1236 yyidenticalOptions (yySemanticOption* yyy0, yySemanticOption* yyy1)
1237 {
1238 if (yyy0->yyrule == yyy1->yyrule)
1239 {
1240 yyGLRState *yys0, *yys1;
1241 int yyn;
1242 for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
1243 yyn = yyrhsLength (yyy0->yyrule);
1244 yyn > 0;
1245 yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
1246 if (yys0->yyposn != yys1->yyposn)
1247 return yyfalse;
1248 return yytrue;
1249 }
1250 else
1251 return yyfalse;
1252 }
1253
1254 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1255 * alternative semantic values for the RHS-symbols of Y1 into the
1256 * corresponding semantic value sets of the symbols of Y0. */
1257 static void
1258 yymergeOptionSets (yySemanticOption* yyy0, yySemanticOption* yyy1)
1259 {
1260 yyGLRState *yys0, *yys1;
1261 int yyn;
1262 for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
1263 yyn = yyrhsLength (yyy0->yyrule);
1264 yyn > 0;
1265 yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
1266 if (yys0 == yys1)
1267 break;
1268 else if (! yys0->yyresolved && ! yys1->yyresolved)
1269 {
1270 yySemanticOption* yyz;
1271 for (yyz = yys0->yysemantics.yyfirstVal; yyz->yynext != NULL;
1272 yyz = yyz->yynext)
1273 continue;
1274 yyz->yynext = yys1->yysemantics.yyfirstVal;
1275 }
1276 }
1277
1278 /** Y0 and Y1 represent two possible actions to take in a given
1279 * parsing state; return 0 if no combination is possible,
1280 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1281 static int
1282 yypreference (yySemanticOption* y0, yySemanticOption* y1)
1283 {
1284 yyRuleNum r0 = y0->yyrule, r1 = y1->yyrule;
1285 int p0 = yydprec[r0], p1 = yydprec[r1];
1286
1287 if (p0 == p1)
1288 {
1289 if (yymerger[r0] == 0 || yymerger[r0] != yymerger[r1])
1290 return 0;
1291 else
1292 return 1;
1293 }
1294 if (p0 == 0 || p1 == 0)
1295 return 0;
1296 if (p0 < p1)
1297 return 3;
1298 if (p1 < p0)
1299 return 2;
1300 return 0;
1301 }
1302
1303 static YYRESULTTAG yyresolveValue (yySemanticOption* yyoptionList,
1304 yyGLRStack* yystack, YYSTYPE* yyvalp,
1305 YYLTYPE* yylocp]b4_user_formals[);
1306
1307 static YYRESULTTAG
1308 yyresolveStates (yyGLRState* yys, int yyn, yyGLRStack* yystack]b4_user_formals[)
1309 {
1310 YYRESULTTAG yyflag;
1311 if (0 < yyn)
1312 {
1313 if (yys->yypred == NULL)
1314 abort ();
1315 yyflag = yyresolveStates (yys->yypred, yyn-1, yystack]b4_user_args[);
1316 if (yyflag != yyok)
1317 return yyflag;
1318 if (! yys->yyresolved)
1319 {
1320 yyflag = yyresolveValue (yys->yysemantics.yyfirstVal, yystack,
1321 &yys->yysemantics.yysval, &yys->yyloc
1322 ]b4_user_args[);
1323 if (yyflag != yyok)
1324 return yyflag;
1325 yys->yyresolved = yytrue;
1326 }
1327 }
1328 return yyok;
1329 }
1330
1331 static YYRESULTTAG
1332 yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystack,
1333 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
1334 {
1335 yyGLRStackItem yyrhsVals[YYMAXRHS+1];
1336 int yynrhs;
1337
1338 yynrhs = yyrhsLength (yyopt->yyrule);
1339 YYCHK (yyresolveStates (yyopt->yystate, yynrhs, yystack]b4_user_args[));
1340 yyrhsVals[YYMAXRHS].yystate.yypred = yyopt->yystate;
1341 return yyuserAction (yyopt->yyrule, yynrhs, yyrhsVals + YYMAXRHS - 1,
1342 yyvalp, yylocp, yystack]b4_user_args[);
1343 }
1344
1345 #if YYDEBUG
1346 static void
1347 yyreportTree (yySemanticOption* yyx, int yyindent)
1348 {
1349 int yynrhs = yyrhsLength (yyx->yyrule);
1350 int yyi;
1351 yyGLRState* yys;
1352 yyGLRState* yystates[YYMAXRHS];
1353 yyGLRState yyleftmost_state;
1354
1355 for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred)
1356 yystates[yyi] = yys;
1357 if (yys == NULL)
1358 {
1359 yyleftmost_state.yyposn = 0;
1360 yystates[0] = &yyleftmost_state;
1361 }
1362 else
1363 yystates[0] = yys;
1364
1365 if (yyx->yystate->yyposn < yys->yyposn + 1)
1366 YYFPRINTF (stderr, "%*s%s -> <Rule %d, empty>\n",
1367 yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
1368 yyx->yyrule);
1369 else
1370 YYFPRINTF (stderr, "%*s%s -> <Rule %d, tokens %d .. %d>\n",
1371 yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
1372 yyx->yyrule, yys->yyposn+1, yyx->yystate->yyposn);
1373 for (yyi = 1; yyi <= yynrhs; yyi += 1)
1374 {
1375 if (yystates[yyi]->yyresolved)
1376 {
1377 if (yystates[yyi-1]->yyposn+1 > yystates[yyi]->yyposn)
1378 YYFPRINTF (stderr, "%*s%s <empty>\n", yyindent+2, "",
1379 yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]));
1380 else
1381 YYFPRINTF (stderr, "%*s%s <tokens %d .. %d>\n", yyindent+2, "",
1382 yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]),
1383 yystates[yyi-1]->yyposn+1, yystates[yyi]->yyposn);
1384 }
1385 else
1386 yyreportTree (yystates[yyi]->yysemantics.yyfirstVal, yyindent+2);
1387 }
1388 }
1389 #endif
1390
1391 static void
1392 yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1,
1393 yyGLRStack* yystack]b4_pure_formals[)
1394 {
1395 /* `Unused' warnings. */
1396 (void) yyx0;
1397 (void) yyx1;
1398
1399 #if YYDEBUG
1400 YYFPRINTF (stderr, "Ambiguity detected.\n");
1401 YYFPRINTF (stderr, "Option 1,\n");
1402 yyreportTree (yyx0, 2);
1403 YYFPRINTF (stderr, "\nOption 2,\n");
1404 yyreportTree (yyx1, 2);
1405 YYFPRINTF (stderr, "\n");
1406 #endif
1407 yyFail (yystack][]b4_pure_args[, "ambiguity detected");
1408 }
1409
1410
1411 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1412 * actions, and return the result. */
1413 static YYRESULTTAG
1414 yyresolveValue (yySemanticOption* yyoptionList, yyGLRStack* yystack,
1415 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
1416 {
1417 yySemanticOption* yybest;
1418 yySemanticOption* yyp;
1419 int yymerge;
1420
1421 yybest = yyoptionList;
1422 yymerge = 0;
1423 for (yyp = yyoptionList->yynext; yyp != NULL; yyp = yyp->yynext)
1424 {
1425 if (yyidenticalOptions (yybest, yyp))
1426 yymergeOptionSets (yybest, yyp);
1427 else
1428 switch (yypreference (yybest, yyp))
1429 {
1430 case 0:
1431 yyreportAmbiguity (yybest, yyp, yystack]b4_pure_args[);
1432 break;
1433 case 1:
1434 yymerge = 1;
1435 break;
1436 case 2:
1437 break;
1438 case 3:
1439 yybest = yyp;
1440 yymerge = 0;
1441 break;
1442 }
1443 }
1444
1445 if (yymerge)
1446 {
1447 int yyprec = yydprec[yybest->yyrule];
1448 YYCHK (yyresolveAction (yybest, yystack, yyvalp, yylocp]b4_user_args[));
1449 for (yyp = yybest->yynext; yyp != NULL; yyp = yyp->yynext)
1450 {
1451 if (yyprec == yydprec[yyp->yyrule])
1452 {
1453 YYSTYPE yyval1;
1454 YYLTYPE yydummy;
1455 YYCHK (yyresolveAction (yyp, yystack, &yyval1, &yydummy]b4_user_args[));
1456 *yyvalp = yyuserMerge (yymerger[yyp->yyrule], yyvalp, &yyval1);
1457 }
1458 }
1459 return yyok;
1460 }
1461 else
1462 return yyresolveAction (yybest, yystack, yyvalp, yylocp]b4_user_args[);
1463 }
1464
1465 static YYRESULTTAG
1466 yyresolveStack (yyGLRStack* yystack]b4_user_formals[)
1467 {
1468 if (yystack->yysplitPoint != NULL)
1469 {
1470 yyGLRState* yys;
1471 int yyn;
1472
1473 for (yyn = 0, yys = yystack->yytops.yystates[0];
1474 yys != yystack->yysplitPoint;
1475 yys = yys->yypred, yyn += 1)
1476 continue;
1477 YYCHK (yyresolveStates (yystack->yytops.yystates[0], yyn, yystack
1478 ]b4_user_args[));
1479 }
1480 return yyok;
1481 }
1482
1483 static void
1484 yycompressStack (yyGLRStack* yystack)
1485 {
1486 yyGLRState* yyp, *yyq, *yyr;
1487
1488 if (yystack->yytops.yysize != 1 || yystack->yysplitPoint == NULL)
1489 return;
1490
1491 for (yyp = yystack->yytops.yystates[0], yyq = yyp->yypred, yyr = NULL;
1492 yyp != yystack->yysplitPoint;
1493 yyr = yyp, yyp = yyq, yyq = yyp->yypred)
1494 yyp->yypred = yyr;
1495
1496 yystack->yyspaceLeft += yystack->yynextFree - yystack->yyitems;
1497 yystack->yynextFree = ((yyGLRStackItem*) yystack->yysplitPoint) + 1;
1498 yystack->yyspaceLeft -= yystack->yynextFree - yystack->yyitems;
1499 yystack->yysplitPoint = NULL;
1500 yystack->yylastDeleted = NULL;
1501
1502 while (yyr != NULL)
1503 {
1504 yystack->yynextFree->yystate = *yyr;
1505 yyr = yyr->yypred;
1506 yystack->yynextFree->yystate.yypred = & yystack->yynextFree[-1].yystate;
1507 yystack->yytops.yystates[0] = &yystack->yynextFree->yystate;
1508 yystack->yynextFree += 1;
1509 yystack->yyspaceLeft -= 1;
1510 }
1511 }
1512
1513 static YYRESULTTAG
1514 yyprocessOneStack (yyGLRStack* yystack, int yyk,
1515 size_t yyposn, YYSTYPE* yylvalp, YYLTYPE* yyllocp
1516 ]b4_user_formals[)
1517 {
1518 int yyaction;
1519 const short* yyconflicts;
1520 yyRuleNum yyrule;
1521 yySymbol* const yytokenp = yystack->yytokenp;
1522
1523 while (yystack->yytops.yystates[yyk] != NULL)
1524 {
1525 yyStateNum yystate = yystack->yytops.yystates[yyk]->yylrState;
1526 YYDPRINTF ((stderr, "Stack %d Entering state %d\n", yyk, yystate));
1527
1528 if (yystate == YYFINAL)
1529 abort ();
1530 if (yyisDefaultedState (yystate))
1531 {
1532 yyrule = yydefaultAction (yystate);
1533 if (yyrule == 0)
1534 {
1535 YYDPRINTF ((stderr, "Stack %d dies.\n", yyk));
1536 yymarkStackDeleted (yystack, yyk);
1537 return yyok;
1538 }
1539 YYCHK (yyglrReduce (yystack, yyk, yyrule, yyfalse]b4_lpure_args[));
1540 }
1541 else
1542 {
1543 if (*yytokenp == YYEMPTY)
1544 {
1545 YYDPRINTF ((stderr, "Reading a token: "));
1546 yychar = YYLEX;
1547 *yytokenp = YYTRANSLATE (yychar);
1548 YYDSYMPRINTF ("Next token is", *yytokenp, yylvalp, yyllocp);
1549 }
1550 yygetLRActions (yystate, *yytokenp, &yyaction, &yyconflicts);
1551
1552 while (*yyconflicts != 0)
1553 {
1554 int yynewStack = yysplitStack (yystack, yyk);
1555 YYDPRINTF ((stderr, "Splitting off stack %d from %d.\n",
1556 yynewStack, yyk));
1557 YYCHK (yyglrReduce (yystack, yynewStack,
1558 *yyconflicts, yyfalse]b4_lpure_args[));
1559 YYCHK (yyprocessOneStack (yystack, yynewStack, yyposn,
1560 yylvalp, yyllocp]b4_user_args[));
1561 yyconflicts += 1;
1562 }
1563
1564 if (yyisShiftAction (yyaction))
1565 {
1566 YYDPRINTF ((stderr, "Shifting token %s on stack %d, ",
1567 yytokenName (*yytokenp), yyk));
1568 yyglrShift (yystack, yyk, yyaction, yyposn+1,
1569 *yylvalp, yyllocp]b4_user_args[);
1570 YYDPRINTF ((stderr, "which is now in state #%d\n",
1571 yystack->yytops.yystates[yyk]->yylrState));
1572 break;
1573 }
1574 else if (yyisErrorAction (yyaction))
1575 {
1576 YYDPRINTF ((stderr, "Stack %d dies.\n", yyk));
1577 yymarkStackDeleted (yystack, yyk);
1578 break;
1579 }
1580 else
1581 YYCHK (yyglrReduce (yystack, yyk, -yyaction, yyfalse]b4_lpure_args[));
1582 }
1583 }
1584 return yyok;
1585 }
1586
1587 static void
1588 yyreportSyntaxError (yyGLRStack* yystack,
1589 YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[)
1590 {
1591 /* `Unused' warnings. */
1592 (void) yylvalp;
1593 (void) yyllocp;
1594
1595 if (yystack->yyerrState == 0)
1596 {
1597 #if YYERROR_VERBOSE
1598 yySymbol* const yytokenp = yystack->yytokenp;
1599 int yyn;
1600 const char* yyprefix;
1601 yyn = yypact[yystack->yytops.yystates[0]->yylrState];
1602 if (YYPACT_NINF < yyn && yyn < YYLAST)
1603 {
1604 size_t yysize = 0;
1605 char* yymsg;
1606 int yyx;
1607
1608 /* Start YYX at -YYN if negative to avoid negative indexes in
1609 YYCHECK. */
1610 int yyxbase = yyn < 0 ? -yyn : 0;
1611
1612 /* Stay within bounds of both yycheck and yytname. */
1613 int yychecklim = YYLAST - yyn;
1614 int yynsyms = sizeof (yytname) / sizeof (yytname[0]);
1615 int yyxlim = yychecklim < yynsyms ? yychecklim : yynsyms;
1616 int yycount = 0;
1617
1618 yyprefix = ", expecting ";
1619 for (yyx = yyxbase; yyx < yyxlim && yycount < 5; yyx += 1)
1620 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1621 {
1622 yysize += strlen (yytokenName (yyx)) + strlen (yyprefix);
1623 yycount += 1;
1624 if (yycount == 5)
1625 {
1626 yysize = 0;
1627 break;
1628 }
1629 yyprefix = " or ";
1630 }
1631 yysize += (sizeof ("syntax error, unexpected ")
1632 + strlen (yytokenName (*yytokenp)));
1633 yymsg = (char*) malloc (yysize);
1634 if (yymsg != 0)
1635 {
1636 char* yyp = yymsg;
1637 sprintf (yyp, "syntax error, unexpected %s",
1638 yytokenName (*yytokenp));
1639 yyp += strlen (yyp);
1640 if (yycount < 5)
1641 {
1642 yyprefix = ", expecting ";
1643 for (yyx = yyxbase; yyx < yyxlim; yyx += 1)
1644 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1645 {
1646 sprintf (yyp, "%s%s", yyprefix, yytokenName (yyx));
1647 yyp += strlen (yyp);
1648 yyprefix = " or ";
1649 }
1650 }
1651 yyerror (]b4_lyyerror_args[yymsg);
1652 free (yymsg);
1653 }
1654 else
1655 yyerror (]b4_lyyerror_args["syntax error; also virtual memory exhausted");
1656 }
1657 else
1658 #endif /* YYERROR_VERBOSE */
1659 yyerror (]b4_lyyerror_args["syntax error");
1660 yynerrs += 1;
1661 }
1662 }
1663
1664 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1665 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1666 value, and location of the lookahead. */
1667 static void
1668 yyrecoverSyntaxError (yyGLRStack* yystack,
1669 YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[)
1670 {
1671 yySymbol* const yytokenp = yystack->yytokenp;
1672 size_t yyk;
1673 int yyj;
1674
1675 if (yystack->yyerrState == 0)
1676 yystack->yyerrState = 3;
1677 else if (yystack->yyerrState == 3)
1678 /* We just shifted the error token and (perhaps) took some
1679 reductions. Skip tokens until we can proceed. */
1680 while (yytrue)
1681 {
1682 if (*yytokenp == YYEOF)
1683 {
1684 /* Now pop stack until we find a state that shifts the
1685 error token. */
1686 while (yystack->yytops.yystates[0] != NULL)
1687 {
1688 yyGLRState *yys = yystack->yytops.yystates[0];
1689 YYDSYMPRINTF ("Error: popping",
1690 yystos[yys->yylrState],
1691 &yys->yysemantics.yysval, &yys->yyloc);
1692 yydestruct (yystos[yys->yylrState],
1693 &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[);
1694 yystack->yytops.yystates[0] = yys->yypred;
1695 yystack->yynextFree -= 1;
1696 yystack->yyspaceLeft += 1;
1697 }
1698 yyFail (yystack][]b4_lpure_args[, NULL);
1699 }
1700 if (*yytokenp != YYEMPTY)
1701 {
1702 YYDSYMPRINTF ("Error: discarding", *yytokenp, yylvalp, yyllocp);
1703 yydestruct (*yytokenp, yylvalp]b4_location_if([, yyllocp])[);
1704 }
1705 YYDPRINTF ((stderr, "Reading a token: "));
1706 yychar = YYLEX;
1707 *yytokenp = YYTRANSLATE (yychar);
1708 YYDSYMPRINTF ("Next token is", *yytokenp, yylvalp, yyllocp);
1709 yyj = yypact[yystack->yytops.yystates[0]->yylrState];
1710 if (yyis_pact_ninf (yyj))
1711 /* Something's not right; we shouldn't be here. */
1712 yyFail (yystack][]b4_lpure_args[, NULL);
1713 yyj += *yytokenp;
1714 if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != *yytokenp)
1715 {
1716 if (yydefact[yystack->yytops.yystates[0]->yylrState] != 0)
1717 return;
1718 }
1719 else if (yytable[yyj] != 0 && ! yyis_table_ninf (yytable[yyj]))
1720 return;
1721 }
1722
1723 /* Reduce to one stack. */
1724 for (yyk = 0; yyk < yystack->yytops.yysize; yyk += 1)
1725 if (yystack->yytops.yystates[yyk] != NULL)
1726 break;
1727 if (yyk >= yystack->yytops.yysize)
1728 yyFail (yystack][]b4_lpure_args[, NULL);
1729 for (yyk += 1; yyk < yystack->yytops.yysize; yyk += 1)
1730 yymarkStackDeleted (yystack, yyk);
1731 yyremoveDeletes (yystack);
1732 yycompressStack (yystack);
1733
1734 /* Now pop stack until we find a state that shifts the error token. */
1735 while (yystack->yytops.yystates[0] != NULL)
1736 {
1737 yyGLRState *yys = yystack->yytops.yystates[0];
1738 yyj = yypact[yys->yylrState];
1739 if (! yyis_pact_ninf (yyj))
1740 {
1741 yyj += YYTERROR;
1742 if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR
1743 && yyisShiftAction (yytable[yyj]))
1744 {
1745 YYDPRINTF ((stderr, "Shifting error token, "));
1746 yyglrShift (yystack, 0, yytable[yyj],
1747 yys->yyposn, *yylvalp, yyllocp]b4_user_args[);
1748 break;
1749 }
1750 }
1751 YYDSYMPRINTF ("Error: popping",
1752 yystos[yys->yylrState],
1753 &yys->yysemantics.yysval, &yys->yyloc);
1754 yydestruct (yystos[yys->yylrState],
1755 &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[);
1756 yystack->yytops.yystates[0] = yys->yypred;
1757 yystack->yynextFree -= 1;
1758 yystack->yyspaceLeft += 1;
1759 }
1760 if (yystack->yytops.yystates[0] == NULL)
1761 yyFail (yystack][]b4_lpure_args[, NULL);
1762 }
1763
1764 #define YYCHK1(YYE) \
1765 do { \
1766 switch (YYE) { \
1767 default: \
1768 break; \
1769 case yyabort: \
1770 yystack.yyerrflag = 1; \
1771 goto yyDone; \
1772 case yyaccept: \
1773 yystack.yyerrflag = 0; \
1774 goto yyDone; \
1775 case yyerr: \
1776 goto yyuser_error; \
1777 } \
1778 } while (0)
1779
1780
1781 /*----------.
1782 | yyparse. |
1783 `----------*/
1784
1785 ]b4_c_ansi_function_def([yyparse], [int], b4_parse_param)[
1786 {
1787 yySymbol yytoken;
1788 yyGLRStack yystack;
1789 size_t yyposn;
1790 ]b4_pure_if(
1791 [
1792 YYSTYPE yylval;
1793 YYLTYPE yylloc;
1794 #undef yychar
1795 #define yychar (yystack.yyrawchar)
1796 ])[
1797
1798 YYSTYPE* const yylvalp = &yylval;
1799 YYLTYPE* const yyllocp = &yylloc;
1800
1801 yyinitGLRStack (&yystack, YYINITDEPTH);
1802 yystack.yytokenp = &yytoken;
1803
1804 YYDPRINTF ((stderr, "Starting parse\n"));
1805
1806 if (setjmp (yystack.yyexception_buffer) != 0)
1807 goto yyDone;
1808
1809 yyglrShift (&yystack, 0, 0, 0, yyval_default, &yyloc_default]b4_user_args[);
1810 yytoken = YYEMPTY;
1811 yyposn = 0;
1812
1813 while (yytrue)
1814 {
1815 /* For efficiency, we have two loops, the first of which is
1816 specialized to deterministic operation (single stack, no
1817 potential ambiguity). */
1818 /* Standard mode */
1819 while (yytrue)
1820 {
1821 yyRuleNum yyrule;
1822 int yyaction;
1823 const short* yyconflicts;
1824
1825 yyStateNum yystate = yystack.yytops.yystates[0]->yylrState;
1826 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1827 if (yystate == YYFINAL)
1828 goto yyDone;
1829 if (yyisDefaultedState (yystate))
1830 {
1831 yyrule = yydefaultAction (yystate);
1832 if (yyrule == 0)
1833 {
1834 yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
1835 goto yyuser_error;
1836 }
1837 YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue]b4_lpure_args[));
1838 }
1839 else
1840 {
1841 if (yytoken == YYEMPTY)
1842 {
1843 YYDPRINTF ((stderr, "Reading a token: "));
1844 yychar = YYLEX;
1845 yytoken = YYTRANSLATE (yychar);
1846 YYDSYMPRINTF ("Next token is", yytoken, yylvalp, yyllocp);
1847 }
1848 yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
1849 if (*yyconflicts != 0)
1850 break;
1851 if (yyisShiftAction (yyaction))
1852 {
1853 YYDPRINTF ((stderr, "Shifting token %s, ",
1854 yytokenName (yytoken)));
1855 if (yytoken != YYEOF)
1856 yytoken = YYEMPTY;
1857 yyposn += 1;
1858 yyglrShift (&yystack, 0, yyaction, yyposn,
1859 yylval, yyllocp]b4_user_args[);
1860 if (0 < yystack.yyerrState)
1861 yystack.yyerrState -= 1;
1862 }
1863 else if (yyisErrorAction (yyaction))
1864 {
1865 yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
1866 goto yyuser_error;
1867 }
1868 else
1869 YYCHK1 (yyglrReduce (&yystack, 0, -yyaction, yytrue]b4_lpure_args[));
1870 }
1871 }
1872
1873 while (yytrue)
1874 {
1875 int yys;
1876 int yyn = yystack.yytops.yysize;
1877 for (yys = 0; yys < yyn; yys += 1)
1878 YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn,
1879 yylvalp, yyllocp]b4_user_args[));
1880 yytoken = YYEMPTY;
1881 yyposn += 1;
1882 yyremoveDeletes (&yystack);
1883 if (yystack.yytops.yysize == 0)
1884 {
1885 yyundeleteLastStack (&yystack);
1886 if (yystack.yytops.yysize == 0)
1887 yyFail (&yystack][]b4_lpure_args[, "syntax error");
1888 YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
1889 YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
1890 yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
1891 goto yyuser_error;
1892 }
1893 else if (yystack.yytops.yysize == 1)
1894 {
1895 YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
1896 YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
1897 yycompressStack (&yystack);
1898 break;
1899 }
1900 }
1901 continue;
1902 yyuser_error:
1903 yyrecoverSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[);
1904 yyposn = yystack.yytops.yystates[0]->yyposn;
1905 }
1906 yyDone:
1907 ;
1908
1909 yyfreeGLRStack (&yystack);
1910 return yystack.yyerrflag;
1911 }
1912
1913 /* DEBUGGING ONLY */
1914 static void yypstack (yyGLRStack* yystack, int yyk) ATTRIBUTE_UNUSED;
1915 static void yypdumpstack (yyGLRStack* yystack) ATTRIBUTE_UNUSED;
1916
1917 static void
1918 yy_yypstack (yyGLRState* yys)
1919 {
1920 if (yys->yypred)
1921 {
1922 yy_yypstack (yys->yypred);
1923 fprintf (stderr, " -> ");
1924 }
1925 fprintf (stderr, "%d@@%lu", yys->yylrState, (unsigned long) yys->yyposn);
1926 }
1927
1928 static void
1929 yypstates (yyGLRState* yyst)
1930 {
1931 if (yyst == NULL)
1932 fprintf (stderr, "<null>");
1933 else
1934 yy_yypstack (yyst);
1935 fprintf (stderr, "\n");
1936 }
1937
1938 static void
1939 yypstack (yyGLRStack* yystack, int yyk)
1940 {
1941 yypstates (yystack->yytops.yystates[yyk]);
1942 }
1943
1944 #define YYINDEX(YYX) \
1945 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
1946
1947
1948 static void
1949 yypdumpstack (yyGLRStack* yystack)
1950 {
1951 yyGLRStackItem* yyp;
1952 size_t yyi;
1953 for (yyp = yystack->yyitems; yyp < yystack->yynextFree; yyp += 1)
1954 {
1955 fprintf (stderr, "%3lu. ", (unsigned long) (yyp - yystack->yyitems));
1956 if (*(yybool *) yyp)
1957 {
1958 fprintf (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
1959 yyp->yystate.yyresolved, yyp->yystate.yylrState,
1960 (unsigned long) yyp->yystate.yyposn,
1961 (long) YYINDEX (yyp->yystate.yypred));
1962 if (! yyp->yystate.yyresolved)
1963 fprintf (stderr, ", firstVal: %ld",
1964 (long) YYINDEX (yyp->yystate.yysemantics.yyfirstVal));
1965 }
1966 else
1967 {
1968 fprintf (stderr, "Option. rule: %d, state: %ld, next: %ld",
1969 yyp->yyoption.yyrule,
1970 (long) YYINDEX (yyp->yyoption.yystate),
1971 (long) YYINDEX (yyp->yyoption.yynext));
1972 }
1973 fprintf (stderr, "\n");
1974 }
1975 fprintf (stderr, "Tops:");
1976 for (yyi = 0; yyi < yystack->yytops.yysize; yyi += 1)
1977 fprintf (stderr, "%lu: %ld; ", (unsigned long) yyi,
1978 (long) YYINDEX (yystack->yytops.yystates[yyi]));
1979 fprintf (stderr, "\n");
1980 }
1981 ]
1982
1983 b4_epilogue
1984 m4_if(b4_defines_flag, 0, [],
1985 [@output @output_header_name@
1986 b4_copyright([Skeleton parser for GLR parsing with Bison], [2002, 2003])
1987
1988 b4_token_defines(b4_tokens)
1989
1990 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
1991 m4_ifdef([b4_stype],
1992 [b4_syncline([b4_stype_line], [b4_filename])
1993 typedef union m4_bregexp(b4_stype, [^{], [YYSTYPE ])b4_stype YYSTYPE;
1994 /* Line __line__ of glr.c. */
1995 b4_syncline([@oline@], [@ofile@])],
1996 [typedef int YYSTYPE;])
1997 # define YYSTYPE_IS_DECLARED 1
1998 # define YYSTYPE_IS_TRIVIAL 1
1999 #endif
2000
2001 b4_pure_if([],
2002 [extern YYSTYPE b4_prefix[]lval;])
2003
2004 b4_location_if(
2005 [#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
2006 typedef struct YYLTYPE
2007 {
2008 int first_line;
2009 int first_column;
2010 int last_line;
2011 int last_column;
2012 } YYLTYPE;
2013 # define YYLTYPE_IS_DECLARED 1
2014 # define YYLTYPE_IS_TRIVIAL 1
2015 #endif
2016
2017 m4_if(b4_pure, [0],
2018 [extern YYLTYPE b4_prefix[]lloc;])
2019 ])
2020 ])