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