3 # GLR skeleton for Bison
5 # Copyright (C) 2002-2015 Free Software Foundation, Inc.
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 # If we are loaded by glr.cc, do not override c++.m4 definitions by
23 m4_if(b4_skeleton
, ["glr.c"],
24 [m4_include(b4_pkgdatadir
/[c
.m4
])])
26 ## ---------------- ##
28 ## ---------------- ##
31 m4_define_default([b4_stack_depth_max
], [10000])
32 m4_define_default([b4_stack_depth_init
], [200])
36 ## ------------------------ ##
37 ## Pure/impure interfaces. ##
38 ## ------------------------ ##
40 b4_define_flag_if([pure
])
41 # If glr.cc is including this file and thus has already set b4_pure_flag,
42 # do not change the value of b4_pure_flag, and do not record a use of api.pure.
43 m4_ifndef([b4_pure_flag
],
44 [b4_percent_define_default([[api
.pure
]], [[false]])
45 m4_define([b4_pure_flag
],
46 [b4_percent_define_flag_if([[api
.pure
]], [[1]], [[0]])])])
50 # The possible parse-params formal arguments preceded by a comma.
52 # This is not shared with yacc.c in c.m4 because GLR relies on ISO C
53 # formal argument declarations.
54 m4_define([b4_user_formals
],
55 [m4_ifset([b4_parse_param
], [, b4_formals(b4_parse_param
)])])
60 # Optional effective arguments passed to yyerror: user args plus yylloc, and
62 m4_define([b4_yyerror_args
],
63 [b4_pure_if([b4_locations_if([yylocp
, ])])dnl
64 m4_ifset([b4_parse_param
], [b4_args(b4_parse_param
), ])])
69 # Same as above, but on the lookahead, hence &yylloc instead of yylocp.
70 m4_define([b4_lyyerror_args
],
71 [b4_pure_if([b4_locations_if([&yylloc
, ])])dnl
72 m4_ifset([b4_parse_param
], [b4_args(b4_parse_param
), ])])
77 # Same as b4_yyerror_args, but with a leading comma.
78 m4_define([b4_pure_args
],
79 [b4_pure_if([b4_locations_if([, yylocp
])])[]b4_user_args
])
84 # Same as above, but on the lookahead, hence &yylloc instead of yylocp.
85 m4_define([b4_lpure_args
],
86 [b4_pure_if([b4_locations_if([, &yylloc
])])[]b4_user_args
])
92 # Arguments passed to yyerror: user formals plus yylocp with leading comma.
93 m4_define([b4_pure_formals
],
94 [b4_pure_if([b4_locations_if([, YYLTYPE
*yylocp
])])[]b4_user_formals
])
97 # b4_locuser_formals(LOC = yylocp)
98 # --------------------------------
99 m4_define([b4_locuser_formals
],
100 [b4_locations_if([, YYLTYPE
*m4_default([$
1], [yylocp
])])[]b4_user_formals
])
103 # b4_locuser_args(LOC = yylocp)
104 # -----------------------------
105 m4_define([b4_locuser_args
],
106 [b4_locations_if([, m4_default([$
1], [yylocp
])])[]b4_user_args
])
110 ## ----------------- ##
111 ## Semantic Values. ##
112 ## ----------------- ##
115 # b4_lhs_value([TYPE])
116 # --------------------
117 # Expansion of $<TYPE>$.
118 m4_define([b4_lhs_value
],
119 [b4_symbol_value([(*yyvalp
)], [$
1])])
122 # b4_rhs_data(RULE-LENGTH, NUM)
123 # -----------------------------
124 # Expand to the semantic stack place that contains value and location
125 # of symbol number NUM in a rule of length RULE-LENGTH.
126 m4_define([b4_rhs_data
],
127 [((yyGLRStackItem
const *)yyvsp
)@
{YYFILL (b4_subtract([$
2], [$
1]))@
}.yystate
])
130 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
131 # --------------------------------------
132 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
134 m4_define([b4_rhs_value
],
135 [b4_symbol_value([b4_rhs_data([$
1], [$
2]).yysemantics
.yysval
], [$
3])])
146 m4_define([b4_lhs_location
],
150 # b4_rhs_location(RULE-LENGTH, NUM)
151 # ---------------------------------
152 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
154 m4_define([b4_rhs_location
],
155 [(b4_rhs_data([$
1], [$
2]).yyloc
)])
162 # b4_shared_declarations
163 # ----------------------
164 # Declaration that might either go into the header (if --defines)
165 # or open coded in the parser body. glr.cc has its own definition.
166 m4_if(b4_skeleton
, ["glr.c"],
167 [m4_define([b4_shared_declarations
],
169 ]b4_percent_code_get([[requires]])[
171 ]b4_declare_yylstype
[
172 ]b4_function_declare(b4_prefix
[parse
], [int], b4_parse_param
)[
173 ]b4_percent_code_get([[provides]])[]dnl
181 # Unfortunately the order of generation between the header and the
182 # implementation file matters (for glr.c) because of the current
183 # implementation of api.value.type=union. In that case we still use a
184 # union for YYSTYPE, but we generate the contents of this union when
185 # setting up YYSTYPE. This is needed for other aspects, such as
186 # defining yy_symbol_value_print, since we need to now the name of the
187 # members of this union.
189 # To avoid this issue, just generate the header before the
190 # implementation file. But we should also make them more independant.
192 # ----------------- #
194 # ----------------- #
196 # glr.cc produces its own header.
197 m4_if(b4_skeleton
, ["glr.c"],
199 [b4_output_begin([b4_spec_defines_file
])
200 b4_copyright([Skeleton interface
for Bison GLR parsers in C
],
203 ]b4_cpp_guard_open([b4_spec_defines_file
])[
204 ]b4_shared_declarations
[
205 ]b4_cpp_guard_close([b4_spec_defines_file
])[
210 # ------------------------- #
211 # The implementation file. #
212 # ------------------------- #
214 b4_output_begin([b4_parser_file_name
])
215 b4_copyright([Skeleton implementation
for Bison GLR parsers in C
],
218 /* C GLR parser skeleton written by Paul Hilfinger. */
222 b4_percent_code_get([[top]])[
223 ]m4_if(b4_api_prefix
, [yy
], [],
224 [[/* Substitute the type names. */
225 #define YYSTYPE ]b4_api_PREFIX[STYPE]b4_locations_if([[
226 #define YYLTYPE ]b4_api_PREFIX[LTYPE]])])[
227 ]m4_if(b4_prefix
, [yy
], [],
228 [[/* Substitute the variable and function names. */
229 #define yyparse ]b4_prefix[parse
230 #define yylex ]b4_prefix[lex
231 #define yyerror ]b4_prefix[error
232 #define yydebug ]b4_prefix[debug
234 #define yylval ]b4_prefix[lval
235 #define yychar ]b4_prefix[char
236 #define yynerrs ]b4_prefix[nerrs]b4_locations_if([[
237 #define yylloc ]b4_prefix[lloc]])]))[
239 /* First part of user declarations. */
240 ]b4_user_pre_prologue
[
244 ]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
245 [b4_shared_declarations
])[
247 /* Enabling verbose error messages. */
248 #ifdef YYERROR_VERBOSE
249 # undef YYERROR_VERBOSE
250 # define YYERROR_VERBOSE 1
252 # define YYERROR_VERBOSE ]b4_error_verbose_if([1], [0])[
255 /* Default (constant) value used for initialization for null
256 right-hand sides. Unlike the standard yacc.c template, here we set
257 the default value of $$ to a zeroed-out value. Since the default
258 value is undefined, this behavior is technically correct. */
259 static YYSTYPE yyval_default
;]b4_locations_if([[
260 static YYLTYPE yyloc_default
][]b4_yyloc_default
;])[
262 /* Copy the second part of user declarations. */
263 ]b4_user_post_prologue
264 b4_percent_code_get
[]dnl
271 # if defined YYENABLE_NLS && YYENABLE_NLS
273 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
274 # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
278 # define YY_(Msgid) Msgid
286 # define YYMALLOC malloc
289 # define YYREALLOC realloc
292 #define YYSIZEMAX ((size_t) -1)
297 typedef unsigned char yybool
;
304 # define YYJMP_BUF jmp_buf
305 # define YYSETJMP(Env) setjmp (Env)
307 # define YYLONGJMP(Env, Val) (longjmp (Env, Val), YYASSERT (0))
310 ]b4_attribute_define
[
313 # define YYASSERT(Condition) ((void) ((Condition) || (abort (), 0)))
316 /* YYFINAL -- State number of the termination state. */
317 #define YYFINAL ]b4_final_state_number[
318 /* YYLAST -- Last index in YYTABLE. */
319 #define YYLAST ]b4_last[
321 /* YYNTOKENS -- Number of terminals. */
322 #define YYNTOKENS ]b4_tokens_number[
323 /* YYNNTS -- Number of nonterminals. */
324 #define YYNNTS ]b4_nterms_number[
325 /* YYNRULES -- Number of rules. */
326 #define YYNRULES ]b4_rules_number[
327 /* YYNRULES -- Number of states. */
328 #define YYNSTATES ]b4_states_number[
329 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
330 #define YYMAXRHS ]b4_r2_max[
331 /* YYMAXLEFT -- Maximum number of symbols to the left of a handle
332 accessed by $0, $-1, etc., in any rule. */
333 #define YYMAXLEFT ]b4_max_left_semantic_context[
335 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
336 #define YYUNDEFTOK ]b4_undef_token_number[
337 #define YYMAXUTOK ]b4_user_token_number_max[
339 #define YYTRANSLATE(YYX) \
340 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
342 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
343 static const ]b4_int_type_for([b4_translate
])[ yytranslate
[] =
348 #if ]b4_api_PREFIX[DEBUG
349 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
350 static const ]b4_int_type_for([b4_rline
])[ yyrline
[] =
356 #if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
357 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
358 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
359 static const char *const yytname
[] =
365 #define YYPACT_NINF ]b4_pact_ninf[
366 #define YYTABLE_NINF ]b4_table_ninf[
368 ]b4_parser_tables_define
[
370 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
371 static const ]b4_int_type_for([b4_dprec
])[ yydprec
[] =
376 /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
377 static const ]b4_int_type_for([b4_merger
])[ yymerger
[] =
382 /* YYIMMEDIATE[RULE-NUM] -- True iff rule #RULE-NUM is not to be deferred, as
383 in the case of predicates. */
384 static const yybool yyimmediate
[] =
389 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
390 list of conflicting reductions corresponding to action entry for
391 state STATE-NUM in yytable. 0 means no conflicts. The list in
392 yyconfl is terminated by a rule number of 0. */
393 static const ]b4_int_type_for([b4_conflict_list_heads
])[ yyconflp
[] =
395 ]b4_conflict_list_heads
[
398 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
399 0, pointed into by YYCONFLP. */
400 ]dnl Do
not use b4_int_type_for here
, since there are places where
401 dnl pointers onto yyconfl are taken
, whose type is
"short int *".
402 dnl We probably ought to introduce a type
for confl
.
403 [static const short int yyconfl
[] =
405 ]b4_conflicting_rules
[
408 /* Error token number */
412 ]b4_yylloc_default_define
[
413 # define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
419 #define yynerrs (yystackp->yyerrcnt)
421 #define yychar (yystackp->yyrawchar)
423 #define yylval (yystackp->yyval)
425 #define yylloc (yystackp->yyloc)
426 m4_if(b4_prefix
[], [yy
], [],
427 [#define b4_prefix[]nerrs yynerrs
428 #define b4_prefix[]char yychar
429 #define b4_prefix[]lval yylval
430 #define b4_prefix[]lloc yylloc])],
431 [YYSTYPE yylval
;]b4_locations_if([[
437 static const int YYEOF
= 0;
438 static const int YYEMPTY
= -2;
440 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
444 YYRESULTTAG yychk_flag = YYE; \
445 if (yychk_flag != yyok) \
449 #if ]b4_api_PREFIX[DEBUG
452 # define YYFPRINTF fprintf
455 ]b4_yy_location_print_define
[
457 # define YYDPRINTF(Args) \
463 ]b4_yy_symbol_print_define
[
465 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
469 YYFPRINTF (stderr, "%s ", Title); \
470 yy_symbol_print (stderr, Type, Value]b4_locuser_args([Location])[); \
471 YYFPRINTF (stderr, "\n"); \
475 /* Nonzero means print parse trace. It is left uninitialized so that
476 multiple parsers can coexist. */
480 static void yypstack (struct yyGLRStack
* yystackp
, size_t yyk
)
482 static void yypdumpstack (struct yyGLRStack
* yystackp
)
485 #else /* !]b4_api_PREFIX[DEBUG */
487 # define YYDPRINTF(Args)
488 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
490 #endif /* !]b4_api_PREFIX[DEBUG */
492 /* YYINITDEPTH -- initial size of the parser's stacks. */
494 # define YYINITDEPTH ]b4_stack_depth_init[
497 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
498 if the built-in stack extension method is used).
500 Do not make this value too large; the results are undefined if
501 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
502 evaluated with infinite-precision integer arithmetic. */
505 # define YYMAXDEPTH ]b4_stack_depth_max[
508 /* Minimum number of free items on the stack allowed after an
509 allocation. This is to allow allocation and initialization
510 to be completed by functions that call yyexpandGLRStack before the
511 stack is expanded, thus insuring that all necessary pointers get
512 properly redirected to new data. */
515 #ifndef YYSTACKEXPANDABLE
516 # define YYSTACKEXPANDABLE 1
519 #if YYSTACKEXPANDABLE
520 # define YY_RESERVE_GLRSTACK(Yystack) \
522 if (Yystack->yyspaceLeft < YYHEADROOM) \
523 yyexpandGLRStack (Yystack); \
526 # define YY_RESERVE_GLRSTACK(Yystack) \
528 if (Yystack->yyspaceLeft < YYHEADROOM) \
529 yyMemoryExhausted (Yystack); \
537 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
538 # define yystpcpy stpcpy
540 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
543 yystpcpy (char *yydest
, const char *yysrc
)
546 const char *yys
= yysrc
;
548 while ((*yyd
++ = *yys
++) != '\0')
557 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
558 quotes and backslashes, so that it's suitable for yyerror. The
559 heuristic is that double-quoting is unnecessary unless the string
560 contains an apostrophe, a comma, or backslash (other than
561 backslash-backslash). YYSTR is taken from yytname. If YYRES is
562 null, do not copy; instead, return the length of what the result
565 yytnamerr (char *yyres
, const char *yystr
)
570 char const *yyp
= yystr
;
577 goto do_not_strip_quotes
;
581 goto do_not_strip_quotes
;
594 do_not_strip_quotes
: ;
598 return strlen (yystr
);
600 return yystpcpy (yyres
, yystr
) - yyres
;
604 #endif /* !YYERROR_VERBOSE */
606 /** State numbers, as in LALR(1) machine */
607 typedef int yyStateNum
;
609 /** Rule numbers, as in LALR(1) machine */
610 typedef int yyRuleNum
;
612 /** Grammar symbol */
613 typedef int yySymbol
;
615 /** Item references, as in LALR(1) machine */
616 typedef short int yyItemNum
;
618 typedef struct yyGLRState yyGLRState
;
619 typedef struct yyGLRStateSet yyGLRStateSet
;
620 typedef struct yySemanticOption yySemanticOption
;
621 typedef union yyGLRStackItem yyGLRStackItem
;
622 typedef struct yyGLRStack yyGLRStack
;
625 /** Type tag: always true. */
627 /** Type tag for yysemantics. If true, yysval applies, otherwise
628 * yyfirstVal applies. */
630 /** Number of corresponding LALR(1) machine state. */
631 yyStateNum yylrState
;
632 /** Preceding state in this stack */
634 /** Source position of the last token produced by my symbol */
637 /** First in a chain of alternative reductions producing the
638 * non-terminal corresponding to this state, threaded through
640 yySemanticOption
* yyfirstVal
;
641 /** Semantic value for this state. */
643 } yysemantics
;]b4_locations_if([[
644 /** Source location for this state. */
648 struct yyGLRStateSet
{
649 yyGLRState
** yystates
;
650 /** During nondeterministic operation, yylookaheadNeeds tracks which
651 * stacks have actually needed the current lookahead. During deterministic
652 * operation, yylookaheadNeeds[0] is not maintained since it would merely
653 * duplicate yychar != YYEMPTY. */
654 yybool
* yylookaheadNeeds
;
655 size_t yysize
, yycapacity
;
658 struct yySemanticOption
{
659 /** Type tag: always false. */
661 /** Rule number for this reduction */
663 /** The last RHS state in the list of states to be reduced. */
665 /** The lookahead for this reduction. */
667 YYSTYPE yyval
;]b4_locations_if([[
669 /** Next sibling in chain of options. To facilitate merging,
670 * options are chained in decreasing order by address. */
671 yySemanticOption
* yynext
;
674 /** Type of the items in the GLR stack. The yyisState field
675 * indicates which item of the union is valid. */
676 union yyGLRStackItem
{
678 yySemanticOption yyoption
;
683 ]b4_locations_if([[ /* To compute the location of the error token. */
684 yyGLRStackItem yyerror_range
[3];]])[
689 YYSTYPE yyval
;]b4_locations_if([[
692 YYJMP_BUF yyexception_buffer
;
693 yyGLRStackItem
* yyitems
;
694 yyGLRStackItem
* yynextFree
;
696 yyGLRState
* yysplitPoint
;
697 yyGLRState
* yylastDeleted
;
698 yyGLRStateSet yytops
;
701 #if YYSTACKEXPANDABLE
702 static void yyexpandGLRStack (yyGLRStack
* yystackp
);
705 static _Noreturn
void
706 yyFail (yyGLRStack
* yystackp
]b4_pure_formals
[, const char* yymsg
)
708 if (yymsg
!= YY_NULLPTR
)
709 yyerror (]b4_yyerror_args
[yymsg
);
710 YYLONGJMP (yystackp
->yyexception_buffer
, 1);
713 static _Noreturn
void
714 yyMemoryExhausted (yyGLRStack
* yystackp
)
716 YYLONGJMP (yystackp
->yyexception_buffer
, 2);
719 #if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE
720 /** A printable representation of TOKEN. */
721 static inline const char*
722 yytokenName (yySymbol yytoken
)
724 if (yytoken
== YYEMPTY
)
727 return yytname
[yytoken
];
731 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
732 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
733 * containing the pointer to the next state in the chain. */
734 static void yyfillin (yyGLRStackItem
*, int, int) YY_ATTRIBUTE_UNUSED
;
736 yyfillin (yyGLRStackItem
*yyvsp
, int yylow0
, int yylow1
)
739 yyGLRState
*s
= yyvsp
[yylow0
].yystate
.yypred
;
740 for (i
= yylow0
-1; i
>= yylow1
; i
-= 1)
742 #if ]b4_api_PREFIX[DEBUG
743 yyvsp
[i
].yystate
.yylrState
= s
->yylrState
;
745 yyvsp
[i
].yystate
.yyresolved
= s
->yyresolved
;
747 yyvsp
[i
].yystate
.yysemantics
.yysval
= s
->yysemantics
.yysval
;
749 /* The effect of using yysval or yyloc (in an immediate rule) is
751 yyvsp
[i
].yystate
.yysemantics
.yyfirstVal
= YY_NULLPTR
;]b4_locations_if([[
752 yyvsp
[i
].yystate
.yyloc
= s
->yyloc
;]])[
753 s
= yyvsp
[i
].yystate
.yypred
= s
->yypred
;
757 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
758 * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
759 * For convenience, always return YYLOW1. */
760 static inline int yyfill (yyGLRStackItem
*, int *, int, yybool
)
763 yyfill (yyGLRStackItem
*yyvsp
, int *yylow
, int yylow1
, yybool yynormal
)
765 if (!yynormal
&& yylow1
< *yylow
)
767 yyfillin (yyvsp
, *yylow
, yylow1
);
773 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
774 * and top stack item YYVSP. YYLVALP points to place to put semantic
775 * value ($$), and yylocp points to place for location information
776 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
777 * yyerr for YYERROR, yyabort for YYABORT. */
779 yyuserAction (yyRuleNum yyn
, size_t yyrhslen
, yyGLRStackItem
* yyvsp
,
780 yyGLRStack
* yystackp
,
781 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
783 yybool yynormal YY_ATTRIBUTE_UNUSED
= (yystackp
->yysplitPoint
== YY_NULLPTR
);
785 ]b4_parse_param_use([yyvalp
], [yylocp
])dnl
788 # define yyerrok (yystackp->yyerrState = 0)
790 # define YYACCEPT return yyaccept
792 # define YYABORT return yyabort
794 # define YYERROR return yyerrok, yyerr
796 # define YYRECOVERING() (yystackp->yyerrState != 0)
798 # define yyclearin (yychar = YYEMPTY)
800 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
802 # define YYBACKUP(Token, Value) \
803 return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")), \
808 *yyvalp
= yyval_default
;
810 *yyvalp
= yyvsp
[YYFILL (1-yyrhslen
)].yystate
.yysemantics
.yysval
;]b4_locations_if([[
811 /* Default location. */
812 YYLLOC_DEFAULT ((*yylocp
), (yyvsp
- yyrhslen
), yyrhslen
);
813 yystackp
->yyerror_range
[1].yystate
.yyloc
= *yylocp
;
833 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
845 /* Bison grammar-table manipulation. */
847 ]b4_yydestruct_define
[
849 /** Number of symbols composing the right hand side of rule #RULE. */
851 yyrhsLength (yyRuleNum yyrule
)
857 yydestroyGLRState (char const *yymsg
, yyGLRState
*yys
]b4_user_formals
[)
860 yydestruct (yymsg
, yystos
[yys
->yylrState
],
861 &yys
->yysemantics
.yysval
]b4_locuser_args([&yys
->yyloc
])[);
864 #if ]b4_api_PREFIX[DEBUG
867 if (yys
->yysemantics
.yyfirstVal
)
868 YYFPRINTF (stderr
, "%s unresolved", yymsg
);
870 YYFPRINTF (stderr
, "%s incomplete", yymsg
);
871 YY_SYMBOL_PRINT ("", yystos
[yys
->yylrState
], YY_NULLPTR
, &yys
->yyloc
);
875 if (yys
->yysemantics
.yyfirstVal
)
877 yySemanticOption
*yyoption
= yys
->yysemantics
.yyfirstVal
;
880 for (yyrh
= yyoption
->yystate
, yyn
= yyrhsLength (yyoption
->yyrule
);
882 yyrh
= yyrh
->yypred
, yyn
-= 1)
883 yydestroyGLRState (yymsg
, yyrh
]b4_user_args
[);
888 /** Left-hand-side symbol for rule #YYRULE. */
889 static inline yySymbol
890 yylhsNonterm (yyRuleNum yyrule
)
895 #define yypact_value_is_default(Yystate) \
896 ]b4_table_value_equals([[pact]], [[Yystate]], [b4_pact_ninf])[
898 /** True iff LR state YYSTATE has only a default reduction (regardless
901 yyisDefaultedState (yyStateNum yystate
)
903 return yypact_value_is_default (yypact
[yystate
]);
906 /** The default reduction for YYSTATE, assuming it has one. */
907 static inline yyRuleNum
908 yydefaultAction (yyStateNum yystate
)
910 return yydefact
[yystate
];
913 #define yytable_value_is_error(Yytable_value) \
914 ]b4_table_value_equals([[table]], [[Yytable_value]], [b4_table_ninf])[
916 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
918 * R < 0: Reduce on rule -R.
920 * R > 0: Shift to state R.
921 * Set *YYCONFLICTS to a pointer into yyconfl to a 0-terminated list
922 * of conflicting reductions.
925 yygetLRActions (yyStateNum yystate
, int yytoken
,
926 int* yyaction
, const short int** yyconflicts
)
928 int yyindex
= yypact
[yystate
] + yytoken
;
929 if (yypact_value_is_default (yypact
[yystate
])
930 || yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
932 *yyaction
= -yydefact
[yystate
];
933 *yyconflicts
= yyconfl
;
935 else if (! yytable_value_is_error (yytable
[yyindex
]))
937 *yyaction
= yytable
[yyindex
];
938 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
943 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
947 /** Compute post-reduction state.
948 * \param yystate the current state
949 * \param yysym the nonterminal to push on the stack
951 static inline yyStateNum
952 yyLRgotoState (yyStateNum yystate
, yySymbol yysym
)
954 int yyr
= yypgoto
[yysym
- YYNTOKENS
] + yystate
;
955 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
958 return yydefgoto
[yysym
- YYNTOKENS
];
962 yyisShiftAction (int yyaction
)
968 yyisErrorAction (int yyaction
)
970 return yyaction
== 0;
975 /** Return a fresh GLRStackItem in YYSTACKP. The item is an LR state
976 * if YYISSTATE, and otherwise a semantic option. Callers should call
977 * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
980 static inline yyGLRStackItem
*
981 yynewGLRStackItem (yyGLRStack
* yystackp
, yybool yyisState
)
983 yyGLRStackItem
* yynewItem
= yystackp
->yynextFree
;
984 yystackp
->yyspaceLeft
-= 1;
985 yystackp
->yynextFree
+= 1;
986 yynewItem
->yystate
.yyisState
= yyisState
;
990 /** Add a new semantic action that will execute the action for rule
991 * YYRULE on the semantic values in YYRHS to the list of
992 * alternative actions for YYSTATE. Assumes that YYRHS comes from
993 * stack #YYK of *YYSTACKP. */
995 yyaddDeferredAction (yyGLRStack
* yystackp
, size_t yyk
, yyGLRState
* yystate
,
996 yyGLRState
* yyrhs
, yyRuleNum yyrule
)
998 yySemanticOption
* yynewOption
=
999 &yynewGLRStackItem (yystackp
, yyfalse
)->yyoption
;
1000 YYASSERT (!yynewOption
->yyisState
);
1001 yynewOption
->yystate
= yyrhs
;
1002 yynewOption
->yyrule
= yyrule
;
1003 if (yystackp
->yytops
.yylookaheadNeeds
[yyk
])
1005 yynewOption
->yyrawchar
= yychar
;
1006 yynewOption
->yyval
= yylval
;]b4_locations_if([
1007 yynewOption
->yyloc
= yylloc
;])[
1010 yynewOption
->yyrawchar
= YYEMPTY
;
1011 yynewOption
->yynext
= yystate
->yysemantics
.yyfirstVal
;
1012 yystate
->yysemantics
.yyfirstVal
= yynewOption
;
1014 YY_RESERVE_GLRSTACK (yystackp
);
1019 /** Initialize YYSET to a singleton set containing an empty stack. */
1021 yyinitStateSet (yyGLRStateSet
* yyset
)
1024 yyset
->yycapacity
= 16;
1025 yyset
->yystates
= (yyGLRState
**) YYMALLOC (16 * sizeof yyset
->yystates
[0]);
1026 if (! yyset
->yystates
)
1028 yyset
->yystates
[0] = YY_NULLPTR
;
1029 yyset
->yylookaheadNeeds
=
1030 (yybool
*) YYMALLOC (16 * sizeof yyset
->yylookaheadNeeds
[0]);
1031 if (! yyset
->yylookaheadNeeds
)
1033 YYFREE (yyset
->yystates
);
1039 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
1041 YYFREE (yyset
->yystates
);
1042 YYFREE (yyset
->yylookaheadNeeds
);
1045 /** Initialize *YYSTACKP to a single empty stack, with total maximum
1046 * capacity for all stacks of YYSIZE. */
1048 yyinitGLRStack (yyGLRStack
* yystackp
, size_t yysize
)
1050 yystackp
->yyerrState
= 0;
1052 yystackp
->yyspaceLeft
= yysize
;
1054 (yyGLRStackItem
*) YYMALLOC (yysize
* sizeof yystackp
->yynextFree
[0]);
1055 if (!yystackp
->yyitems
)
1057 yystackp
->yynextFree
= yystackp
->yyitems
;
1058 yystackp
->yysplitPoint
= YY_NULLPTR
;
1059 yystackp
->yylastDeleted
= YY_NULLPTR
;
1060 return yyinitStateSet (&yystackp
->yytops
);
1064 #if YYSTACKEXPANDABLE
1065 # define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
1066 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
1068 /** If *YYSTACKP is expandable, extend it. WARNING: Pointers into the
1069 stack from outside should be considered invalid after this call.
1070 We always expand when there are 1 or fewer items left AFTER an
1071 allocation, so that we can avoid having external pointers exist
1072 across an allocation. */
1074 yyexpandGLRStack (yyGLRStack
* yystackp
)
1076 yyGLRStackItem
* yynewItems
;
1077 yyGLRStackItem
* yyp0
, *yyp1
;
1080 size_t yysize
= yystackp
->yynextFree
- yystackp
->yyitems
;
1081 if (YYMAXDEPTH
- YYHEADROOM
< yysize
)
1082 yyMemoryExhausted (yystackp
);
1083 yynewSize
= 2*yysize
;
1084 if (YYMAXDEPTH
< yynewSize
)
1085 yynewSize
= YYMAXDEPTH
;
1086 yynewItems
= (yyGLRStackItem
*) YYMALLOC (yynewSize
* sizeof yynewItems
[0]);
1088 yyMemoryExhausted (yystackp
);
1089 for (yyp0
= yystackp
->yyitems
, yyp1
= yynewItems
, yyn
= yysize
;
1091 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
1094 if (*(yybool
*) yyp0
)
1096 yyGLRState
* yys0
= &yyp0
->yystate
;
1097 yyGLRState
* yys1
= &yyp1
->yystate
;
1098 if (yys0
->yypred
!= YY_NULLPTR
)
1100 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
1101 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= YY_NULLPTR
)
1102 yys1
->yysemantics
.yyfirstVal
=
1103 YYRELOC (yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
1107 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
1108 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
1109 if (yyv0
->yystate
!= YY_NULLPTR
)
1110 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
1111 if (yyv0
->yynext
!= YY_NULLPTR
)
1112 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
1115 if (yystackp
->yysplitPoint
!= YY_NULLPTR
)
1116 yystackp
->yysplitPoint
= YYRELOC (yystackp
->yyitems
, yynewItems
,
1117 yystackp
->yysplitPoint
, yystate
);
1119 for (yyn
= 0; yyn
< yystackp
->yytops
.yysize
; yyn
+= 1)
1120 if (yystackp
->yytops
.yystates
[yyn
] != YY_NULLPTR
)
1121 yystackp
->yytops
.yystates
[yyn
] =
1122 YYRELOC (yystackp
->yyitems
, yynewItems
,
1123 yystackp
->yytops
.yystates
[yyn
], yystate
);
1124 YYFREE (yystackp
->yyitems
);
1125 yystackp
->yyitems
= yynewItems
;
1126 yystackp
->yynextFree
= yynewItems
+ yysize
;
1127 yystackp
->yyspaceLeft
= yynewSize
- yysize
;
1132 yyfreeGLRStack (yyGLRStack
* yystackp
)
1134 YYFREE (yystackp
->yyitems
);
1135 yyfreeStateSet (&yystackp
->yytops
);
1138 /** Assuming that YYS is a GLRState somewhere on *YYSTACKP, update the
1139 * splitpoint of *YYSTACKP, if needed, so that it is at least as deep as
1142 yyupdateSplit (yyGLRStack
* yystackp
, yyGLRState
* yys
)
1144 if (yystackp
->yysplitPoint
!= YY_NULLPTR
&& yystackp
->yysplitPoint
> yys
)
1145 yystackp
->yysplitPoint
= yys
;
1148 /** Invalidate stack #YYK in *YYSTACKP. */
1150 yymarkStackDeleted (yyGLRStack
* yystackp
, size_t yyk
)
1152 if (yystackp
->yytops
.yystates
[yyk
] != YY_NULLPTR
)
1153 yystackp
->yylastDeleted
= yystackp
->yytops
.yystates
[yyk
];
1154 yystackp
->yytops
.yystates
[yyk
] = YY_NULLPTR
;
1157 /** Undelete the last stack in *YYSTACKP that was marked as deleted. Can
1158 only be done once after a deletion, and only when all other stacks have
1161 yyundeleteLastStack (yyGLRStack
* yystackp
)
1163 if (yystackp
->yylastDeleted
== YY_NULLPTR
|| yystackp
->yytops
.yysize
!= 0)
1165 yystackp
->yytops
.yystates
[0] = yystackp
->yylastDeleted
;
1166 yystackp
->yytops
.yysize
= 1;
1167 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1168 yystackp
->yylastDeleted
= YY_NULLPTR
;
1172 yyremoveDeletes (yyGLRStack
* yystackp
)
1176 while (yyj
< yystackp
->yytops
.yysize
)
1178 if (yystackp
->yytops
.yystates
[yyi
] == YY_NULLPTR
)
1182 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1184 yystackp
->yytops
.yysize
-= 1;
1188 yystackp
->yytops
.yystates
[yyj
] = yystackp
->yytops
.yystates
[yyi
];
1189 /* In the current implementation, it's unnecessary to copy
1190 yystackp->yytops.yylookaheadNeeds[yyi] since, after
1191 yyremoveDeletes returns, the parser immediately either enters
1192 deterministic operation or shifts a token. However, it doesn't
1193 hurt, and the code might evolve to need it. */
1194 yystackp
->yytops
.yylookaheadNeeds
[yyj
] =
1195 yystackp
->yytops
.yylookaheadNeeds
[yyi
];
1198 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1199 (unsigned long int) yyi
, (unsigned long int) yyj
));
1207 /** Shift to a new state on stack #YYK of *YYSTACKP, corresponding to LR
1208 * state YYLRSTATE, at input position YYPOSN, with (resolved) semantic
1209 * value *YYVALP and source location *YYLOCP. */
1211 yyglrShift (yyGLRStack
* yystackp
, size_t yyk
, yyStateNum yylrState
,
1213 YYSTYPE
* yyvalp
]b4_locations_if([, YYLTYPE
* yylocp
])[)
1215 yyGLRState
* yynewState
= &yynewGLRStackItem (yystackp
, yytrue
)->yystate
;
1217 yynewState
->yylrState
= yylrState
;
1218 yynewState
->yyposn
= yyposn
;
1219 yynewState
->yyresolved
= yytrue
;
1220 yynewState
->yypred
= yystackp
->yytops
.yystates
[yyk
];
1221 yynewState
->yysemantics
.yysval
= *yyvalp
;]b4_locations_if([
1222 yynewState
->yyloc
= *yylocp
;])[
1223 yystackp
->yytops
.yystates
[yyk
] = yynewState
;
1225 YY_RESERVE_GLRSTACK (yystackp
);
1228 /** Shift stack #YYK of *YYSTACKP, to a new state corresponding to LR
1229 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1230 * semantic value of YYRHS under the action for YYRULE. */
1232 yyglrShiftDefer (yyGLRStack
* yystackp
, size_t yyk
, yyStateNum yylrState
,
1233 size_t yyposn
, yyGLRState
* yyrhs
, yyRuleNum yyrule
)
1235 yyGLRState
* yynewState
= &yynewGLRStackItem (yystackp
, yytrue
)->yystate
;
1236 YYASSERT (yynewState
->yyisState
);
1238 yynewState
->yylrState
= yylrState
;
1239 yynewState
->yyposn
= yyposn
;
1240 yynewState
->yyresolved
= yyfalse
;
1241 yynewState
->yypred
= yystackp
->yytops
.yystates
[yyk
];
1242 yynewState
->yysemantics
.yyfirstVal
= YY_NULLPTR
;
1243 yystackp
->yytops
.yystates
[yyk
] = yynewState
;
1245 /* Invokes YY_RESERVE_GLRSTACK. */
1246 yyaddDeferredAction (yystackp
, yyk
, yynewState
, yyrhs
, yyrule
);
1249 #if !]b4_api_PREFIX[DEBUG
1250 # define YY_REDUCE_PRINT(Args)
1252 # define YY_REDUCE_PRINT(Args) \
1255 yy_reduce_print Args; \
1258 /*----------------------------------------------------------------------.
1259 | Report that stack #YYK of *YYSTACKP is going to be reduced by YYRULE. |
1260 `----------------------------------------------------------------------*/
1263 yy_reduce_print (int yynormal
, yyGLRStackItem
* yyvsp
, size_t yyk
,
1264 yyRuleNum yyrule
]b4_user_formals
[)
1266 int yynrhs
= yyrhsLength (yyrule
);]b4_locations_if([
1269 YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu):\n",
1270 (unsigned long int) yyk
, yyrule
- 1,
1271 (unsigned long int) yyrline
[yyrule
]);
1273 yyfillin (yyvsp
, 1, -yynrhs
);
1274 /* The symbols being reduced. */
1275 for (yyi
= 0; yyi
< yynrhs
; yyi
++)
1277 YYFPRINTF (stderr
, " $%d = ", yyi
+ 1);
1278 yy_symbol_print (stderr
,
1279 yystos
[yyvsp
[yyi
- yynrhs
+ 1].yystate
.yylrState
],
1280 &yyvsp
[yyi
- yynrhs
+ 1].yystate
.yysemantics
.yysval
1281 ]b4_locations_if([, &]b4_rhs_location(yynrhs
, yyi
+ 1))[]dnl
1283 if (!yyvsp
[yyi
- yynrhs
+ 1].yystate
.yyresolved
)
1284 YYFPRINTF (stderr
, " (unresolved)");
1285 YYFPRINTF (stderr
, "\n");
1290 /** Pop the symbols consumed by reduction #YYRULE from the top of stack
1291 * #YYK of *YYSTACKP, and perform the appropriate semantic action on their
1292 * semantic values. Assumes that all ambiguities in semantic values
1293 * have been previously resolved. Set *YYVALP to the resulting value,
1294 * and *YYLOCP to the computed location (if any). Return value is as
1295 * for userAction. */
1296 static inline YYRESULTTAG
1297 yydoAction (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1298 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
1300 int yynrhs
= yyrhsLength (yyrule
);
1302 if (yystackp
->yysplitPoint
== YY_NULLPTR
)
1304 /* Standard special case: single stack. */
1305 yyGLRStackItem
* yyrhs
= (yyGLRStackItem
*) yystackp
->yytops
.yystates
[yyk
];
1306 YYASSERT (yyk
== 0);
1307 yystackp
->yynextFree
-= yynrhs
;
1308 yystackp
->yyspaceLeft
+= yynrhs
;
1309 yystackp
->yytops
.yystates
[0] = & yystackp
->yynextFree
[-1].yystate
;
1310 YY_REDUCE_PRINT ((1, yyrhs
, yyk
, yyrule
]b4_user_args
[));
1311 return yyuserAction (yyrule
, yynrhs
, yyrhs
, yystackp
,
1312 yyvalp
]b4_locuser_args
[);
1318 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1319 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1320 = yystackp
->yytops
.yystates
[yyk
];]b4_locations_if([[
1322 /* Set default location. */
1323 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
- 1].yystate
.yyloc
= yys
->yyloc
;]])[
1324 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1329 yyupdateSplit (yystackp
, yys
);
1330 yystackp
->yytops
.yystates
[yyk
] = yys
;
1331 YY_REDUCE_PRINT ((0, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1, yyk
, yyrule
]b4_user_args
[));
1332 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1333 yystackp
, yyvalp
]b4_locuser_args
[);
1337 /** Pop items off stack #YYK of *YYSTACKP according to grammar rule YYRULE,
1338 * and push back on the resulting nonterminal symbol. Perform the
1339 * semantic action associated with YYRULE and store its value with the
1340 * newly pushed state, if YYFORCEEVAL or if *YYSTACKP is currently
1341 * unambiguous. Otherwise, store the deferred semantic action with
1342 * the new state. If the new state would have an identical input
1343 * position, LR state, and predecessor to an existing state on the stack,
1344 * it is identified with that existing state, eliminating stack #YYK from
1345 * *YYSTACKP. In this case, the semantic value is
1346 * added to the options for the existing state's semantic value.
1348 static inline YYRESULTTAG
1349 yyglrReduce (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1350 yybool yyforceEval
]b4_user_formals
[)
1352 size_t yyposn
= yystackp
->yytops
.yystates
[yyk
]->yyposn
;
1354 if (yyforceEval
|| yystackp
->yysplitPoint
== YY_NULLPTR
)
1356 YYSTYPE yysval
;]b4_locations_if([[
1359 YYRESULTTAG yyflag
= yydoAction (yystackp
, yyk
, yyrule
, &yysval
]b4_locuser_args([&yyloc
])[);
1360 if (yyflag
== yyerr
&& yystackp
->yysplitPoint
!= YY_NULLPTR
)
1362 YYDPRINTF ((stderr
, "Parse on stack %lu rejected by rule #%d.\n",
1363 (unsigned long int) yyk
, yyrule
- 1));
1367 YY_SYMBOL_PRINT ("-> $$ =", yyr1
[yyrule
], &yysval
, &yyloc
);
1368 yyglrShift (yystackp
, yyk
,
1369 yyLRgotoState (yystackp
->yytops
.yystates
[yyk
]->yylrState
,
1370 yylhsNonterm (yyrule
)),
1371 yyposn
, &yysval
]b4_locations_if([, &yyloc
])[);
1377 yyGLRState
* yys
, *yys0
= yystackp
->yytops
.yystates
[yyk
];
1378 yyStateNum yynewLRState
;
1380 for (yys
= yystackp
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1386 yyupdateSplit (yystackp
, yys
);
1387 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1389 "Reduced stack %lu by rule #%d; action deferred. "
1390 "Now in state %d.\n",
1391 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1392 for (yyi
= 0; yyi
< yystackp
->yytops
.yysize
; yyi
+= 1)
1393 if (yyi
!= yyk
&& yystackp
->yytops
.yystates
[yyi
] != YY_NULLPTR
)
1395 yyGLRState
*yysplit
= yystackp
->yysplitPoint
;
1396 yyGLRState
*yyp
= yystackp
->yytops
.yystates
[yyi
];
1397 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1399 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1401 yyaddDeferredAction (yystackp
, yyk
, yyp
, yys0
, yyrule
);
1402 yymarkStackDeleted (yystackp
, yyk
);
1403 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1404 (unsigned long int) yyk
,
1405 (unsigned long int) yyi
));
1411 yystackp
->yytops
.yystates
[yyk
] = yys
;
1412 yyglrShiftDefer (yystackp
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
);
1418 yysplitStack (yyGLRStack
* yystackp
, size_t yyk
)
1420 if (yystackp
->yysplitPoint
== YY_NULLPTR
)
1422 YYASSERT (yyk
== 0);
1423 yystackp
->yysplitPoint
= yystackp
->yytops
.yystates
[yyk
];
1425 if (yystackp
->yytops
.yysize
>= yystackp
->yytops
.yycapacity
)
1427 yyGLRState
** yynewStates
;
1428 yybool
* yynewLookaheadNeeds
;
1430 yynewStates
= YY_NULLPTR
;
1432 if (yystackp
->yytops
.yycapacity
1433 > (YYSIZEMAX
/ (2 * sizeof yynewStates
[0])))
1434 yyMemoryExhausted (yystackp
);
1435 yystackp
->yytops
.yycapacity
*= 2;
1438 (yyGLRState
**) YYREALLOC (yystackp
->yytops
.yystates
,
1439 (yystackp
->yytops
.yycapacity
1440 * sizeof yynewStates
[0]));
1441 if (yynewStates
== YY_NULLPTR
)
1442 yyMemoryExhausted (yystackp
);
1443 yystackp
->yytops
.yystates
= yynewStates
;
1445 yynewLookaheadNeeds
=
1446 (yybool
*) YYREALLOC (yystackp
->yytops
.yylookaheadNeeds
,
1447 (yystackp
->yytops
.yycapacity
1448 * sizeof yynewLookaheadNeeds
[0]));
1449 if (yynewLookaheadNeeds
== YY_NULLPTR
)
1450 yyMemoryExhausted (yystackp
);
1451 yystackp
->yytops
.yylookaheadNeeds
= yynewLookaheadNeeds
;
1453 yystackp
->yytops
.yystates
[yystackp
->yytops
.yysize
]
1454 = yystackp
->yytops
.yystates
[yyk
];
1455 yystackp
->yytops
.yylookaheadNeeds
[yystackp
->yytops
.yysize
]
1456 = yystackp
->yytops
.yylookaheadNeeds
[yyk
];
1457 yystackp
->yytops
.yysize
+= 1;
1458 return yystackp
->yytops
.yysize
-1;
1461 /** True iff YYY0 and YYY1 represent identical options at the top level.
1462 * That is, they represent the same rule applied to RHS symbols
1463 * that produce the same terminal symbols. */
1465 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1467 if (yyy0
->yyrule
== yyy1
->yyrule
)
1469 yyGLRState
*yys0
, *yys1
;
1471 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1472 yyn
= yyrhsLength (yyy0
->yyrule
);
1474 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1475 if (yys0
->yyposn
!= yys1
->yyposn
)
1483 /** Assuming identicalOptions (YYY0,YYY1), destructively merge the
1484 * alternative semantic values for the RHS-symbols of YYY1 and YYY0. */
1486 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1488 yyGLRState
*yys0
, *yys1
;
1490 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1491 yyn
= yyrhsLength (yyy0
->yyrule
);
1493 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1497 else if (yys0
->yyresolved
)
1499 yys1
->yyresolved
= yytrue
;
1500 yys1
->yysemantics
.yysval
= yys0
->yysemantics
.yysval
;
1502 else if (yys1
->yyresolved
)
1504 yys0
->yyresolved
= yytrue
;
1505 yys0
->yysemantics
.yysval
= yys1
->yysemantics
.yysval
;
1509 yySemanticOption
** yyz0p
= &yys0
->yysemantics
.yyfirstVal
;
1510 yySemanticOption
* yyz1
= yys1
->yysemantics
.yyfirstVal
;
1513 if (yyz1
== *yyz0p
|| yyz1
== YY_NULLPTR
)
1515 else if (*yyz0p
== YY_NULLPTR
)
1520 else if (*yyz0p
< yyz1
)
1522 yySemanticOption
* yyz
= *yyz0p
;
1524 yyz1
= yyz1
->yynext
;
1525 (*yyz0p
)->yynext
= yyz
;
1527 yyz0p
= &(*yyz0p
)->yynext
;
1529 yys1
->yysemantics
.yyfirstVal
= yys0
->yysemantics
.yyfirstVal
;
1534 /** Y0 and Y1 represent two possible actions to take in a given
1535 * parsing state; return 0 if no combination is possible,
1536 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1538 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1540 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1541 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1545 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1550 if (p0
== 0 || p1
== 0)
1559 static YYRESULTTAG
yyresolveValue (yyGLRState
* yys
,
1560 yyGLRStack
* yystackp
]b4_user_formals
[);
1563 /** Resolve the previous YYN states starting at and including state YYS
1564 * on *YYSTACKP. If result != yyok, some states may have been left
1565 * unresolved possibly with empty semantic option chains. Regardless
1566 * of whether result = yyok, each state has been left with consistent
1567 * data so that yydestroyGLRState can be invoked if necessary. */
1569 yyresolveStates (yyGLRState
* yys
, int yyn
,
1570 yyGLRStack
* yystackp
]b4_user_formals
[)
1574 YYASSERT (yys
->yypred
);
1575 YYCHK (yyresolveStates (yys
->yypred
, yyn
-1, yystackp
]b4_user_args
[));
1576 if (! yys
->yyresolved
)
1577 YYCHK (yyresolveValue (yys
, yystackp
]b4_user_args
[));
1582 /** Resolve the states for the RHS of YYOPT on *YYSTACKP, perform its
1583 * user action, and return the semantic value and location in *YYVALP
1584 * and *YYLOCP. Regardless of whether result = yyok, all RHS states
1585 * have been destroyed (assuming the user action destroys all RHS
1586 * semantic values if invoked). */
1588 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystackp
,
1589 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
1591 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1592 int yynrhs
= yyrhsLength (yyopt
->yyrule
);
1593 YYRESULTTAG yyflag
=
1594 yyresolveStates (yyopt
->yystate
, yynrhs
, yystackp
]b4_user_args
[);
1598 for (yys
= yyopt
->yystate
; yynrhs
> 0; yys
= yys
->yypred
, yynrhs
-= 1)
1599 yydestroyGLRState ("Cleanup: popping", yys
]b4_user_args
[);
1603 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;]b4_locations_if([[
1605 /* Set default location. */
1606 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
- 1].yystate
.yyloc
= yyopt
->yystate
->yyloc
;]])[
1608 int yychar_current
= yychar
;
1609 YYSTYPE yylval_current
= yylval
;]b4_locations_if([
1610 YYLTYPE yylloc_current
= yylloc
;])[
1611 yychar
= yyopt
->yyrawchar
;
1612 yylval
= yyopt
->yyval
;]b4_locations_if([
1613 yylloc
= yyopt
->yyloc
;])[
1614 yyflag
= yyuserAction (yyopt
->yyrule
, yynrhs
,
1615 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1616 yystackp
, yyvalp
]b4_locuser_args
[);
1617 yychar
= yychar_current
;
1618 yylval
= yylval_current
;]b4_locations_if([
1619 yylloc
= yylloc_current
;])[
1624 #if ]b4_api_PREFIX[DEBUG
1626 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1628 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1631 yyGLRState
* yystates
[1 + YYMAXRHS
];
1632 yyGLRState yyleftmost_state
;
1634 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1635 yystates
[yyi
] = yys
;
1636 if (yys
== YY_NULLPTR
)
1638 yyleftmost_state
.yyposn
= 0;
1639 yystates
[0] = &yyleftmost_state
;
1644 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1645 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1646 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1649 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1650 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1651 yyx
->yyrule
- 1, (unsigned long int) (yys
->yyposn
+ 1),
1652 (unsigned long int) yyx
->yystate
->yyposn
);
1653 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1655 if (yystates
[yyi
]->yyresolved
)
1657 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1658 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1659 yytokenName (yystos
[yystates
[yyi
]->yylrState
]));
1661 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1662 yytokenName (yystos
[yystates
[yyi
]->yylrState
]),
1663 (unsigned long int) (yystates
[yyi
-1]->yyposn
+ 1),
1664 (unsigned long int) yystates
[yyi
]->yyposn
);
1667 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1673 yyreportAmbiguity (yySemanticOption
* yyx0
,
1674 yySemanticOption
* yyx1
]b4_pure_formals
[)
1679 #if ]b4_api_PREFIX[DEBUG
1680 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1681 YYFPRINTF (stderr
, "Option 1,\n");
1682 yyreportTree (yyx0
, 2);
1683 YYFPRINTF (stderr
, "\nOption 2,\n");
1684 yyreportTree (yyx1
, 2);
1685 YYFPRINTF (stderr
, "\n");
1688 yyerror (]b4_yyerror_args
[YY_("syntax is ambiguous"));
1690 }]b4_locations_if([[
1692 /** Resolve the locations for each of the YYN1 states in *YYSTACKP,
1693 * ending at YYS1. Has no effect on previously resolved states.
1694 * The first semantic option of a state is always chosen. */
1696 yyresolveLocations (yyGLRState
* yys1
, int yyn1
,
1697 yyGLRStack
*yystackp
]b4_user_formals
[)
1701 yyresolveLocations (yys1
->yypred
, yyn1
- 1, yystackp
]b4_user_args
[);
1702 if (!yys1
->yyresolved
)
1704 yyGLRStackItem yyrhsloc
[1 + YYMAXRHS
];
1706 yySemanticOption
*yyoption
= yys1
->yysemantics
.yyfirstVal
;
1707 YYASSERT (yyoption
!= YY_NULLPTR
);
1708 yynrhs
= yyrhsLength (yyoption
->yyrule
);
1713 yyresolveLocations (yyoption
->yystate
, yynrhs
,
1714 yystackp
]b4_user_args
[);
1715 for (yys
= yyoption
->yystate
, yyn
= yynrhs
;
1717 yys
= yys
->yypred
, yyn
-= 1)
1718 yyrhsloc
[yyn
].yystate
.yyloc
= yys
->yyloc
;
1722 /* Both yyresolveAction and yyresolveLocations traverse the GSS
1723 in reverse rightmost order. It is only necessary to invoke
1724 yyresolveLocations on a subforest for which yyresolveAction
1725 would have been invoked next had an ambiguity not been
1726 detected. Thus the location of the previous state (but not
1727 necessarily the previous state itself) is guaranteed to be
1728 resolved already. */
1729 yyGLRState
*yyprevious
= yyoption
->yystate
;
1730 yyrhsloc
[0].yystate
.yyloc
= yyprevious
->yyloc
;
1733 int yychar_current
= yychar
;
1734 YYSTYPE yylval_current
= yylval
;
1735 YYLTYPE yylloc_current
= yylloc
;
1736 yychar
= yyoption
->yyrawchar
;
1737 yylval
= yyoption
->yyval
;
1738 yylloc
= yyoption
->yyloc
;
1739 YYLLOC_DEFAULT ((yys1
->yyloc
), yyrhsloc
, yynrhs
);
1740 yychar
= yychar_current
;
1741 yylval
= yylval_current
;
1742 yylloc
= yylloc_current
;
1748 /** Resolve the ambiguity represented in state YYS in *YYSTACKP,
1749 * perform the indicated actions, and set the semantic value of YYS.
1750 * If result != yyok, the chain of semantic options in YYS has been
1751 * cleared instead or it has been left unmodified except that
1752 * redundant options may have been removed. Regardless of whether
1753 * result = yyok, YYS has been left with consistent data so that
1754 * yydestroyGLRState can be invoked if necessary. */
1756 yyresolveValue (yyGLRState
* yys
, yyGLRStack
* yystackp
]b4_user_formals
[)
1758 yySemanticOption
* yyoptionList
= yys
->yysemantics
.yyfirstVal
;
1759 yySemanticOption
* yybest
= yyoptionList
;
1760 yySemanticOption
** yypp
;
1761 yybool yymerge
= yyfalse
;
1763 YYRESULTTAG yyflag
;]b4_locations_if([
1764 YYLTYPE
*yylocp
= &yys
->yyloc
;])[
1766 for (yypp
= &yyoptionList
->yynext
; *yypp
!= YY_NULLPTR
; )
1768 yySemanticOption
* yyp
= *yypp
;
1770 if (yyidenticalOptions (yybest
, yyp
))
1772 yymergeOptionSets (yybest
, yyp
);
1773 *yypp
= yyp
->yynext
;
1777 switch (yypreference (yybest
, yyp
))
1779 case 0:]b4_locations_if([[
1780 yyresolveLocations (yys
, 1, yystackp
]b4_user_args
[);]])[
1781 return yyreportAmbiguity (yybest
, yyp
]b4_pure_args
[);
1793 /* This cannot happen so it is not worth a YYASSERT (yyfalse),
1794 but some compilers complain if the default case is
1798 yypp
= &yyp
->yynext
;
1804 yySemanticOption
* yyp
;
1805 int yyprec
= yydprec
[yybest
->yyrule
];
1806 yyflag
= yyresolveAction (yybest
, yystackp
, &yysval
]b4_locuser_args
[);
1808 for (yyp
= yybest
->yynext
; yyp
!= YY_NULLPTR
; yyp
= yyp
->yynext
)
1810 if (yyprec
== yydprec
[yyp
->yyrule
])
1812 YYSTYPE yysval_other
;]b4_locations_if([
1814 yyflag
= yyresolveAction (yyp
, yystackp
, &yysval_other
]b4_locuser_args([&yydummy
])[);
1817 yydestruct ("Cleanup: discarding incompletely merged value for",
1818 yystos
[yys
->yylrState
],
1819 &yysval
]b4_locuser_args
[);
1822 yyuserMerge (yymerger
[yyp
->yyrule
], &yysval
, &yysval_other
);
1827 yyflag
= yyresolveAction (yybest
, yystackp
, &yysval
]b4_locuser_args([yylocp
])[);
1831 yys
->yyresolved
= yytrue
;
1832 yys
->yysemantics
.yysval
= yysval
;
1835 yys
->yysemantics
.yyfirstVal
= YY_NULLPTR
;
1840 yyresolveStack (yyGLRStack
* yystackp
]b4_user_formals
[)
1842 if (yystackp
->yysplitPoint
!= YY_NULLPTR
)
1847 for (yyn
= 0, yys
= yystackp
->yytops
.yystates
[0];
1848 yys
!= yystackp
->yysplitPoint
;
1849 yys
= yys
->yypred
, yyn
+= 1)
1851 YYCHK (yyresolveStates (yystackp
->yytops
.yystates
[0], yyn
, yystackp
1858 yycompressStack (yyGLRStack
* yystackp
)
1860 yyGLRState
* yyp
, *yyq
, *yyr
;
1862 if (yystackp
->yytops
.yysize
!= 1 || yystackp
->yysplitPoint
== YY_NULLPTR
)
1865 for (yyp
= yystackp
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= YY_NULLPTR
;
1866 yyp
!= yystackp
->yysplitPoint
;
1867 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1870 yystackp
->yyspaceLeft
+= yystackp
->yynextFree
- yystackp
->yyitems
;
1871 yystackp
->yynextFree
= ((yyGLRStackItem
*) yystackp
->yysplitPoint
) + 1;
1872 yystackp
->yyspaceLeft
-= yystackp
->yynextFree
- yystackp
->yyitems
;
1873 yystackp
->yysplitPoint
= YY_NULLPTR
;
1874 yystackp
->yylastDeleted
= YY_NULLPTR
;
1876 while (yyr
!= YY_NULLPTR
)
1878 yystackp
->yynextFree
->yystate
= *yyr
;
1880 yystackp
->yynextFree
->yystate
.yypred
= &yystackp
->yynextFree
[-1].yystate
;
1881 yystackp
->yytops
.yystates
[0] = &yystackp
->yynextFree
->yystate
;
1882 yystackp
->yynextFree
+= 1;
1883 yystackp
->yyspaceLeft
-= 1;
1888 yyprocessOneStack (yyGLRStack
* yystackp
, size_t yyk
,
1889 size_t yyposn
]b4_pure_formals
[)
1891 while (yystackp
->yytops
.yystates
[yyk
] != YY_NULLPTR
)
1893 yyStateNum yystate
= yystackp
->yytops
.yystates
[yyk
]->yylrState
;
1894 YYDPRINTF ((stderr
, "Stack %lu Entering state %d\n",
1895 (unsigned long int) yyk
, yystate
));
1897 YYASSERT (yystate
!= YYFINAL
);
1899 if (yyisDefaultedState (yystate
))
1902 yyRuleNum yyrule
= yydefaultAction (yystate
);
1905 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
1906 (unsigned long int) yyk
));
1907 yymarkStackDeleted (yystackp
, yyk
);
1910 yyflag
= yyglrReduce (yystackp
, yyk
, yyrule
, yyimmediate
[yyrule
]]b4_user_args
[);
1911 if (yyflag
== yyerr
)
1915 "(predicate failure or explicit user error).\n",
1916 (unsigned long int) yyk
));
1917 yymarkStackDeleted (yystackp
, yyk
);
1927 const short int* yyconflicts
;
1929 yystackp
->yytops
.yylookaheadNeeds
[yyk
] = yytrue
;
1930 if (yychar
== YYEMPTY
)
1932 YYDPRINTF ((stderr
, "Reading a token: "));
1936 if (yychar
<= YYEOF
)
1938 yychar
= yytoken
= YYEOF
;
1939 YYDPRINTF ((stderr
, "Now at end of input.\n"));
1943 yytoken
= YYTRANSLATE (yychar
);
1944 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
1947 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1949 while (*yyconflicts
!= 0)
1952 size_t yynewStack
= yysplitStack (yystackp
, yyk
);
1953 YYDPRINTF ((stderr
, "Splitting off stack %lu from %lu.\n",
1954 (unsigned long int) yynewStack
,
1955 (unsigned long int) yyk
));
1956 yyflag
= yyglrReduce (yystackp
, yynewStack
,
1958 yyimmediate
[*yyconflicts
]]b4_user_args
[);
1960 YYCHK (yyprocessOneStack (yystackp
, yynewStack
,
1961 yyposn
]b4_pure_args
[));
1962 else if (yyflag
== yyerr
)
1964 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
1965 (unsigned long int) yynewStack
));
1966 yymarkStackDeleted (yystackp
, yynewStack
);
1973 if (yyisShiftAction (yyaction
))
1975 else if (yyisErrorAction (yyaction
))
1977 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
1978 (unsigned long int) yyk
));
1979 yymarkStackDeleted (yystackp
, yyk
);
1984 YYRESULTTAG yyflag
= yyglrReduce (yystackp
, yyk
, -yyaction
,
1985 yyimmediate
[-yyaction
]]b4_user_args
[);
1986 if (yyflag
== yyerr
)
1990 "(predicate failure or explicit user error).\n",
1991 (unsigned long int) yyk
));
1992 yymarkStackDeleted (yystackp
, yyk
);
1995 else if (yyflag
!= yyok
)
2004 yyreportSyntaxError (yyGLRStack
* yystackp
]b4_user_formals
[)
2006 if (yystackp
->yyerrState
!= 0)
2008 #if ! YYERROR_VERBOSE
2009 yyerror (]b4_lyyerror_args
[YY_("syntax error"));
2012 yySymbol yytoken
= yychar
== YYEMPTY
? YYEMPTY
: YYTRANSLATE (yychar
);
2013 size_t yysize0
= yytnamerr (YY_NULLPTR
, yytokenName (yytoken
));
2014 size_t yysize
= yysize0
;
2015 yybool yysize_overflow
= yyfalse
;
2016 char* yymsg
= YY_NULLPTR
;
2017 enum { YYERROR_VERBOSE_ARGS_MAXIMUM
= 5 };
2018 /* Internationalized format string. */
2019 const char *yyformat
= YY_NULLPTR
;
2020 /* Arguments of yyformat. */
2021 char const *yyarg
[YYERROR_VERBOSE_ARGS_MAXIMUM
];
2022 /* Number of reported tokens (one for the "unexpected", one per
2026 /* There are many possibilities here to consider:
2027 - If this state is a consistent state with a default action, then
2028 the only way this function was invoked is if the default action
2029 is an error action. In that case, don't check for expected
2030 tokens because there are none.
2031 - The only way there can be no lookahead present (in yychar) is if
2032 this state is a consistent state with a default action. Thus,
2033 detecting the absence of a lookahead is sufficient to determine
2034 that there is no unexpected or expected token to report. In that
2035 case, just report a simple "syntax error".
2036 - Don't assume there isn't a lookahead just because this state is a
2037 consistent state with a default action. There might have been a
2038 previous inconsistent state, consistent state with a non-default
2039 action, or user semantic action that manipulated yychar.
2040 - Of course, the expected token list depends on states to have
2041 correct lookahead information, and it depends on the parser not
2042 to perform extra reductions after fetching a lookahead from the
2043 scanner and before detecting a syntax error. Thus, state merging
2044 (from LALR or IELR) and default reductions corrupt the expected
2045 token list. However, the list is correct for canonical LR with
2046 one exception: it will still contain any token that will not be
2047 accepted due to an error action in a later state.
2049 if (yytoken
!= YYEMPTY
)
2051 int yyn
= yypact
[yystackp
->yytops
.yystates
[0]->yylrState
];
2052 yyarg
[yycount
++] = yytokenName (yytoken
);
2053 if (!yypact_value_is_default (yyn
))
2055 /* Start YYX at -YYN if negative to avoid negative indexes in
2056 YYCHECK. In other words, skip the first -YYN actions for this
2057 state because they are default actions. */
2058 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
2059 /* Stay within bounds of both yycheck and yytname. */
2060 int yychecklim
= YYLAST
- yyn
+ 1;
2061 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
2063 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
2064 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
2065 && !yytable_value_is_error (yytable
[yyx
+ yyn
]))
2067 if (yycount
== YYERROR_VERBOSE_ARGS_MAXIMUM
)
2073 yyarg
[yycount
++] = yytokenName (yyx
);
2075 size_t yysz
= yysize
+ yytnamerr (YY_NULLPTR
, yytokenName (yyx
));
2076 yysize_overflow
|= yysz
< yysize
;
2085 #define YYCASE_(N, S) \
2089 YYCASE_(0, YY_("syntax error"));
2090 YYCASE_(1, YY_("syntax error, unexpected %s"));
2091 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
2092 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
2093 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
2094 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
2099 size_t yysz
= yysize
+ strlen (yyformat
);
2100 yysize_overflow
|= yysz
< yysize
;
2104 if (!yysize_overflow
)
2105 yymsg
= (char *) YYMALLOC (yysize
);
2111 while ((*yyp
= *yyformat
))
2113 if (*yyp
== '%' && yyformat
[1] == 's' && yyi
< yycount
)
2115 yyp
+= yytnamerr (yyp
, yyarg
[yyi
++]);
2124 yyerror (]b4_lyyerror_args
[yymsg
);
2129 yyerror (]b4_lyyerror_args
[YY_("syntax error"));
2130 yyMemoryExhausted (yystackp
);
2133 #endif /* YYERROR_VERBOSE */
2137 /* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP,
2138 yylval, and yylloc are the syntactic category, semantic value, and location
2139 of the lookahead. */
2141 yyrecoverSyntaxError (yyGLRStack
* yystackp
]b4_user_formals
[)
2146 if (yystackp
->yyerrState
== 3)
2147 /* We just shifted the error token and (perhaps) took some
2148 reductions. Skip tokens until we can proceed. */
2152 if (yychar
== YYEOF
)
2153 yyFail (yystackp
][]b4_lpure_args
[, YY_NULLPTR
);
2154 if (yychar
!= YYEMPTY
)
2155 {]b4_locations_if([[
2156 /* We throw away the lookahead, but the error range
2157 of the shifted error token must take it into account. */
2158 yyGLRState
*yys
= yystackp
->yytops
.yystates
[0];
2159 yyGLRStackItem yyerror_range
[3];
2160 yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;
2161 yyerror_range
[2].yystate
.yyloc
= yylloc
;
2162 YYLLOC_DEFAULT ((yys
->yyloc
), yyerror_range
, 2);]])[
2163 yytoken
= YYTRANSLATE (yychar
);
2164 yydestruct ("Error: discarding",
2165 yytoken
, &yylval
]b4_locuser_args([&yylloc
])[);
2167 YYDPRINTF ((stderr
, "Reading a token: "));
2169 if (yychar
<= YYEOF
)
2171 yychar
= yytoken
= YYEOF
;
2172 YYDPRINTF ((stderr
, "Now at end of input.\n"));
2176 yytoken
= YYTRANSLATE (yychar
);
2177 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
2179 yyj
= yypact
[yystackp
->yytops
.yystates
[0]->yylrState
];
2180 if (yypact_value_is_default (yyj
))
2183 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != yytoken
)
2185 if (yydefact
[yystackp
->yytops
.yystates
[0]->yylrState
] != 0)
2188 else if (! yytable_value_is_error (yytable
[yyj
]))
2192 /* Reduce to one stack. */
2193 for (yyk
= 0; yyk
< yystackp
->yytops
.yysize
; yyk
+= 1)
2194 if (yystackp
->yytops
.yystates
[yyk
] != YY_NULLPTR
)
2196 if (yyk
>= yystackp
->yytops
.yysize
)
2197 yyFail (yystackp
][]b4_lpure_args
[, YY_NULLPTR
);
2198 for (yyk
+= 1; yyk
< yystackp
->yytops
.yysize
; yyk
+= 1)
2199 yymarkStackDeleted (yystackp
, yyk
);
2200 yyremoveDeletes (yystackp
);
2201 yycompressStack (yystackp
);
2203 /* Now pop stack until we find a state that shifts the error token. */
2204 yystackp
->yyerrState
= 3;
2205 while (yystackp
->yytops
.yystates
[0] != YY_NULLPTR
)
2207 yyGLRState
*yys
= yystackp
->yytops
.yystates
[0];
2208 yyj
= yypact
[yys
->yylrState
];
2209 if (! yypact_value_is_default (yyj
))
2212 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
2213 && yyisShiftAction (yytable
[yyj
]))
2215 /* Shift the error token. */]b4_locations_if([[
2216 /* First adjust its location.*/
2218 yystackp
->yyerror_range
[2].yystate
.yyloc
= yylloc
;
2219 YYLLOC_DEFAULT (yyerrloc
, (yystackp
->yyerror_range
), 2);]])[
2220 YY_SYMBOL_PRINT ("Shifting", yystos
[yytable
[yyj
]],
2221 &yylval
, &yyerrloc
);
2222 yyglrShift (yystackp
, 0, yytable
[yyj
],
2223 yys
->yyposn
, &yylval
]b4_locations_if([, &yyerrloc
])[);
2224 yys
= yystackp
->yytops
.yystates
[0];
2227 }]b4_locations_if([[
2228 yystackp
->yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]])[
2229 if (yys
->yypred
!= YY_NULLPTR
)
2230 yydestroyGLRState ("Error: popping", yys
]b4_user_args
[);
2231 yystackp
->yytops
.yystates
[0] = yys
->yypred
;
2232 yystackp
->yynextFree
-= 1;
2233 yystackp
->yyspaceLeft
+= 1;
2235 if (yystackp
->yytops
.yystates
[0] == YY_NULLPTR
)
2236 yyFail (yystackp
][]b4_lpure_args
[, YY_NULLPTR
);
2239 #define YYCHK1(YYE) \
2249 goto yyuser_error; \
2259 ]b4_function_define([yyparse
], [int], b4_parse_param
)[
2263 yyGLRStack
* const yystackp
= &yystack
;
2266 YYDPRINTF ((stderr
, "Starting parse\n"));
2269 yylval
= yyval_default
;]b4_locations_if([
2270 yylloc
= yyloc_default
;])[
2271 ]m4_ifdef([b4_initial_action
], [
2272 b4_dollar_pushdef([yylval
], [], [yylloc
])dnl
2273 /* User initialization code. */
2274 b4_user_initial_action
2275 b4_dollar_popdef
])[]dnl
2277 if (! yyinitGLRStack (yystackp
, YYINITDEPTH
))
2278 goto yyexhaustedlab
;
2279 switch (YYSETJMP (yystack
.yyexception_buffer
))
2282 case 1: goto yyabortlab
;
2283 case 2: goto yyexhaustedlab
;
2284 default: goto yybuglab
;
2286 yyglrShift (&yystack
, 0, 0, 0, &yylval
]b4_locations_if([, &yylloc
])[);
2291 /* For efficiency, we have two loops, the first of which is
2292 specialized to deterministic operation (single stack, no
2293 potential ambiguity). */
2299 const short int* yyconflicts
;
2301 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
2302 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
2303 if (yystate
== YYFINAL
)
2305 if (yyisDefaultedState (yystate
))
2307 yyrule
= yydefaultAction (yystate
);
2309 {]b4_locations_if([[
2310 yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2311 yyreportSyntaxError (&yystack
]b4_user_args
[);
2314 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_user_args
[));
2319 if (yychar
== YYEMPTY
)
2321 YYDPRINTF ((stderr
, "Reading a token: "));
2325 if (yychar
<= YYEOF
)
2327 yychar
= yytoken
= YYEOF
;
2328 YYDPRINTF ((stderr
, "Now at end of input.\n"));
2332 yytoken
= YYTRANSLATE (yychar
);
2333 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
2336 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
2337 if (*yyconflicts
!= 0)
2339 if (yyisShiftAction (yyaction
))
2341 YY_SYMBOL_PRINT ("Shifting", yytoken
, &yylval
, &yylloc
);
2344 yyglrShift (&yystack
, 0, yyaction
, yyposn
, &yylval
]b4_locations_if([, &yylloc
])[);
2345 if (0 < yystack
.yyerrState
)
2346 yystack
.yyerrState
-= 1;
2348 else if (yyisErrorAction (yyaction
))
2349 {]b4_locations_if([[
2350 yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2351 yyreportSyntaxError (&yystack
]b4_user_args
[);
2355 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_user_args
[));
2361 yySymbol yytoken_to_shift
;
2364 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2365 yystackp
->yytops
.yylookaheadNeeds
[yys
] = yychar
!= YYEMPTY
;
2367 /* yyprocessOneStack returns one of three things:
2369 - An error flag. If the caller is yyprocessOneStack, it
2370 immediately returns as well. When the caller is finally
2371 yyparse, it jumps to an error label via YYCHK1.
2373 - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
2374 (&yystack, yys), which sets the top state of yys to NULL. Thus,
2375 yyparse's following invocation of yyremoveDeletes will remove
2378 - yyok, when ready to shift a token.
2380 Except in the first case, yyparse will invoke yyremoveDeletes and
2381 then shift the next token onto all remaining stacks. This
2382 synchronization of the shift (that is, after all preceding
2383 reductions on all stacks) helps prevent double destructor calls
2384 on yylval in the event of memory exhaustion. */
2386 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2387 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
]b4_lpure_args
[));
2388 yyremoveDeletes (&yystack
);
2389 if (yystack
.yytops
.yysize
== 0)
2391 yyundeleteLastStack (&yystack
);
2392 if (yystack
.yytops
.yysize
== 0)
2393 yyFail (&yystack
][]b4_lpure_args
[, YY_("syntax error"));
2394 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
2395 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));]b4_locations_if([[
2396 yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2397 yyreportSyntaxError (&yystack
]b4_user_args
[);
2401 /* If any yyglrShift call fails, it will fail after shifting. Thus,
2402 a copy of yylval will already be on stack 0 in the event of a
2403 failure in the following loop. Thus, yychar is set to YYEMPTY
2404 before the loop to make sure the user destructor for yylval isn't
2406 yytoken_to_shift
= YYTRANSLATE (yychar
);
2409 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2412 const short int* yyconflicts
;
2413 yyStateNum yystate
= yystack
.yytops
.yystates
[yys
]->yylrState
;
2414 yygetLRActions (yystate
, yytoken_to_shift
, &yyaction
,
2416 /* Note that yyconflicts were handled by yyprocessOneStack. */
2417 YYDPRINTF ((stderr
, "On stack %lu, ", (unsigned long int) yys
));
2418 YY_SYMBOL_PRINT ("shifting", yytoken_to_shift
, &yylval
, &yylloc
);
2419 yyglrShift (&yystack
, yys
, yyaction
, yyposn
,
2420 &yylval
]b4_locations_if([, &yylloc
])[);
2421 YYDPRINTF ((stderr
, "Stack %lu now in state #%d\n",
2422 (unsigned long int) yys
,
2423 yystack
.yytops
.yystates
[yys
]->yylrState
));
2426 if (yystack
.yytops
.yysize
== 1)
2428 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
2429 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
2430 yycompressStack (&yystack
);
2436 yyrecoverSyntaxError (&yystack
]b4_user_args
[);
2437 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
2453 yyerror (]b4_lyyerror_args
[YY_("memory exhausted"));
2458 if (yychar
!= YYEMPTY
)
2459 yydestruct ("Cleanup: discarding lookahead",
2460 YYTRANSLATE (yychar
), &yylval
]b4_locuser_args([&yylloc
])[);
2462 /* If the stack is well-formed, pop the stack until it is empty,
2463 destroying its entries as we go. But free the stack regardless
2464 of whether it is well-formed. */
2465 if (yystack
.yyitems
)
2467 yyGLRState
** yystates
= yystack
.yytops
.yystates
;
2470 size_t yysize
= yystack
.yytops
.yysize
;
2472 for (yyk
= 0; yyk
< yysize
; yyk
+= 1)
2475 while (yystates
[yyk
])
2477 yyGLRState
*yys
= yystates
[yyk
];]b4_locations_if([[
2478 yystack
.yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]])[
2479 if (yys
->yypred
!= YY_NULLPTR
)
2480 yydestroyGLRState ("Cleanup: popping", yys
]b4_user_args
[);
2481 yystates
[yyk
] = yys
->yypred
;
2482 yystack
.yynextFree
-= 1;
2483 yystack
.yyspaceLeft
+= 1;
2488 yyfreeGLRStack (&yystack
);
2494 /* DEBUGGING ONLY */
2495 #if ]b4_api_PREFIX[DEBUG
2497 yy_yypstack (yyGLRState
* yys
)
2501 yy_yypstack (yys
->yypred
);
2502 YYFPRINTF (stderr
, " -> ");
2504 YYFPRINTF (stderr
, "%d@@%lu", yys
->yylrState
,
2505 (unsigned long int) yys
->yyposn
);
2509 yypstates (yyGLRState
* yyst
)
2511 if (yyst
== YY_NULLPTR
)
2512 YYFPRINTF (stderr
, "<null>");
2515 YYFPRINTF (stderr
, "\n");
2519 yypstack (yyGLRStack
* yystackp
, size_t yyk
)
2521 yypstates (yystackp
->yytops
.yystates
[yyk
]);
2524 #define YYINDEX(YYX) \
2525 ((YYX) == YY_NULLPTR ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
2529 yypdumpstack (yyGLRStack
* yystackp
)
2531 yyGLRStackItem
* yyp
;
2533 for (yyp
= yystackp
->yyitems
; yyp
< yystackp
->yynextFree
; yyp
+= 1)
2535 YYFPRINTF (stderr
, "%3lu. ",
2536 (unsigned long int) (yyp
- yystackp
->yyitems
));
2537 if (*(yybool
*) yyp
)
2539 YYASSERT (yyp
->yystate
.yyisState
);
2540 YYASSERT (yyp
->yyoption
.yyisState
);
2541 YYFPRINTF (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
2542 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
2543 (unsigned long int) yyp
->yystate
.yyposn
,
2544 (long int) YYINDEX (yyp
->yystate
.yypred
));
2545 if (! yyp
->yystate
.yyresolved
)
2546 YYFPRINTF (stderr
, ", firstVal: %ld",
2547 (long int) YYINDEX (yyp
->yystate
2548 .yysemantics
.yyfirstVal
));
2552 YYASSERT (!yyp
->yystate
.yyisState
);
2553 YYASSERT (!yyp
->yyoption
.yyisState
);
2554 YYFPRINTF (stderr
, "Option. rule: %d, state: %ld, next: %ld",
2555 yyp
->yyoption
.yyrule
- 1,
2556 (long int) YYINDEX (yyp
->yyoption
.yystate
),
2557 (long int) YYINDEX (yyp
->yyoption
.yynext
));
2559 YYFPRINTF (stderr
, "\n");
2561 YYFPRINTF (stderr
, "Tops:");
2562 for (yyi
= 0; yyi
< yystackp
->yytops
.yysize
; yyi
+= 1)
2563 YYFPRINTF (stderr
, "%lu: %ld; ", (unsigned long int) yyi
,
2564 (long int) YYINDEX (yystackp
->yytops
.yystates
[yyi
]));
2565 YYFPRINTF (stderr
, "\n");
2571 #undef yynerrs]b4_locations_if([
2574 m4_if(b4_prefix
, [yy
], [],
2575 [[/* Substitute the variable and function names. */
2576 #define yyparse ]b4_prefix[parse
2577 #define yylex ]b4_prefix[lex
2578 #define yyerror ]b4_prefix[error
2579 #define yylval ]b4_prefix[lval
2580 #define yychar ]b4_prefix[char
2581 #define yydebug ]b4_prefix[debug
2582 #define yynerrs ]b4_prefix[nerrs]b4_locations_if([[
2583 #define yylloc ]b4_prefix[lloc]])])[