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