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