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