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