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