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