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