1 m4_divert(-1) -*- C
-*-
3 # GLR skeleton for Bison
4 # Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
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.
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.
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
22 ## ---------------- ##
24 ## ---------------- ##
27 m4_define_default([b4_stack_depth_max
], [10000])
28 m4_define_default([b4_stack_depth_init
], [200])
32 ## ------------------------ ##
33 ## Pure/impure interfaces. ##
34 ## ------------------------ ##
39 # The possible parse-params formal arguments preceded by a comma.
41 # This is not shared with yacc.c in c.m4 because GLR relies on ISO C
42 # formal argument declarations.
43 m4_define([b4_user_formals
],
44 [m4_ifset([b4_parse_param
], [, b4_c_ansi_formals(b4_parse_param
)])])
49 # Accumule in b4_lex_param all the yylex arguments.
50 # Yes, this is quite ugly...
51 m4_define([b4_lex_param
],
52 m4_dquote(b4_pure_if([[[[YYSTYPE
*]], [[yylvalp]]][]dnl
53 b4_location_if([, [[YYLTYPE
*], [yyllocp
]]])])dnl
54 m4_ifdef([b4_lex_param
], [, ]b4_lex_param
)))
59 # Optional effective arguments passed to yyerror: user args plus yylloc, and
61 m4_define([b4_yyerror_args
],
62 [b4_pure_if([b4_location_if([yylocp
, ])])dnl
63 m4_ifset([b4_parse_param
], [b4_c_args(b4_parse_param
), ])])
68 # Same as above, but on the look-ahead, hence yyllocp instead of yylocp.
69 m4_define([b4_lyyerror_args
],
70 [b4_pure_if([b4_location_if([yyllocp
, ])])dnl
71 m4_ifset([b4_parse_param
], [b4_c_args(b4_parse_param
), ])])
76 # Same as b4_yyerror_args, but with a leading comma.
77 m4_define([b4_pure_args
],
78 [b4_pure_if([b4_location_if([, yylocp
])])[]b4_user_args
])
83 # Same as above, but on the look-ahead, hence yyllocp instead of yylocp.
84 m4_define([b4_lpure_args
],
85 [b4_pure_if([b4_location_if([, yyllocp
])])[]b4_user_args
])
90 # Arguments passed to yyerror: user formals plus yyllocp.
91 m4_define([b4_pure_formals
],
92 [b4_pure_if([b4_location_if([, YYLTYPE
*yylocp
])])[]b4_user_formals
])
97 # Same as above, but on the look-ahead, hence yyllocp instead of yylocp.
98 m4_define([b4_lpure_formals
],
99 [b4_pure_if([b4_location_if([YYLTYPE
*yyllocp
])])[]b4_user_formals
])
102 ## ----------------- ##
103 ## Semantic Values. ##
104 ## ----------------- ##
107 # b4_lhs_value([TYPE])
108 # --------------------
109 # Expansion of $<TYPE>$.
110 m4_define([b4_lhs_value
],
111 [((*yyvalp
)[]m4_ifval([$
1], [.$
1]))])
114 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
115 # --------------------------------------
116 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
118 m4_define([b4_rhs_value
],
119 [(((yyGLRStackItem
const *)yyvsp
)@
{YYFILL (($
2) - ($
1))@
}.yystate
.yysemantics
.yysval
[]m4_ifval([$
3], [.$
3]))])
130 m4_define([b4_lhs_location
],
134 # b4_rhs_location(RULE-LENGTH, NUM)
135 # ---------------------------------
136 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
138 m4_define([b4_rhs_location
],
139 [(((yyGLRStackItem
const *)yyvsp
)@
{YYFILL (($
2) - ($
1))@
}.yystate
.yyloc
)])
147 # We do want M4 expansion after # for CPP macros.
150 @output @output_parser_name@
151 b4_copyright([Skeleton parser
for GLR parsing with Bison
],
152 [2002, 2003, 2004, 2005])
154 /* This is the parser code for GLR (Generalized LR) parser. */
158 m4_if(b4_prefix
[], [yy
], [],
159 [/* Substitute the variable and function names. */
160 #define yyparse b4_prefix[]parse
161 #define yylex b4_prefix[]lex
162 #define yyerror b4_prefix[]error
163 #define yylval b4_prefix[]lval
164 #define yychar b4_prefix[]char
165 #define yydebug b4_prefix[]debug
166 #define yynerrs b4_prefix[]nerrs
167 #define yylloc b4_prefix[]lloc])
169 dnl
# b4_shared_declarations
170 dnl
# ----------------------
171 dnl
# Declaration that might either go into the header (if --defines)
172 dnl
# or open coded in the parser body.
173 m4_define([b4_shared_declarations
],
174 [b4_token_enums(b4_tokens
)[
176 /* Copy the first part of user declarations. */
179 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
180 ]m4_ifdef([b4_stype
],
181 [b4_syncline([b4_stype_line
], [b4_file_name
])
182 typedef union m4_bregexp(b4_stype
, [^{], [YYSTYPE
])b4_stype YYSTYPE
;
183 /* Line __line__ of glr.c. */
184 b4_syncline([@oline@
], [@ofile@
])],
185 [typedef int YYSTYPE
;])[
186 # define YYSTYPE_IS_DECLARED 1
187 # define YYSTYPE_IS_TRIVIAL 1
190 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
191 typedef struct YYLTYPE
202 # define YYLTYPE_IS_DECLARED 1
203 # define YYLTYPE_IS_TRIVIAL 1
207 m4_if(b4_defines_flag
, 0,
208 [b4_shared_declarations
],
209 [#include @output_header_name@])[
211 /* Enabling traces. */
213 # define YYDEBUG ]b4_debug[
216 /* Enabling verbose error messages. */
217 #ifdef YYERROR_VERBOSE
218 # undef YYERROR_VERBOSE
219 # define YYERROR_VERBOSE 1
221 # define YYERROR_VERBOSE ]b4_error_verbose[
224 /* Enabling the token table. */
225 #ifndef YYTOKEN_TABLE
226 # define YYTOKEN_TABLE ]b4_token_table[
229 /* Default (constant) value used for initialization for null
230 right-hand sides. Unlike the standard yacc.c template,
231 here we set the default value of $$ to a zeroed-out value.
232 Since the default value is undefined, this behavior is
233 technically correct. */
234 static YYSTYPE yyval_default
;
236 /* Copy the second part of user declarations. */
239 ]/* Line __line__ of glr.c. */
240 b4_syncline([@oline@
], [@ofile@
])
250 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
251 # define YY_(msgid) dgettext ("bison-runtime", msgid)
255 # define YY_(msgid) msgid
259 /* Suppress unused-variable warnings by "using" E. */
261 # define YYUSE(e) ((void) (e))
263 # define YYUSE(e) /* empty */
266 /* Identity function, used to suppress warnings about constant conditions. */
270 ]b4_c_function_def([YYID
], [static int], [[int i
], [i
]])[
280 # define YYMALLOC malloc
283 # define YYREALLOC realloc
286 #define YYSIZEMAX ((size_t) -1)
291 typedef unsigned char yybool
;
298 # define YYJMP_BUF jmp_buf
299 # define YYSETJMP(env) setjmp (env)
300 # define YYLONGJMP(env, val) longjmp (env, val)
307 #ifndef __attribute__
308 /* This feature is available in gcc versions 2.5 and later. */
309 # if (!defined (__GNUC__) || __GNUC__ < 2 \
310 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__)
311 # define __attribute__(Spec) /* empty */
315 ]b4_location_if([#define YYOPTIONAL_LOC(Name) Name],[
317 # define YYOPTIONAL_LOC(Name) /* empty */
319 # define YYOPTIONAL_LOC(Name) Name __attribute__ ((__unused__))
323 # define YYASSERT(condition) ((void) ((condition) || (abort (), 0)))
326 /* YYFINAL -- State number of the termination state. */
327 #define YYFINAL ]b4_final_state_number[
328 /* YYLAST -- Last index in YYTABLE. */
329 #define YYLAST ]b4_last[
331 /* YYNTOKENS -- Number of terminals. */
332 #define YYNTOKENS ]b4_tokens_number[
333 /* YYNNTS -- Number of nonterminals. */
334 #define YYNNTS ]b4_nterms_number[
335 /* YYNRULES -- Number of rules. */
336 #define YYNRULES ]b4_rules_number[
337 /* YYNRULES -- Number of states. */
338 #define YYNSTATES ]b4_states_number[
339 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
340 #define YYMAXRHS ]b4_r2_max[
341 /* YYMAXLEFT -- Maximum number of symbols to the left of a handle
342 accessed by $0, $-1, etc., in any rule. */
343 #define YYMAXLEFT ]b4_max_left_semantic_context[
345 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
346 #define YYUNDEFTOK ]b4_undef_token_number[
347 #define YYMAXUTOK ]b4_user_token_number_max[
349 #define YYTRANSLATE(YYX) \
350 ((YYX <= 0) ? YYEOF : \
351 (unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
353 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
354 static const ]b4_int_type_for([b4_translate
])[ yytranslate
[] =
360 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
362 static const ]b4_int_type_for([b4_prhs
])[ yyprhs
[] =
367 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
368 static const ]b4_int_type_for([b4_rhs
])[ yyrhs
[] =
373 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
374 static const ]b4_int_type_for([b4_rline
])[ yyrline
[] =
380 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
381 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
382 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
383 static const char *const yytname
[] =
389 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
390 static const ]b4_int_type_for([b4_r1
])[ yyr1
[] =
395 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
396 static const ]b4_int_type_for([b4_r2
])[ yyr2
[] =
401 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
402 static const ]b4_int_type_for([b4_dprec
])[ yydprec
[] =
407 /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
408 static const ]b4_int_type_for([b4_merger
])[ yymerger
[] =
413 /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
414 doesn't specify something else to do. Zero means the default is an
416 static const ]b4_int_type_for([b4_defact
])[ yydefact
[] =
421 /* YYPDEFGOTO[NTERM-NUM]. */
422 static const ]b4_int_type_for([b4_defgoto
])[ yydefgoto
[] =
427 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
429 #define YYPACT_NINF ]b4_pact_ninf[
430 static const ]b4_int_type_for([b4_pact
])[ yypact
[] =
435 /* YYPGOTO[NTERM-NUM]. */
436 static const ]b4_int_type_for([b4_pgoto
])[ yypgoto
[] =
441 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
442 positive, shift that token. If negative, reduce the rule which
443 number is the opposite. If zero, do what YYDEFACT says.
444 If YYTABLE_NINF, syntax error. */
445 #define YYTABLE_NINF ]b4_table_ninf[
446 static const ]b4_int_type_for([b4_table
])[ yytable
[] =
451 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
452 list of conflicting reductions corresponding to action entry for
453 state STATE-NUM in yytable. 0 means no conflicts. The list in
454 yyconfl is terminated by a rule number of 0. */
455 static const ]b4_int_type_for([b4_conflict_list_heads
])[ yyconflp
[] =
457 ]b4_conflict_list_heads
[
460 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
461 0, pointed into by YYCONFLP. */
462 ]dnl Do
not use b4_int_type_for here
, since there are places where
463 dnl pointers onto yyconfl are taken
, which type is
"short int *".
464 dnl We probably ought to introduce a type
for confl
.
465 [static const short int yyconfl
[] =
467 ]b4_conflicting_rules
[
470 static const ]b4_int_type_for([b4_check
])[ yycheck
[] =
475 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
476 symbol of state STATE-NUM. */
477 static const ]b4_int_type_for([b4_stos
])[ yystos
[] =
483 /* Prevent warning if -Wmissing-prototypes. */
484 ]b4_c_ansi_function_decl([yyparse
], [int], b4_parse_param
)[
486 /* Error token number */
489 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
490 If N is 0, then set CURRENT to the empty location which ends
491 the previous symbol: RHS[0] (always defined). */
494 #define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
495 #ifndef YYLLOC_DEFAULT
496 # define YYLLOC_DEFAULT(Current, Rhs, N) \
500 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
501 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
502 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
503 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
507 (Current).first_line = (Current).last_line = \
508 YYRHSLOC (Rhs, 0).last_line; \
509 (Current).first_column = (Current).last_column = \
510 YYRHSLOC (Rhs, 0).last_column; \
514 /* YY_LOCATION_PRINT -- Print the location on the stream.
515 This macro was not mandated originally: define only if we know
516 we won't break user code: when these are the locations we know. */
518 # define YY_LOCATION_PRINT(File, Loc) \
519 fprintf (File, "%d.%d-%d.%d", \
520 (Loc).first_line, (Loc).first_column, \
521 (Loc).last_line, (Loc).last_column)
524 #ifndef YYLLOC_DEFAULT
525 # define YYLLOC_DEFAULT(Current, Rhs, N) ((void) 0)
529 #ifndef YY_LOCATION_PRINT
530 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
534 /* YYLEX -- calling `yylex' with the right arguments. */
535 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
540 #define yynerrs (yystackp->yyerrcnt)
542 #define yychar (yystackp->yyrawchar)],
550 static const int YYEOF
= 0;
551 static const int YYEMPTY
= -2;
553 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
556 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
561 #if ! defined (YYFPRINTF)
562 # define YYFPRINTF fprintf
565 # define YYDPRINTF(Args) \
571 ]b4_yysymprint_generate([b4_c_ansi_function_def
])[
573 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
577 YYFPRINTF (stderr, "%s ", Title); \
578 yysymprint (stderr, \
579 Type, Value]b4_location_if([, Location])[]b4_user_args[); \
580 YYFPRINTF (stderr, "\n"); \
584 /* Nonzero means print parse trace. It is left uninitialized so that
585 multiple parsers can coexist. */
590 # define YYDPRINTF(Args)
591 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
593 #endif /* !YYDEBUG */
595 /* YYINITDEPTH -- initial size of the parser's stacks. */
597 # define YYINITDEPTH ]b4_stack_depth_init[
600 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
601 if the built-in stack extension method is used).
603 Do not make this value too large; the results are undefined if
604 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
605 evaluated with infinite-precision integer arithmetic. */
608 # define YYMAXDEPTH ]b4_stack_depth_max[
611 /* Minimum number of free items on the stack allowed after an
612 allocation. This is to allow allocation and initialization
613 to be completed by functions that call yyexpandGLRStack before the
614 stack is expanded, thus insuring that all necessary pointers get
615 properly redirected to new data. */
618 #ifndef YYSTACKEXPANDABLE
619 # if (! defined (__cplusplus) \
620 || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
621 && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))
622 # define YYSTACKEXPANDABLE 1
624 # define YYSTACKEXPANDABLE 0
628 #if YYSTACKEXPANDABLE
629 # define YY_RESERVE_GLRSTACK(Yystack) \
631 if (Yystack->yyspaceLeft < YYHEADROOM) \
632 yyexpandGLRStack (Yystack); \
635 # define YY_RESERVE_GLRSTACK(Yystack) \
637 if (Yystack->yyspaceLeft < YYHEADROOM) \
638 yyMemoryExhausted (Yystack); \
646 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
647 # define yystpcpy stpcpy
649 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
652 yystpcpy (char *yydest
, const char *yysrc
)
655 const char *yys
= yysrc
;
657 while ((*yyd
++ = *yys
++) != '\0')
666 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
667 quotes and backslashes, so that it's suitable for yyerror. The
668 heuristic is that double-quoting is unnecessary unless the string
669 contains an apostrophe, a comma, or backslash (other than
670 backslash-backslash). YYSTR is taken from yytname. If YYRES is
671 null, do not copy; instead, return the length of what the result
674 yytnamerr (char *yyres
, const char *yystr
)
679 char const *yyp
= yystr
;
686 goto do_not_strip_quotes
;
690 goto do_not_strip_quotes
;
703 do_not_strip_quotes
: ;
707 return strlen (yystr
);
709 return yystpcpy (yyres
, yystr
) - yyres
;
713 #endif /* !YYERROR_VERBOSE */
715 /** State numbers, as in LALR(1) machine */
716 typedef int yyStateNum
;
718 /** Rule numbers, as in LALR(1) machine */
719 typedef int yyRuleNum
;
721 /** Grammar symbol */
722 typedef short int yySymbol
;
724 /** Item references, as in LALR(1) machine */
725 typedef short int yyItemNum
;
727 typedef struct yyGLRState yyGLRState
;
728 typedef struct yyGLRStateSet yyGLRStateSet
;
729 typedef struct yySemanticOption yySemanticOption
;
730 typedef union yyGLRStackItem yyGLRStackItem
;
731 typedef struct yyGLRStack yyGLRStack
;
734 /** Type tag: always true. */
736 /** Type tag for yysemantics. If true, yysval applies, otherwise
737 * yyfirstVal applies. */
739 /** Number of corresponding LALR(1) machine state. */
740 yyStateNum yylrState
;
741 /** Preceding state in this stack */
743 /** Source position of the first token produced by my symbol */
746 /** First in a chain of alternative reductions producing the
747 * non-terminal corresponding to this state, threaded through
749 yySemanticOption
* yyfirstVal
;
750 /** Semantic value for this state. */
753 /** Source location for this state. */
757 struct yyGLRStateSet
{
758 yyGLRState
** yystates
;
759 size_t yysize
, yycapacity
;
762 struct yySemanticOption
{
763 /** Type tag: always false. */
765 /** Rule number for this reduction */
767 /** The last RHS state in the list of states to be reduced. */
769 /** Next sibling in chain of options. To facilitate merging,
770 * options are chained in decreasing order by address. */
771 yySemanticOption
* yynext
;
774 /** Type of the items in the GLR stack. The yyisState field
775 * indicates which item of the union is valid. */
776 union yyGLRStackItem
{
778 yySemanticOption yyoption
;
783 ]b4_location_if([[ /* To compute the location of the error token. */
784 yyGLRStackItem yyerror_range
[3];]])[
791 YYJMP_BUF yyexception_buffer
;
792 yyGLRStackItem
* yyitems
;
793 yyGLRStackItem
* yynextFree
;
795 yyGLRState
* yysplitPoint
;
796 yyGLRState
* yylastDeleted
;
797 yyGLRStateSet yytops
;
800 #if YYSTACKEXPANDABLE
801 static void yyexpandGLRStack (yyGLRStack
* yystackp
);
804 static void yyFail (yyGLRStack
* yystackp
]b4_pure_formals
[, const char* yymsg
)
805 __attribute__ ((__noreturn__
));
807 yyFail (yyGLRStack
* yystackp
]b4_pure_formals
[, const char* yymsg
)
810 yyerror (]b4_yyerror_args
[yymsg
);
811 YYLONGJMP (yystackp
->yyexception_buffer
, 1);
814 static void yyMemoryExhausted (yyGLRStack
* yystackp
)
815 __attribute__ ((__noreturn__
));
817 yyMemoryExhausted (yyGLRStack
* yystackp
)
819 YYLONGJMP (yystackp
->yyexception_buffer
, 2);
822 #if YYDEBUG || YYERROR_VERBOSE
823 /** A printable representation of TOKEN. */
824 static inline const char*
825 yytokenName (yySymbol yytoken
)
827 if (yytoken
== YYEMPTY
)
830 return yytname
[yytoken
];
834 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
835 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
836 * containing the pointer to the next state in the chain. */
837 static void yyfillin (yyGLRStackItem
*, int, int) __attribute__ ((__unused__
));
839 yyfillin (yyGLRStackItem
*yyvsp
, int yylow0
, int yylow1
)
843 s
= yyvsp
[yylow0
].yystate
.yypred
;
844 for (i
= yylow0
-1; i
>= yylow1
; i
-= 1)
846 YYASSERT (s
->yyresolved
);
847 yyvsp
[i
].yystate
.yyresolved
= yytrue
;
848 yyvsp
[i
].yystate
.yysemantics
.yysval
= s
->yysemantics
.yysval
;
849 yyvsp
[i
].yystate
.yyloc
= s
->yyloc
;
850 s
= yyvsp
[i
].yystate
.yypred
= s
->yypred
;
854 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
855 * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
856 * For convenience, always return YYLOW1. */
857 static inline int yyfill (yyGLRStackItem
*, int *, int, yybool
)
858 __attribute__ ((__unused__
));
860 yyfill (yyGLRStackItem
*yyvsp
, int *yylow
, int yylow1
, yybool yynormal
)
862 if (!yynormal
&& yylow1
< *yylow
)
864 yyfillin (yyvsp
, *yylow
, yylow1
);
870 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
871 * and top stack item YYVSP. YYLVALP points to place to put semantic
872 * value ($$), and yylocp points to place for location information
873 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
874 * yyerr for YYERROR, yyabort for YYABORT. */
875 /*ARGSUSED*/ static YYRESULTTAG
876 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
878 YYLTYPE
* YYOPTIONAL_LOC (yylocp
),
882 yybool yynormal
__attribute__ ((__unused__
)) =
883 (yystackp
->yysplitPoint
== NULL
);
885 ]b4_parse_param_use
[]dnl
887 # define yyerrok (yystackp->yyerrState = 0)
889 # define YYACCEPT return yyaccept
891 # define YYABORT return yyabort
893 # define YYERROR return yyerrok, yyerr
895 # define YYRECOVERING (yystackp->yyerrState != 0)
897 # define yyclearin (yychar = *(yystackp->yytokenp) = YYEMPTY)
899 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
901 # define YYBACKUP(Token, Value) \
902 return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")), \
907 *yyvalp
= yyval_default
;
909 *yyvalp
= yyvsp
[YYFILL (1-yyrhslen
)].yystate
.yysemantics
.yysval
;
910 YYLLOC_DEFAULT (*yylocp
, yyvsp
- yyrhslen
, yyrhslen
);
911 ]b4_location_if([[ yystackp
->yyerror_range
[1].yystate
.yyloc
= *yylocp
;
927 /* Line __line__ of glr.c. */
928 b4_syncline([@oline@
], [@ofile@
])
932 /*ARGSUSED*/ static void
933 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
945 /* Bison grammar-table manipulation. */
947 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
949 /** Number of symbols composing the right hand side of rule #RULE. */
951 yyrhsLength (yyRuleNum yyrule
)
957 yydestroyGLRState (char const *yymsg
, yyGLRState
*yys
]b4_user_formals
[)
960 yydestruct (yymsg
, yystos
[yys
->yylrState
],
961 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[]b4_user_args
[);
967 YYFPRINTF (stderr
, "%s unresolved ", yymsg
);
968 yysymprint (stderr
, yystos
[yys
->yylrState
],
969 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[]b4_user_args
[);
970 YYFPRINTF (stderr
, "\n");
974 if (yys
->yysemantics
.yyfirstVal
)
976 yySemanticOption
*yyoption
= yys
->yysemantics
.yyfirstVal
;
979 for (yyrh
= yyoption
->yystate
, yyn
= yyrhsLength (yyoption
->yyrule
);
981 yyrh
= yyrh
->yypred
, yyn
-= 1)
982 yydestroyGLRState (yymsg
, yyrh
]b4_user_args
[);
987 /** Left-hand-side symbol for rule #RULE. */
988 static inline yySymbol
989 yylhsNonterm (yyRuleNum yyrule
)
994 #define yyis_pact_ninf(yystate) \
995 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), [1],
997 [((yystate
) == YYPACT_NINF
)])[
999 /** True iff LR state STATE has only a default reduction (regardless
1001 static inline yybool
1002 yyisDefaultedState (yyStateNum yystate
)
1004 return yyis_pact_ninf (yypact
[yystate
]);
1007 /** The default reduction for STATE, assuming it has one. */
1008 static inline yyRuleNum
1009 yydefaultAction (yyStateNum yystate
)
1011 return yydefact
[yystate
];
1014 #define yyis_table_ninf(yytable_value) \
1015 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), [1],
1017 [((yytable_value
) == YYTABLE_NINF
)])[
1019 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
1021 * R < 0: Reduce on rule -R.
1023 * R > 0: Shift to state R.
1024 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
1025 * conflicting reductions.
1028 yygetLRActions (yyStateNum yystate
, int yytoken
,
1029 int* yyaction
, const short int** yyconflicts
)
1031 int yyindex
= yypact
[yystate
] + yytoken
;
1032 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
1034 *yyaction
= -yydefact
[yystate
];
1035 *yyconflicts
= yyconfl
;
1037 else if (! yyis_table_ninf (yytable
[yyindex
]))
1039 *yyaction
= yytable
[yyindex
];
1040 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
1045 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
1049 static inline yyStateNum
1050 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
1053 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
1054 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
1055 return yytable
[yyr
];
1057 return yydefgoto
[yylhs
- YYNTOKENS
];
1060 static inline yybool
1061 yyisShiftAction (int yyaction
)
1063 return 0 < yyaction
;
1066 static inline yybool
1067 yyisErrorAction (int yyaction
)
1069 return yyaction
== 0;
1074 /** Return a fresh GLRStackItem. Callers should call
1075 * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
1078 static inline yyGLRStackItem
*
1079 yynewGLRStackItem (yyGLRStack
* yystackp
, yybool yyisState
)
1081 yyGLRStackItem
* yynewItem
= yystackp
->yynextFree
;
1082 yystackp
->yyspaceLeft
-= 1;
1083 yystackp
->yynextFree
+= 1;
1084 yynewItem
->yystate
.yyisState
= yyisState
;
1089 yyaddDeferredAction (yyGLRStack
* yystackp
, yyGLRState
* yystate
,
1090 yyGLRState
* rhs
, yyRuleNum yyrule
)
1092 yySemanticOption
* yynewOption
=
1093 &yynewGLRStackItem (yystackp
, yyfalse
)->yyoption
;
1094 yynewOption
->yystate
= rhs
;
1095 yynewOption
->yyrule
= yyrule
;
1096 yynewOption
->yynext
= yystate
->yysemantics
.yyfirstVal
;
1097 yystate
->yysemantics
.yyfirstVal
= yynewOption
;
1099 YY_RESERVE_GLRSTACK (yystackp
);
1104 /** Initialize SET to a singleton set containing an empty stack. */
1106 yyinitStateSet (yyGLRStateSet
* yyset
)
1109 yyset
->yycapacity
= 16;
1110 yyset
->yystates
= (yyGLRState
**) YYMALLOC (16 * sizeof yyset
->yystates
[0]);
1111 if (! yyset
->yystates
)
1113 yyset
->yystates
[0] = NULL
;
1117 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
1119 YYFREE (yyset
->yystates
);
1122 /** Initialize STACK to a single empty stack, with total maximum
1123 * capacity for all stacks of SIZE. */
1125 yyinitGLRStack (yyGLRStack
* yystackp
, size_t yysize
)
1127 yystackp
->yyerrState
= 0;
1129 yystackp
->yyspaceLeft
= yysize
;
1131 (yyGLRStackItem
*) YYMALLOC (yysize
* sizeof yystackp
->yynextFree
[0]);
1132 if (!yystackp
->yyitems
)
1134 yystackp
->yynextFree
= yystackp
->yyitems
;
1135 yystackp
->yysplitPoint
= NULL
;
1136 yystackp
->yylastDeleted
= NULL
;
1137 return yyinitStateSet (&yystackp
->yytops
);
1141 #if YYSTACKEXPANDABLE
1142 # define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
1143 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
1145 /** If STACK is expandable, extend it. WARNING: Pointers into the
1146 stack from outside should be considered invalid after this call.
1147 We always expand when there are 1 or fewer items left AFTER an
1148 allocation, so that we can avoid having external pointers exist
1149 across an allocation. */
1151 yyexpandGLRStack (yyGLRStack
* yystackp
)
1153 yyGLRStackItem
* yynewItems
;
1154 yyGLRStackItem
* yyp0
, *yyp1
;
1155 size_t yysize
, yynewSize
;
1157 yysize
= yystackp
->yynextFree
- yystackp
->yyitems
;
1158 if (YYMAXDEPTH
<= yysize
)
1159 yyMemoryExhausted (yystackp
);
1160 yynewSize
= 2*yysize
;
1161 if (YYMAXDEPTH
< yynewSize
)
1162 yynewSize
= YYMAXDEPTH
;
1163 yynewItems
= (yyGLRStackItem
*) YYMALLOC (yynewSize
* sizeof yynewItems
[0]);
1165 yyMemoryExhausted (yystackp
);
1166 for (yyp0
= yystackp
->yyitems
, yyp1
= yynewItems
, yyn
= yysize
;
1168 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
1171 if (*(yybool
*) yyp0
)
1173 yyGLRState
* yys0
= &yyp0
->yystate
;
1174 yyGLRState
* yys1
= &yyp1
->yystate
;
1175 if (yys0
->yypred
!= NULL
)
1177 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
1178 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
1179 yys1
->yysemantics
.yyfirstVal
=
1180 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
1184 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
1185 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
1186 if (yyv0
->yystate
!= NULL
)
1187 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
1188 if (yyv0
->yynext
!= NULL
)
1189 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
1192 if (yystackp
->yysplitPoint
!= NULL
)
1193 yystackp
->yysplitPoint
= YYRELOC (yystackp
->yyitems
, yynewItems
,
1194 yystackp
->yysplitPoint
, yystate
);
1196 for (yyn
= 0; yyn
< yystackp
->yytops
.yysize
; yyn
+= 1)
1197 if (yystackp
->yytops
.yystates
[yyn
] != NULL
)
1198 yystackp
->yytops
.yystates
[yyn
] =
1199 YYRELOC (yystackp
->yyitems
, yynewItems
,
1200 yystackp
->yytops
.yystates
[yyn
], yystate
);
1201 YYFREE (yystackp
->yyitems
);
1202 yystackp
->yyitems
= yynewItems
;
1203 yystackp
->yynextFree
= yynewItems
+ yysize
;
1204 yystackp
->yyspaceLeft
= yynewSize
- yysize
;
1209 yyfreeGLRStack (yyGLRStack
* yystackp
)
1211 YYFREE (yystackp
->yyitems
);
1212 yyfreeStateSet (&yystackp
->yytops
);
1215 /** Assuming that S is a GLRState somewhere on STACK, update the
1216 * splitpoint of STACK, if needed, so that it is at least as deep as
1219 yyupdateSplit (yyGLRStack
* yystackp
, yyGLRState
* yys
)
1221 if (yystackp
->yysplitPoint
!= NULL
&& yystackp
->yysplitPoint
> yys
)
1222 yystackp
->yysplitPoint
= yys
;
1225 /** Invalidate stack #K in STACK. */
1227 yymarkStackDeleted (yyGLRStack
* yystackp
, size_t yyk
)
1229 if (yystackp
->yytops
.yystates
[yyk
] != NULL
)
1230 yystackp
->yylastDeleted
= yystackp
->yytops
.yystates
[yyk
];
1231 yystackp
->yytops
.yystates
[yyk
] = NULL
;
1234 /** Undelete the last stack that was marked as deleted. Can only be
1235 done once after a deletion, and only when all other stacks have
1238 yyundeleteLastStack (yyGLRStack
* yystackp
)
1240 if (yystackp
->yylastDeleted
== NULL
|| yystackp
->yytops
.yysize
!= 0)
1242 yystackp
->yytops
.yystates
[0] = yystackp
->yylastDeleted
;
1243 yystackp
->yytops
.yysize
= 1;
1244 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1245 yystackp
->yylastDeleted
= NULL
;
1249 yyremoveDeletes (yyGLRStack
* yystackp
)
1253 while (yyj
< yystackp
->yytops
.yysize
)
1255 if (yystackp
->yytops
.yystates
[yyi
] == NULL
)
1259 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1261 yystackp
->yytops
.yysize
-= 1;
1265 yystackp
->yytops
.yystates
[yyj
] = yystackp
->yytops
.yystates
[yyi
];
1268 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1269 (unsigned long int) yyi
, (unsigned long int) yyj
));
1277 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1278 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1280 yyglrShift (yyGLRStack
* yystackp
, size_t yyk
, yyStateNum yylrState
,
1282 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
)
1284 yyGLRState
* yynewState
= &yynewGLRStackItem (yystackp
, yytrue
)->yystate
;
1286 yynewState
->yylrState
= yylrState
;
1287 yynewState
->yyposn
= yyposn
;
1288 yynewState
->yyresolved
= yytrue
;
1289 yynewState
->yypred
= yystackp
->yytops
.yystates
[yyk
];
1290 yynewState
->yysemantics
.yysval
= *yyvalp
;
1291 yynewState
->yyloc
= *yylocp
;
1292 yystackp
->yytops
.yystates
[yyk
] = yynewState
;
1294 YY_RESERVE_GLRSTACK (yystackp
);
1297 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1298 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1299 * semantic value of YYRHS under the action for YYRULE. */
1301 yyglrShiftDefer (yyGLRStack
* yystackp
, size_t yyk
, yyStateNum yylrState
,
1302 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
)
1304 yyGLRState
* yynewState
= &yynewGLRStackItem (yystackp
, yytrue
)->yystate
;
1306 yynewState
->yylrState
= yylrState
;
1307 yynewState
->yyposn
= yyposn
;
1308 yynewState
->yyresolved
= yyfalse
;
1309 yynewState
->yypred
= yystackp
->yytops
.yystates
[yyk
];
1310 yynewState
->yysemantics
.yyfirstVal
= NULL
;
1311 yystackp
->yytops
.yystates
[yyk
] = yynewState
;
1313 /* Invokes YY_RESERVE_GLRSTACK. */
1314 yyaddDeferredAction (yystackp
, yynewState
, rhs
, yyrule
);
1317 /** Pop the symbols consumed by reduction #RULE from the top of stack
1318 * #K of STACK, and perform the appropriate semantic action on their
1319 * semantic values. Assumes that all ambiguities in semantic values
1320 * have been previously resolved. Set *VALP to the resulting value,
1321 * and *LOCP to the computed location (if any). Return value is as
1322 * for userAction. */
1323 static inline YYRESULTTAG
1324 yydoAction (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1325 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1327 int yynrhs
= yyrhsLength (yyrule
);
1329 if (yystackp
->yysplitPoint
== NULL
)
1331 /* Standard special case: single stack. */
1332 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystackp
->yytops
.yystates
[yyk
];
1333 YYASSERT (yyk
== 0);
1334 yystackp
->yynextFree
-= yynrhs
;
1335 yystackp
->yyspaceLeft
+= yynrhs
;
1336 yystackp
->yytops
.yystates
[0] = & yystackp
->yynextFree
[-1].yystate
;
1337 return yyuserAction (yyrule
, yynrhs
, rhs
,
1338 yyvalp
, yylocp
, yystackp
]b4_user_args
[);
1342 /* At present, doAction is never called in nondeterministic
1343 * mode, so this branch is never taken. It is here in
1344 * anticipation of a future feature that will allow immediate
1345 * evaluation of selected actions in nondeterministic mode. */
1348 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1349 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1350 = yystackp
->yytops
.yystates
[yyk
];]b4_location_if([[
1352 /* Set default location. */
1353 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
- 1].yystate
.yyloc
= yys
->yyloc
;]])[
1354 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1359 yyupdateSplit (yystackp
, yys
);
1360 yystackp
->yytops
.yystates
[yyk
] = yys
;
1361 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1362 yyvalp
, yylocp
, yystackp
]b4_user_args
[);
1367 # define YY_REDUCE_PRINT(Args)
1369 # define YY_REDUCE_PRINT(Args) \
1372 yy_reduce_print Args; \
1375 /*----------------------------------------------------------.
1376 | Report that the RULE is going to be reduced on stack #K. |
1377 `----------------------------------------------------------*/
1379 /*ARGSUSED*/ static inline void
1380 yy_reduce_print (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1381 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1383 int yynrhs
= yyrhsLength (yyrule
);
1384 yybool yynormal
__attribute__ ((__unused__
)) =
1385 (yystackp
->yysplitPoint
== NULL
);
1386 yyGLRStackItem
* yyvsp
= (yyGLRStackItem
*) yystackp
->yytops
.yystates
[yyk
];
1391 ]b4_parse_param_use
[]dnl
1392 [ YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu):\n",
1393 (unsigned long int) yyk
, yyrule
- 1,
1394 (unsigned long int) yyrline
[yyrule
]);
1395 /* The symbols being reduced. */
1396 for (yyi
= 0; yyi
< yynrhs
; yyi
++)
1398 fprintf (stderr
, " $%d = ", yyi
+ 1);
1399 yysymprint (stderr
, yyrhs
[yyprhs
[yyrule
] + yyi
],
1400 &]b4_rhs_value(yynrhs
, yyi
+ 1)[
1401 ]b4_location_if([, &]b4_rhs_location(yynrhs
, yyi
+ 1))[]dnl
1403 fprintf (stderr
, "\n");
1408 /** Pop items off stack #K of STACK according to grammar rule RULE,
1409 * and push back on the resulting nonterminal symbol. Perform the
1410 * semantic action associated with RULE and store its value with the
1411 * newly pushed state, if FORCEEVAL or if STACK is currently
1412 * unambiguous. Otherwise, store the deferred semantic action with
1413 * the new state. If the new state would have an identical input
1414 * position, LR state, and predecessor to an existing state on the stack,
1415 * it is identified with that existing state, eliminating stack #K from
1416 * the STACK. In this case, the (necessarily deferred) semantic value is
1417 * added to the options for the existing state's semantic value.
1419 static inline YYRESULTTAG
1420 yyglrReduce (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1421 yybool yyforceEval
]b4_user_formals
[)
1423 size_t yyposn
= yystackp
->yytops
.yystates
[yyk
]->yyposn
;
1425 if (yyforceEval
|| yystackp
->yysplitPoint
== NULL
)
1430 YY_REDUCE_PRINT ((yystackp
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1431 YYCHK (yydoAction (yystackp
, yyk
, yyrule
, &yysval
,
1432 &yyloc
]b4_user_args
[));
1433 YY_SYMBOL_PRINT ("-> $$ =", yyr1
[yyrule
], &yysval
, &yyloc
);
1434 yyglrShift (yystackp
, yyk
,
1435 yyLRgotoState (yystackp
->yytops
.yystates
[yyk
]->yylrState
,
1436 yylhsNonterm (yyrule
)),
1437 yyposn
, &yysval
, &yyloc
);
1443 yyGLRState
* yys
, *yys0
= yystackp
->yytops
.yystates
[yyk
];
1444 yyStateNum yynewLRState
;
1446 for (yys
= yystackp
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1452 yyupdateSplit (yystackp
, yys
);
1453 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1455 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
1456 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1457 for (yyi
= 0; yyi
< yystackp
->yytops
.yysize
; yyi
+= 1)
1458 if (yyi
!= yyk
&& yystackp
->yytops
.yystates
[yyi
] != NULL
)
1460 yyGLRState
* yyp
, *yysplit
= yystackp
->yysplitPoint
;
1461 yyp
= yystackp
->yytops
.yystates
[yyi
];
1462 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1464 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1466 yyaddDeferredAction (yystackp
, yyp
, yys0
, yyrule
);
1467 yymarkStackDeleted (yystackp
, yyk
);
1468 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1469 (unsigned long int) yyk
,
1470 (unsigned long int) yyi
));
1476 yystackp
->yytops
.yystates
[yyk
] = yys
;
1477 yyglrShiftDefer (yystackp
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
);
1483 yysplitStack (yyGLRStack
* yystackp
, size_t yyk
)
1485 if (yystackp
->yysplitPoint
== NULL
)
1487 YYASSERT (yyk
== 0);
1488 yystackp
->yysplitPoint
= yystackp
->yytops
.yystates
[yyk
];
1490 if (yystackp
->yytops
.yysize
>= yystackp
->yytops
.yycapacity
)
1492 yyGLRState
** yynewStates
;
1493 if (! ((yystackp
->yytops
.yycapacity
1494 <= (YYSIZEMAX
/ (2 * sizeof yynewStates
[0])))
1496 (yyGLRState
**) YYREALLOC (yystackp
->yytops
.yystates
,
1497 ((yystackp
->yytops
.yycapacity
*= 2)
1498 * sizeof yynewStates
[0])))))
1499 yyMemoryExhausted (yystackp
);
1500 yystackp
->yytops
.yystates
= yynewStates
;
1502 yystackp
->yytops
.yystates
[yystackp
->yytops
.yysize
]
1503 = yystackp
->yytops
.yystates
[yyk
];
1504 yystackp
->yytops
.yysize
+= 1;
1505 return yystackp
->yytops
.yysize
-1;
1508 /** True iff Y0 and Y1 represent identical options at the top level.
1509 * That is, they represent the same rule applied to RHS symbols
1510 * that produce the same terminal symbols. */
1512 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1514 if (yyy0
->yyrule
== yyy1
->yyrule
)
1516 yyGLRState
*yys0
, *yys1
;
1518 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1519 yyn
= yyrhsLength (yyy0
->yyrule
);
1521 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1522 if (yys0
->yyposn
!= yys1
->yyposn
)
1530 /** Assuming identicalOptions (Y0,Y1), destructively merge the
1531 * alternative semantic values for the RHS-symbols of Y1 and Y0. */
1533 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1535 yyGLRState
*yys0
, *yys1
;
1537 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1538 yyn
= yyrhsLength (yyy0
->yyrule
);
1540 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1544 else if (yys0
->yyresolved
)
1546 yys1
->yyresolved
= yytrue
;
1547 yys1
->yysemantics
.yysval
= yys0
->yysemantics
.yysval
;
1549 else if (yys1
->yyresolved
)
1551 yys0
->yyresolved
= yytrue
;
1552 yys0
->yysemantics
.yysval
= yys1
->yysemantics
.yysval
;
1556 yySemanticOption
** yyz0p
;
1557 yySemanticOption
* yyz1
;
1558 yyz0p
= &yys0
->yysemantics
.yyfirstVal
;
1559 yyz1
= yys1
->yysemantics
.yyfirstVal
;
1560 while (YYID (yytrue
))
1562 if (yyz1
== *yyz0p
|| yyz1
== NULL
)
1564 else if (*yyz0p
== NULL
)
1569 else if (*yyz0p
< yyz1
)
1571 yySemanticOption
* yyz
= *yyz0p
;
1573 yyz1
= yyz1
->yynext
;
1574 (*yyz0p
)->yynext
= yyz
;
1576 yyz0p
= &(*yyz0p
)->yynext
;
1578 yys1
->yysemantics
.yyfirstVal
= yys0
->yysemantics
.yyfirstVal
;
1583 /** Y0 and Y1 represent two possible actions to take in a given
1584 * parsing state; return 0 if no combination is possible,
1585 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1587 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1589 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1590 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1594 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1599 if (p0
== 0 || p1
== 0)
1608 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1609 yyGLRStack
* yystackp
, YYSTYPE
* yyvalp
,
1610 YYLTYPE
* yylocp
]b4_user_formals
[);
1613 yyresolveStates (yyGLRState
* yys
, int yyn
,
1614 yyGLRStack
* yystackp
]b4_user_formals
[)
1619 YYASSERT (yys
->yypred
);
1620 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystackp
]b4_user_args
[);
1623 if (! yys
->yyresolved
)
1625 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystackp
,
1626 &yys
->yysemantics
.yysval
, &yys
->yyloc
1630 yys
->yyresolved
= yytrue
;
1637 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystackp
,
1638 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1640 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1643 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1644 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystackp
]b4_user_args
[));
1645 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;]b4_location_if([[
1647 /* Set default location. */
1648 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
- 1].yystate
.yyloc
= yyopt
->yystate
->yyloc
;]])[
1649 return yyuserAction (yyopt
->yyrule
, yynrhs
,
1650 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1651 yyvalp
, yylocp
, yystackp
]b4_user_args
[);
1656 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1658 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1661 yyGLRState
* yystates
[YYMAXRHS
];
1662 yyGLRState yyleftmost_state
;
1664 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1665 yystates
[yyi
] = yys
;
1668 yyleftmost_state
.yyposn
= 0;
1669 yystates
[0] = &yyleftmost_state
;
1674 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1675 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1676 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1679 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1680 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1681 yyx
->yyrule
, (unsigned long int) (yys
->yyposn
+ 1),
1682 (unsigned long int) yyx
->yystate
->yyposn
);
1683 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1685 if (yystates
[yyi
]->yyresolved
)
1687 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1688 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1689 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1691 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1692 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1693 (unsigned long int) (yystates
[yyi
- 1]->yyposn
+ 1),
1694 (unsigned long int) yystates
[yyi
]->yyposn
);
1697 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1702 static void yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1703 yyGLRStack
* yystackp
]b4_pure_formals
[)
1704 __attribute__ ((__noreturn__
));
1706 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1707 yyGLRStack
* yystackp
]b4_pure_formals
[)
1713 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1714 YYFPRINTF (stderr
, "Option 1,\n");
1715 yyreportTree (yyx0
, 2);
1716 YYFPRINTF (stderr
, "\nOption 2,\n");
1717 yyreportTree (yyx1
, 2);
1718 YYFPRINTF (stderr
, "\n");
1720 yyFail (yystackp
][]b4_pure_args
[, YY_("syntax is ambiguous"));
1724 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1725 * actions, and return the result. */
1727 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystackp
,
1728 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1730 yySemanticOption
* yybest
;
1731 yySemanticOption
** yypp
;
1734 yybest
= yyoptionList
;
1736 for (yypp
= &yyoptionList
->yynext
; *yypp
!= NULL
; )
1738 yySemanticOption
* yyp
= *yypp
;
1740 if (yyidenticalOptions (yybest
, yyp
))
1742 yymergeOptionSets (yybest
, yyp
);
1743 *yypp
= yyp
->yynext
;
1747 switch (yypreference (yybest
, yyp
))
1750 yyreportAmbiguity (yybest
, yyp
, yystackp
]b4_pure_args
[);
1762 /* This cannot happen so it is not worth a YYASSERT (yyfalse),
1763 but some compilers complain if the default case is
1767 yypp
= &yyp
->yynext
;
1773 yySemanticOption
* yyp
;
1774 int yyprec
= yydprec
[yybest
->yyrule
];
1775 YYCHK (yyresolveAction (yybest
, yystackp
, yyvalp
, yylocp
]b4_user_args
[));
1776 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1778 if (yyprec
== yydprec
[yyp
->yyrule
])
1782 YYCHK (yyresolveAction (yyp
, yystackp
, &yyval1
,
1783 &yydummy
]b4_user_args
[));
1784 yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1790 return yyresolveAction (yybest
, yystackp
, yyvalp
, yylocp
]b4_user_args
[);
1794 yyresolveStack (yyGLRStack
* yystackp
]b4_user_formals
[)
1796 if (yystackp
->yysplitPoint
!= NULL
)
1801 for (yyn
= 0, yys
= yystackp
->yytops
.yystates
[0];
1802 yys
!= yystackp
->yysplitPoint
;
1803 yys
= yys
->yypred
, yyn
+= 1)
1805 YYCHK (yyresolveStates (yystackp
->yytops
.yystates
[0], yyn
, yystackp
1812 yycompressStack (yyGLRStack
* yystackp
)
1814 yyGLRState
* yyp
, *yyq
, *yyr
;
1816 if (yystackp
->yytops
.yysize
!= 1 || yystackp
->yysplitPoint
== NULL
)
1819 for (yyp
= yystackp
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1820 yyp
!= yystackp
->yysplitPoint
;
1821 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1824 yystackp
->yyspaceLeft
+= yystackp
->yynextFree
- yystackp
->yyitems
;
1825 yystackp
->yynextFree
= ((yyGLRStackItem
*) yystackp
->yysplitPoint
) + 1;
1826 yystackp
->yyspaceLeft
-= yystackp
->yynextFree
- yystackp
->yyitems
;
1827 yystackp
->yysplitPoint
= NULL
;
1828 yystackp
->yylastDeleted
= NULL
;
1832 yystackp
->yynextFree
->yystate
= *yyr
;
1834 yystackp
->yynextFree
->yystate
.yypred
= &yystackp
->yynextFree
[-1].yystate
;
1835 yystackp
->yytops
.yystates
[0] = &yystackp
->yynextFree
->yystate
;
1836 yystackp
->yynextFree
+= 1;
1837 yystackp
->yyspaceLeft
-= 1;
1842 yyprocessOneStack (yyGLRStack
* yystackp
, size_t yyk
,
1843 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1847 const short int* yyconflicts
;
1849 yySymbol
* const yytokenp
= yystackp
->yytokenp
;
1851 while (yystackp
->yytops
.yystates
[yyk
] != NULL
)
1853 yyStateNum yystate
= yystackp
->yytops
.yystates
[yyk
]->yylrState
;
1854 YYDPRINTF ((stderr
, "Stack %lu Entering state %d\n",
1855 (unsigned long int) yyk
, yystate
));
1857 YYASSERT (yystate
!= YYFINAL
);
1859 if (yyisDefaultedState (yystate
))
1861 yyrule
= yydefaultAction (yystate
);
1864 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
1865 (unsigned long int) yyk
));
1866 yymarkStackDeleted (yystackp
, yyk
);
1869 YYCHK (yyglrReduce (yystackp
, yyk
, yyrule
, yyfalse
]b4_user_args
[));
1873 if (*yytokenp
== YYEMPTY
)
1875 YYDPRINTF ((stderr
, "Reading a token: "));
1877 *yytokenp
= YYTRANSLATE (yychar
);
1878 YY_SYMBOL_PRINT ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1880 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1882 while (*yyconflicts
!= 0)
1884 size_t yynewStack
= yysplitStack (yystackp
, yyk
);
1885 YYDPRINTF ((stderr
, "Splitting off stack %lu from %lu.\n",
1886 (unsigned long int) yynewStack
,
1887 (unsigned long int) yyk
));
1888 YYCHK (yyglrReduce (yystackp
, yynewStack
,
1889 *yyconflicts
, yyfalse
]b4_user_args
[));
1890 YYCHK (yyprocessOneStack (yystackp
, yynewStack
, yyposn
,
1891 yylvalp
, yyllocp
]b4_pure_args
[));
1895 if (yyisShiftAction (yyaction
))
1897 else if (yyisErrorAction (yyaction
))
1899 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
1900 (unsigned long int) yyk
));
1901 yymarkStackDeleted (yystackp
, yyk
);
1905 YYCHK (yyglrReduce (yystackp
, yyk
, -yyaction
, yyfalse
]b4_user_args
[));
1911 /*ARGSUSED*/ static void
1912 yyreportSyntaxError (yyGLRStack
* yystackp
,
1913 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1918 if (yystackp
->yyerrState
== 0)
1921 yySymbol
* const yytokenp
= yystackp
->yytokenp
;
1923 yyn
= yypact
[yystackp
->yytops
.yystates
[0]->yylrState
];
1924 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1926 size_t yysize0
= yytnamerr (NULL
, yytokenName (*yytokenp
));
1927 size_t yysize
= yysize0
;
1929 yybool yysize_overflow
= yyfalse
;
1931 enum { YYERROR_VERBOSE_ARGS_MAXIMUM
= 5 };
1932 char const *yyarg
[YYERROR_VERBOSE_ARGS_MAXIMUM
];
1936 static char const yyunexpected
[] = "syntax error, unexpected %s";
1937 static char const yyexpecting
[] = ", expecting %s";
1938 static char const yyor
[] = " or %s";
1939 char yyformat
[sizeof yyunexpected
1940 + sizeof yyexpecting
- 1
1941 + ((YYERROR_VERBOSE_ARGS_MAXIMUM
- 2)
1942 * (sizeof yyor
- 1))];
1943 char const *yyprefix
= yyexpecting
;
1945 /* Start YYX at -YYN if negative to avoid negative indexes in
1947 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
1949 /* Stay within bounds of both yycheck and yytname. */
1950 int yychecklim
= YYLAST
- yyn
;
1951 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
1954 yyarg
[0] = yytokenName (*yytokenp
);
1955 yyfmt
= yystpcpy (yyformat
, yyunexpected
);
1957 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1958 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1960 if (yycount
== YYERROR_VERBOSE_ARGS_MAXIMUM
)
1964 yyformat
[sizeof yyunexpected
- 1] = '\0';
1967 yyarg
[yycount
++] = yytokenName (yyx
);
1968 yysize1
= yysize
+ yytnamerr (NULL
, yytokenName (yyx
));
1969 yysize_overflow
|= yysize1
< yysize
;
1971 yyfmt
= yystpcpy (yyfmt
, yyprefix
);
1975 yyf
= YY_(yyformat
);
1976 yysize1
= yysize
+ strlen (yyf
);
1977 yysize_overflow
|= yysize1
< yysize
;
1980 if (!yysize_overflow
)
1981 yymsg
= (char *) YYMALLOC (yysize
);
1987 while ((*yyp
= *yyf
))
1989 if (*yyp
== '%' && yyf
[1] == 's' && yyi
< yycount
)
1991 yyp
+= yytnamerr (yyp
, yyarg
[yyi
++]);
2000 yyerror (]b4_lyyerror_args
[yymsg
);
2005 yyerror (]b4_lyyerror_args
[YY_("syntax error"));
2006 yyMemoryExhausted (yystackp
);
2010 #endif /* YYERROR_VERBOSE */
2011 yyerror (]b4_lyyerror_args
[YY_("syntax error"));
2016 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
2017 YYLVALP, and YYLLOCP point to the syntactic category, semantic
2018 value, and location of the look-ahead. */
2019 /*ARGSUSED*/ static void
2020 yyrecoverSyntaxError (yyGLRStack
* yystackp
,
2022 YYLTYPE
* YYOPTIONAL_LOC (yyllocp
)
2025 yySymbol
* const yytokenp
= yystackp
->yytokenp
;
2029 if (yystackp
->yyerrState
== 3)
2030 /* We just shifted the error token and (perhaps) took some
2031 reductions. Skip tokens until we can proceed. */
2032 while (YYID (yytrue
))
2034 if (*yytokenp
== YYEOF
)
2035 yyFail (yystackp
][]b4_lpure_args
[, NULL
);
2036 if (*yytokenp
!= YYEMPTY
)
2038 /* We throw away the lookahead, but the error range
2039 of the shifted error token must take it into account. */
2040 yyGLRState
*yys
= yystackp
->yytops
.yystates
[0];
2041 yyGLRStackItem yyerror_range
[3];
2042 yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;
2043 yyerror_range
[2].yystate
.yyloc
= *yyllocp
;
2044 YYLLOC_DEFAULT (yys
->yyloc
, yyerror_range
, 2);]])[
2045 yydestruct ("Error: discarding",
2046 *yytokenp
, yylvalp
]b4_location_if([, yyllocp
])[]b4_user_args
[);
2048 YYDPRINTF ((stderr
, "Reading a token: "));
2050 *yytokenp
= YYTRANSLATE (yychar
);
2051 YY_SYMBOL_PRINT ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
2052 yyj
= yypact
[yystackp
->yytops
.yystates
[0]->yylrState
];
2053 if (yyis_pact_ninf (yyj
))
2056 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
2058 if (yydefact
[yystackp
->yytops
.yystates
[0]->yylrState
] != 0)
2061 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
2065 /* Reduce to one stack. */
2066 for (yyk
= 0; yyk
< yystackp
->yytops
.yysize
; yyk
+= 1)
2067 if (yystackp
->yytops
.yystates
[yyk
] != NULL
)
2069 if (yyk
>= yystackp
->yytops
.yysize
)
2070 yyFail (yystackp
][]b4_lpure_args
[, NULL
);
2071 for (yyk
+= 1; yyk
< yystackp
->yytops
.yysize
; yyk
+= 1)
2072 yymarkStackDeleted (yystackp
, yyk
);
2073 yyremoveDeletes (yystackp
);
2074 yycompressStack (yystackp
);
2076 /* Now pop stack until we find a state that shifts the error token. */
2077 yystackp
->yyerrState
= 3;
2078 while (yystackp
->yytops
.yystates
[0] != NULL
)
2080 yyGLRState
*yys
= yystackp
->yytops
.yystates
[0];
2081 yyj
= yypact
[yys
->yylrState
];
2082 if (! yyis_pact_ninf (yyj
))
2085 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
2086 && yyisShiftAction (yytable
[yyj
]))
2088 /* Shift the error token having adjusted its location. */
2089 YYLTYPE yyerrloc
;]b4_location_if([[
2090 yystackp
->yyerror_range
[2].yystate
.yyloc
= *yyllocp
;
2091 YYLLOC_DEFAULT (yyerrloc
, yystackp
->yyerror_range
, 2);]])[
2092 YY_SYMBOL_PRINT ("Shifting", yystos
[yytable
[yyj
]],
2093 yylvalp
, &yyerrloc
);
2094 yyglrShift (yystackp
, 0, yytable
[yyj
],
2095 yys
->yyposn
, yylvalp
, &yyerrloc
);
2096 yys
= yystackp
->yytops
.yystates
[0];
2100 ]b4_location_if([[ yystackp
->yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]])[
2101 yydestroyGLRState ("Error: popping", yys
]b4_user_args
[);
2102 yystackp
->yytops
.yystates
[0] = yys
->yypred
;
2103 yystackp
->yynextFree
-= 1;
2104 yystackp
->yyspaceLeft
+= 1;
2106 if (yystackp
->yytops
.yystates
[0] == NULL
)
2107 yyFail (yystackp
][]b4_lpure_args
[, NULL
);
2110 #define YYCHK1(YYE) \
2120 goto yyuser_error; \
2131 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
2142 #define yychar (yystack.yyrawchar)
2145 YYSTYPE
* const yylvalp
= &yylval
;
2146 YYLTYPE
* const yyllocp
= &yylloc
;
2148 YYDPRINTF ((stderr
, "Starting parse\n"));
2151 yylval
= yyval_default
;
2153 #if YYLTYPE_IS_TRIVIAL
2154 yylloc
.first_line
= yylloc
.last_line
= 1;
2155 yylloc
.first_column
= yylloc
.last_column
= 0;
2158 m4_ifdef([b4_initial_action
], [
2159 m4_pushdef([b4_at_dollar
], [yylloc
])dnl
2160 m4_pushdef([b4_dollar_dollar
], [yylval
])dnl
2161 /* User initialization code. */
2163 m4_popdef([b4_dollar_dollar
])dnl
2164 m4_popdef([b4_at_dollar
])dnl
2165 /* Line __line__ of glr.c. */
2166 b4_syncline([@oline@
], [@ofile@
])])dnl
2168 if (! yyinitGLRStack (&yystack
, YYINITDEPTH
))
2169 goto yyexhaustedlab
;
2170 switch (YYSETJMP (yystack
.yyexception_buffer
))
2173 case 1: goto yyabortlab
;
2174 case 2: goto yyexhaustedlab
;
2175 default: goto yybuglab
;
2177 yystack
.yytokenp
= &yytoken
;
2178 yyglrShift (&yystack
, 0, 0, 0, &yylval
, &yylloc
);
2181 while (YYID (yytrue
))
2183 /* For efficiency, we have two loops, the first of which is
2184 specialized to deterministic operation (single stack, no
2185 potential ambiguity). */
2187 while (YYID (yytrue
))
2191 const short int* yyconflicts
;
2193 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
2194 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
2195 if (yystate
== YYFINAL
)
2197 if (yyisDefaultedState (yystate
))
2199 yyrule
= yydefaultAction (yystate
);
2202 ]b4_location_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= *yyllocp
;]])[
2203 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
2206 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_user_args
[));
2210 if (yytoken
== YYEMPTY
)
2212 YYDPRINTF ((stderr
, "Reading a token: "));
2214 yytoken
= YYTRANSLATE (yychar
);
2215 YY_SYMBOL_PRINT ("Next token is", yytoken
, yylvalp
, yyllocp
);
2217 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
2218 if (*yyconflicts
!= 0)
2220 if (yyisShiftAction (yyaction
))
2222 YY_SYMBOL_PRINT ("Shifting", yytoken
, yylvalp
, yyllocp
);
2223 if (yytoken
!= YYEOF
)
2226 yyglrShift (&yystack
, 0, yyaction
, yyposn
, yylvalp
, yyllocp
);
2227 if (0 < yystack
.yyerrState
)
2228 yystack
.yyerrState
-= 1;
2230 else if (yyisErrorAction (yyaction
))
2232 ]b4_location_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= *yyllocp
;]])[
2233 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
2237 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_user_args
[));
2241 while (YYID (yytrue
))
2243 yySymbol yytoken_to_shift
;
2245 size_t yyn
= yystack
.yytops
.yysize
;
2247 /* yyprocessOneStack returns one of three things:
2249 - An error flag. If the caller is yyprocessOneStack, it
2250 immediately returns as well. When the caller is finally
2251 yyparse, it jumps to an error label via YYCHK1.
2253 - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
2254 (&yystack, yys), which sets the top state of yys to NULL. Thus,
2255 yyparse's following invocation of yyremoveDeletes will remove
2258 - yyok, when ready to shift a token.
2260 Except in the first case, yyparse will invoke yyremoveDeletes and
2261 then shift the next token onto all remaining stacks. This
2262 synchronization of the shift (that is, after all preceding
2263 reductions on all stacks) helps prevents double destructor calls
2264 on yylval in the event of memory exhaustion. */
2266 for (yys
= 0; yys
< yyn
; yys
+= 1)
2267 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
2268 yylvalp
, yyllocp
]b4_lpure_args
[));
2269 yyremoveDeletes (&yystack
);
2270 yyn
= yystack
.yytops
.yysize
;
2272 /* If any yyglrShift call fails, it will fail after shifting. Thus,
2273 a copy of yylval will already be on stack 0 in the event of a
2274 failure in the following loop. Thus, yytoken is set to YYEMPTY
2275 before the loop to make sure the user destructor for yylval isn't
2277 yytoken_to_shift
= yytoken
;
2280 for (yys
= 0; yys
< yyn
; yys
+= 1)
2283 const short int* yyconflicts
;
2284 yyStateNum yystate
= yystack
.yytops
.yystates
[yys
]->yylrState
;
2285 yygetLRActions (yystate
, yytoken_to_shift
, &yyaction
,
2287 /* Note that yyconflicts were handled by yyprocessOneStack. */
2288 YYDPRINTF ((stderr
, "On stack %lu, ", (unsigned long int) yys
));
2289 YY_SYMBOL_PRINT ("shifting", yytoken_to_shift
, yylvalp
, yyllocp
);
2290 yyglrShift (&yystack
, yys
, yyaction
, yyposn
,
2292 YYDPRINTF ((stderr
, "Stack %lu now in state #%d\n",
2293 (unsigned long int) yys
,
2294 yystack
.yytops
.yystates
[yys
]->yylrState
));
2296 if (yystack
.yytops
.yysize
== 0)
2298 yyundeleteLastStack (&yystack
);
2299 if (yystack
.yytops
.yysize
== 0)
2300 yyFail (&yystack
][]b4_lpure_args
[, YY_("syntax error"));
2301 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
2302 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
2303 ]b4_location_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= *yyllocp
;]])[
2304 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
2307 else if (yystack
.yytops
.yysize
== 1)
2309 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
2310 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
2311 yycompressStack (&yystack
);
2317 yyrecoverSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
2318 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
2334 yyerror (]b4_lyyerror_args
[YY_("memory exhausted"));
2339 if (yytoken
!= YYEOF
&& yytoken
!= YYEMPTY
)
2340 yydestruct ("Cleanup: discarding lookahead",
2341 yytoken
, yylvalp
]b4_location_if([, yyllocp
])[]b4_user_args
[);
2343 /* If the stack is well-formed, pop the stack until it is empty,
2344 destroying its entries as we go. But free the stack regardless
2345 of whether it is well-formed. */
2346 if (yystack
.yyitems
)
2348 yyGLRState
** yystates
= yystack
.yytops
.yystates
;
2351 size_t yysize
= yystack
.yytops
.yysize
;
2353 for (yyk
= 0; yyk
< yysize
; yyk
+= 1)
2356 while (yystates
[yyk
])
2358 yyGLRState
*yys
= yystates
[yyk
];
2359 ]b4_location_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]]
2360 )[ yydestroyGLRState ("Cleanup: popping", yys
]b4_user_args
[);
2361 yystates
[yyk
] = yys
->yypred
;
2362 yystack
.yynextFree
-= 1;
2363 yystack
.yyspaceLeft
+= 1;
2368 yyfreeGLRStack (&yystack
);
2374 /* DEBUGGING ONLY */
2376 static void yypstack (yyGLRStack
* yystackp
, size_t yyk
)
2377 __attribute__ ((__unused__
));
2378 static void yypdumpstack (yyGLRStack
* yystackp
) __attribute__ ((__unused__
));
2381 yy_yypstack (yyGLRState
* yys
)
2385 yy_yypstack (yys
->yypred
);
2386 fprintf (stderr
, " -> ");
2388 fprintf (stderr
, "%d@@%lu", yys
->yylrState
, (unsigned long int) yys
->yyposn
);
2392 yypstates (yyGLRState
* yyst
)
2395 fprintf (stderr
, "<null>");
2398 fprintf (stderr
, "\n");
2402 yypstack (yyGLRStack
* yystackp
, size_t yyk
)
2404 yypstates (yystackp
->yytops
.yystates
[yyk
]);
2407 #define YYINDEX(YYX) \
2408 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
2412 yypdumpstack (yyGLRStack
* yystackp
)
2414 yyGLRStackItem
* yyp
;
2416 for (yyp
= yystackp
->yyitems
; yyp
< yystackp
->yynextFree
; yyp
+= 1)
2418 fprintf (stderr
, "%3lu. ", (unsigned long int) (yyp
- yystackp
->yyitems
));
2419 if (*(yybool
*) yyp
)
2421 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
2422 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
2423 (unsigned long int) yyp
->yystate
.yyposn
,
2424 (long int) YYINDEX (yyp
->yystate
.yypred
));
2425 if (! yyp
->yystate
.yyresolved
)
2426 fprintf (stderr
, ", firstVal: %ld",
2427 (long int) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
2431 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
2432 yyp
->yyoption
.yyrule
,
2433 (long int) YYINDEX (yyp
->yyoption
.yystate
),
2434 (long int) YYINDEX (yyp
->yyoption
.yynext
));
2436 fprintf (stderr
, "\n");
2438 fprintf (stderr
, "Tops:");
2439 for (yyi
= 0; yyi
< yystackp
->yytops
.yysize
; yyi
+= 1)
2440 fprintf (stderr
, "%lu: %ld; ", (unsigned long int) yyi
,
2441 (long int) YYINDEX (yystackp
->yytops
.yystates
[yyi
]));
2442 fprintf (stderr
, "\n");
2448 m4_if(b4_defines_flag
, 0, [],
2449 [@output @output_header_name@
2450 b4_copyright([Skeleton parser
for GLR parsing with Bison
],
2451 [2002, 2003, 2004, 2005])[
2453 /* As a special exception, when this parser skeleton is copied by
2454 Bison into a Bison output file, you may use that output file
2455 without restriction. This special exception was added by the Free
2456 Software Foundation for C GLR parsers in version 2.2 of Bison. */
2458 /* C GLR parser skeleton written by Paul Hilfinger. */
2461 b4_shared_declarations
2463 extern YYSTYPE b4_prefix
[]lval
;
2465 b4_location_if([b4_pure_if([],
2466 [extern YYLTYPE b4_prefix
[]lloc
;])