3 # GLR skeleton for Bison
5 # Copyright (C) 2002-2012 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 m4_include(b4_pkgdatadir
/[c
.m4
])
23 ## ---------------- ##
25 ## ---------------- ##
28 m4_define_default([b4_stack_depth_max
], [10000])
29 m4_define_default([b4_stack_depth_init
], [200])
33 ## ------------------------ ##
34 ## Pure/impure interfaces. ##
35 ## ------------------------ ##
37 b4_define_flag_if([pure
])
38 # If glr.cc is including this file and thus has already set b4_pure_flag,
39 # do not change the value of b4_pure_flag, and do not record a use of api.pure.
40 m4_ifndef([b4_pure_flag
],
41 [b4_percent_define_default([[api
.pure
]], [[false]])
42 m4_define([b4_pure_flag
],
43 [b4_percent_define_flag_if([[api
.pure
]], [[1]], [[0]])])])
47 # The possible parse-params formal arguments preceded by a comma.
49 # This is not shared with yacc.c in c.m4 because GLR relies on ISO C
50 # formal argument declarations.
51 m4_define([b4_user_formals
],
52 [m4_ifset([b4_parse_param
], [, b4_c_ansi_formals(b4_parse_param
)])])
57 # Accumule in b4_lex_param all the yylex arguments.
58 # Yes, this is quite ugly...
59 m4_define([b4_lex_param
],
60 m4_dquote(b4_pure_if([[[[YYSTYPE
*]], [[&yylval
]]][]dnl
61 b4_locations_if([, [[YYLTYPE
*], [&yylloc
]]])])dnl
62 m4_ifdef([b4_lex_param
], [, ]b4_lex_param
)))
67 # Optional effective arguments passed to yyerror: user args plus yylloc, and
69 m4_define([b4_yyerror_args
],
70 [b4_pure_if([b4_locations_if([yylocp
, ])])dnl
71 m4_ifset([b4_parse_param
], [b4_c_args(b4_parse_param
), ])])
76 # Same as above, but on the lookahead, hence &yylloc instead of yylocp.
77 m4_define([b4_lyyerror_args
],
78 [b4_pure_if([b4_locations_if([&yylloc
, ])])dnl
79 m4_ifset([b4_parse_param
], [b4_c_args(b4_parse_param
), ])])
84 # Same as b4_yyerror_args, but with a leading comma.
85 m4_define([b4_pure_args
],
86 [b4_pure_if([b4_locations_if([, yylocp
])])[]b4_user_args
])
91 # Same as above, but on the lookahead, hence &yylloc instead of yylocp.
92 m4_define([b4_lpure_args
],
93 [b4_pure_if([b4_locations_if([, &yylloc
])])[]b4_user_args
])
99 # Arguments passed to yyerror: user formals plus yylocp with leading comma.
100 m4_define([b4_pure_formals
],
101 [b4_pure_if([b4_locations_if([, YYLTYPE
*yylocp
])])[]b4_user_formals
])
104 # b4_locuser_formals(LOC = yylocp)
105 # --------------------------------
106 m4_define([b4_locuser_formals
],
107 [b4_locations_if([, YYLTYPE
*m4_default([$
1], [yylocp
])])[]b4_user_formals
])
110 # b4_locuser_args(LOC = yylocp)
111 # -----------------------------
112 m4_define([b4_locuser_args
],
113 [b4_locations_if([, m4_default([$
1], [yylocp
])])[]b4_user_args
])
117 ## ----------------- ##
118 ## Semantic Values. ##
119 ## ----------------- ##
122 # b4_lhs_value([TYPE])
123 # --------------------
124 # Expansion of $<TYPE>$.
125 m4_define([b4_lhs_value
],
126 [((*yyvalp
)[]m4_ifval([$
1], [.$
1]))])
129 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
130 # --------------------------------------
131 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
133 m4_define([b4_rhs_value
],
134 [(((yyGLRStackItem
const *)yyvsp
)@
{YYFILL (($
2) - ($
1))@
}.yystate
.yysemantics
.yysval
[]m4_ifval([$
3], [.$
3]))])
145 m4_define([b4_lhs_location
],
149 # b4_rhs_location(RULE-LENGTH, NUM)
150 # ---------------------------------
151 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
153 m4_define([b4_rhs_location
],
154 [(((yyGLRStackItem
const *)yyvsp
)@
{YYFILL (($
2) - ($
1))@
}.yystate
.yyloc
)])
161 # b4_shared_declarations
162 # ----------------------
163 # Declaration that might either go into the header (if --defines)
164 # or open coded in the parser body.
165 m4_define([b4_shared_declarations
],
167 ]b4_percent_code_get([[requires]])[
168 ]b4_token_enums(b4_tokens
)[
169 ]b4_declare_yylstype
[
170 ]b4_c_ansi_function_decl(b4_prefix
[parse
], [int], b4_parse_param
)[
171 ]b4_percent_code_get([[provides]])[]dnl
179 # We do want M4 expansion after # for CPP macros.
182 @
output(b4_parser_file_name@
)@
183 b4_copyright([Skeleton implementation
for Bison GLR parsers in C
],
186 /* C GLR parser skeleton written by Paul Hilfinger. */
190 b4_percent_code_get([[top]])[
191 ]m4_if(b4_api_prefix
, [yy
], [],
192 [[/* Substitute the type names. */
193 #define YYSTYPE ]b4_api_PREFIX[STYPE]b4_locations_if([[
194 #define YYLTYPE ]b4_api_PREFIX[LTYPE]])])[
195 ]m4_if(b4_prefix
, [yy
], [],
196 [[/* Substitute the variable and function names. */
197 #define yyparse ]b4_prefix[parse
198 #define yylex ]b4_prefix[lex
199 #define yyerror ]b4_prefix[error
200 #define yylval ]b4_prefix[lval
201 #define yychar ]b4_prefix[char
202 #define yydebug ]b4_prefix[debug
203 #define yynerrs ]b4_prefix[nerrs]b4_locations_if([[
204 #define yylloc ]b4_prefix[lloc]])])[
206 /* Copy the first part of user declarations. */
207 ]b4_user_pre_prologue
[
211 ]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
212 [b4_shared_declarations
])[
214 /* Enabling verbose error messages. */
215 #ifdef YYERROR_VERBOSE
216 # undef YYERROR_VERBOSE
217 # define YYERROR_VERBOSE 1
219 # define YYERROR_VERBOSE ]b4_error_verbose_flag[
222 /* Default (constant) value used for initialization for null
223 right-hand sides. Unlike the standard yacc.c template,
224 here we set the default value of $$ to a zeroed-out value.
225 Since the default value is undefined, this behavior is
226 technically correct. */
227 static YYSTYPE yyval_default
;
229 /* Copy the second part of user declarations. */
230 ]b4_user_post_prologue
231 b4_percent_code_get
[]dnl
238 # if defined YYENABLE_NLS && YYENABLE_NLS
240 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
241 # define YY_(msgid) dgettext ("bison-runtime", msgid)
245 # define YY_(msgid) msgid
249 /* Suppress unused-variable warnings by "using" E. */
250 #if ! defined lint || defined __GNUC__
251 # define YYUSE(e) ((void) (e))
253 # define YYUSE(e) /* empty */
256 /* Identity function, used to suppress warnings about constant conditions. */
260 ]b4_c_function_def([YYID
], [static int], [[int i
], [i
]])[
270 # define YYMALLOC malloc
273 # define YYREALLOC realloc
276 #define YYSIZEMAX ((size_t) -1)
281 typedef unsigned char yybool
;
288 # define YYJMP_BUF jmp_buf
289 # define YYSETJMP(env) setjmp (env)
290 # define YYLONGJMP(env, val) longjmp (env, val)
297 #ifndef __attribute__
298 /* This feature is available in gcc versions 2.5 and later. */
299 # if (! defined __GNUC__ || __GNUC__ < 2 \
300 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
301 # define __attribute__(Spec) /* empty */
305 ]b4_locations_if([#define YYOPTIONAL_LOC(Name) Name],[
307 # define YYOPTIONAL_LOC(Name) /* empty */
309 # define YYOPTIONAL_LOC(Name) Name __attribute__ ((__unused__))
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 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
351 static const ]b4_int_type_for([b4_prhs
])[ yyprhs
[] =
356 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
357 static const ]b4_int_type_for([b4_rhs
])[ yyrhs
[] =
362 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
363 static const ]b4_int_type_for([b4_rline
])[ yyrline
[] =
369 #if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
370 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
371 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
372 static const char *const yytname
[] =
378 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
379 static const ]b4_int_type_for([b4_r1
])[ yyr1
[] =
384 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
385 static const ]b4_int_type_for([b4_r2
])[ yyr2
[] =
390 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
391 static const ]b4_int_type_for([b4_dprec
])[ yydprec
[] =
396 /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
397 static const ]b4_int_type_for([b4_merger
])[ yymerger
[] =
402 /* YYDEFACT[S] -- default reduction number in state S. Performed when
403 YYTABLE doesn't specify something else to do. Zero means the default
405 static const ]b4_int_type_for([b4_defact
])[ yydefact
[] =
410 /* YYPDEFGOTO[NTERM-NUM]. */
411 static const ]b4_int_type_for([b4_defgoto
])[ yydefgoto
[] =
416 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
418 #define YYPACT_NINF ]b4_pact_ninf[
419 static const ]b4_int_type_for([b4_pact
])[ yypact
[] =
424 /* YYPGOTO[NTERM-NUM]. */
425 static const ]b4_int_type_for([b4_pgoto
])[ yypgoto
[] =
430 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
431 positive, shift that token. If negative, reduce the rule which
432 number is the opposite. If YYTABLE_NINF, syntax error. */
433 #define YYTABLE_NINF ]b4_table_ninf[
434 static const ]b4_int_type_for([b4_table
])[ yytable
[] =
439 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
440 list of conflicting reductions corresponding to action entry for
441 state STATE-NUM in yytable. 0 means no conflicts. The list in
442 yyconfl is terminated by a rule number of 0. */
443 static const ]b4_int_type_for([b4_conflict_list_heads
])[ yyconflp
[] =
445 ]b4_conflict_list_heads
[
448 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
449 0, pointed into by YYCONFLP. */
450 ]dnl Do
not use b4_int_type_for here
, since there are places where
451 dnl pointers onto yyconfl are taken
, which type is
"short int *".
452 dnl We probably ought to introduce a type
for confl
.
453 [static const short int yyconfl
[] =
455 ]b4_conflicting_rules
[
458 static const ]b4_int_type_for([b4_check
])[ yycheck
[] =
463 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
464 symbol of state STATE-NUM. */
465 static const ]b4_int_type_for([b4_stos
])[ yystos
[] =
470 /* Error token number */
474 #ifndef YYLLOC_DEFAULT
475 ]b4_yylloc_default_define
[
476 # define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
478 /* YY_LOCATION_PRINT -- Print the location on the stream.
479 This macro was not mandated originally: define only if we know
480 we won't break user code: when these are the locations we know. */
482 # define YY_LOCATION_PRINT(File, Loc) \
483 fprintf (File, "%d.%d-%d.%d", \
484 (Loc).first_line, (Loc).first_column, \
485 (Loc).last_line, (Loc).last_column)
488 #ifndef YYLLOC_DEFAULT
489 # define YYLLOC_DEFAULT(Current, Rhs, N) ((void) 0)
493 #ifndef YY_LOCATION_PRINT
494 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
498 /* YYLEX -- calling `yylex' with the right arguments. */
499 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
504 #define yynerrs (yystackp->yyerrcnt)
506 #define yychar (yystackp->yyrawchar)
508 #define yylval (yystackp->yyval)
510 #define yylloc (yystackp->yyloc)
511 m4_if(b4_prefix
[], [yy
], [],
512 [#define b4_prefix[]nerrs yynerrs
513 #define b4_prefix[]char yychar
514 #define b4_prefix[]lval yylval
515 #define b4_prefix[]lloc yylloc])],
516 [YYSTYPE yylval
;]b4_locations_if([[
522 static const int YYEOF
= 0;
523 static const int YYEMPTY
= -2;
525 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
528 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
531 #if ]b4_api_PREFIX[DEBUG
534 # define YYFPRINTF fprintf
537 # define YYDPRINTF(Args) \
543 ]b4_yy_symbol_print_generate([b4_c_ansi_function_def
])[
545 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
549 YYFPRINTF (stderr, "%s ", Title); \
550 yy_symbol_print (stderr, Type, Value]b4_locuser_args([Location])[); \
551 YYFPRINTF (stderr, "\n"); \
555 /* Nonzero means print parse trace. It is left uninitialized so that
556 multiple parsers can coexist. */
559 #else /* !]b4_api_PREFIX[DEBUG */
561 # define YYDPRINTF(Args)
562 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
564 #endif /* !]b4_api_PREFIX[DEBUG */
566 /* YYINITDEPTH -- initial size of the parser's stacks. */
568 # define YYINITDEPTH ]b4_stack_depth_init[
571 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
572 if the built-in stack extension method is used).
574 Do not make this value too large; the results are undefined if
575 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
576 evaluated with infinite-precision integer arithmetic. */
579 # define YYMAXDEPTH ]b4_stack_depth_max[
582 /* Minimum number of free items on the stack allowed after an
583 allocation. This is to allow allocation and initialization
584 to be completed by functions that call yyexpandGLRStack before the
585 stack is expanded, thus insuring that all necessary pointers get
586 properly redirected to new data. */
589 #ifndef YYSTACKEXPANDABLE
590 # if (! defined __cplusplus \
591 || (]b4_locations_if([[defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL \
592 && ]])[defined ]b4_api_PREFIX[STYPE_IS_TRIVIAL && ]b4_api_PREFIX[STYPE_IS_TRIVIAL))
593 # define YYSTACKEXPANDABLE 1
595 # define YYSTACKEXPANDABLE 0
599 #if YYSTACKEXPANDABLE
600 # define YY_RESERVE_GLRSTACK(Yystack) \
602 if (Yystack->yyspaceLeft < YYHEADROOM) \
603 yyexpandGLRStack (Yystack); \
606 # define YY_RESERVE_GLRSTACK(Yystack) \
608 if (Yystack->yyspaceLeft < YYHEADROOM) \
609 yyMemoryExhausted (Yystack); \
617 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
618 # define yystpcpy stpcpy
620 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
623 yystpcpy (char *yydest
, const char *yysrc
)
626 const char *yys
= yysrc
;
628 while ((*yyd
++ = *yys
++) != '\0')
637 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
638 quotes and backslashes, so that it's suitable for yyerror. The
639 heuristic is that double-quoting is unnecessary unless the string
640 contains an apostrophe, a comma, or backslash (other than
641 backslash-backslash). YYSTR is taken from yytname. If YYRES is
642 null, do not copy; instead, return the length of what the result
645 yytnamerr (char *yyres
, const char *yystr
)
650 char const *yyp
= yystr
;
657 goto do_not_strip_quotes
;
661 goto do_not_strip_quotes
;
674 do_not_strip_quotes
: ;
678 return strlen (yystr
);
680 return yystpcpy (yyres
, yystr
) - yyres
;
684 #endif /* !YYERROR_VERBOSE */
686 /** State numbers, as in LALR(1) machine */
687 typedef int yyStateNum
;
689 /** Rule numbers, as in LALR(1) machine */
690 typedef int yyRuleNum
;
692 /** Grammar symbol */
693 typedef short int yySymbol
;
695 /** Item references, as in LALR(1) machine */
696 typedef short int yyItemNum
;
698 typedef struct yyGLRState yyGLRState
;
699 typedef struct yyGLRStateSet yyGLRStateSet
;
700 typedef struct yySemanticOption yySemanticOption
;
701 typedef union yyGLRStackItem yyGLRStackItem
;
702 typedef struct yyGLRStack yyGLRStack
;
705 /** Type tag: always true. */
707 /** Type tag for yysemantics. If true, yysval applies, otherwise
708 * yyfirstVal applies. */
710 /** Number of corresponding LALR(1) machine state. */
711 yyStateNum yylrState
;
712 /** Preceding state in this stack */
714 /** Source position of the first token produced by my symbol */
717 /** First in a chain of alternative reductions producing the
718 * non-terminal corresponding to this state, threaded through
720 yySemanticOption
* yyfirstVal
;
721 /** Semantic value for this state. */
723 } yysemantics
;]b4_locations_if([[
724 /** Source location for this state. */
728 struct yyGLRStateSet
{
729 yyGLRState
** yystates
;
730 /** During nondeterministic operation, yylookaheadNeeds tracks which
731 * stacks have actually needed the current lookahead. During deterministic
732 * operation, yylookaheadNeeds[0] is not maintained since it would merely
733 * duplicate yychar != YYEMPTY. */
734 yybool
* yylookaheadNeeds
;
735 size_t yysize
, yycapacity
;
738 struct yySemanticOption
{
739 /** Type tag: always false. */
741 /** Rule number for this reduction */
743 /** The last RHS state in the list of states to be reduced. */
745 /** The lookahead for this reduction. */
747 YYSTYPE yyval
;]b4_locations_if([[
749 /** Next sibling in chain of options. To facilitate merging,
750 * options are chained in decreasing order by address. */
751 yySemanticOption
* yynext
;
754 /** Type of the items in the GLR stack. The yyisState field
755 * indicates which item of the union is valid. */
756 union yyGLRStackItem
{
758 yySemanticOption yyoption
;
763 ]b4_locations_if([[ /* To compute the location of the error token. */
764 yyGLRStackItem yyerror_range
[3];]])[
769 YYSTYPE yyval
;]b4_locations_if([[
772 YYJMP_BUF yyexception_buffer
;
773 yyGLRStackItem
* yyitems
;
774 yyGLRStackItem
* yynextFree
;
776 yyGLRState
* yysplitPoint
;
777 yyGLRState
* yylastDeleted
;
778 yyGLRStateSet yytops
;
781 #if YYSTACKEXPANDABLE
782 static void yyexpandGLRStack (yyGLRStack
* yystackp
);
785 static void yyFail (yyGLRStack
* yystackp
]b4_pure_formals
[, const char* yymsg
)
786 __attribute__ ((__noreturn__
));
788 yyFail (yyGLRStack
* yystackp
]b4_pure_formals
[, const char* yymsg
)
790 if (yymsg
!= YY_NULL
)
791 yyerror (]b4_yyerror_args
[yymsg
);
792 YYLONGJMP (yystackp
->yyexception_buffer
, 1);
795 static void yyMemoryExhausted (yyGLRStack
* yystackp
)
796 __attribute__ ((__noreturn__
));
798 yyMemoryExhausted (yyGLRStack
* yystackp
)
800 YYLONGJMP (yystackp
->yyexception_buffer
, 2);
803 #if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE
804 /** A printable representation of TOKEN. */
805 static inline const char*
806 yytokenName (yySymbol yytoken
)
808 if (yytoken
== YYEMPTY
)
811 return yytname
[yytoken
];
815 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
816 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
817 * containing the pointer to the next state in the chain. */
818 static void yyfillin (yyGLRStackItem
*, int, int) __attribute__ ((__unused__
));
820 yyfillin (yyGLRStackItem
*yyvsp
, int yylow0
, int yylow1
)
823 yyGLRState
*s
= yyvsp
[yylow0
].yystate
.yypred
;
824 for (i
= yylow0
-1; i
>= yylow1
; i
-= 1)
826 YYASSERT (s
->yyresolved
);
827 yyvsp
[i
].yystate
.yyresolved
= yytrue
;
828 yyvsp
[i
].yystate
.yysemantics
.yysval
= s
->yysemantics
.yysval
;]b4_locations_if([[
829 yyvsp
[i
].yystate
.yyloc
= s
->yyloc
;]])[
830 s
= yyvsp
[i
].yystate
.yypred
= s
->yypred
;
834 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
835 * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
836 * For convenience, always return YYLOW1. */
837 static inline int yyfill (yyGLRStackItem
*, int *, int, yybool
)
838 __attribute__ ((__unused__
));
840 yyfill (yyGLRStackItem
*yyvsp
, int *yylow
, int yylow1
, yybool yynormal
)
842 if (!yynormal
&& yylow1
< *yylow
)
844 yyfillin (yyvsp
, *yylow
, yylow1
);
850 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
851 * and top stack item YYVSP. YYLVALP points to place to put semantic
852 * value ($$), and yylocp points to place for location information
853 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
854 * yyerr for YYERROR, yyabort for YYABORT. */
855 /*ARGSUSED*/ static YYRESULTTAG
856 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
857 yyGLRStack
* yystackp
,
858 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
860 yybool yynormal
__attribute__ ((__unused__
)) =
861 (yystackp
->yysplitPoint
== YY_NULL
);
863 ]b4_parse_param_use
[]dnl
865 # define yyerrok (yystackp->yyerrState = 0)
867 # define YYACCEPT return yyaccept
869 # define YYABORT return yyabort
871 # define YYERROR return yyerrok, yyerr
873 # define YYRECOVERING() (yystackp->yyerrState != 0)
875 # define yyclearin (yychar = YYEMPTY)
877 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
879 # define YYBACKUP(Token, Value) \
880 return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")), \
885 *yyvalp
= yyval_default
;
887 *yyvalp
= yyvsp
[YYFILL (1-yyrhslen
)].yystate
.yysemantics
.yysval
;]b4_locations_if([[
888 YYLLOC_DEFAULT ((*yylocp
), (yyvsp
- yyrhslen
), yyrhslen
);
889 yystackp
->yyerror_range
[1].yystate
.yyloc
= *yylocp
;
908 /*ARGSUSED*/ static void
909 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
921 /* Bison grammar-table manipulation. */
923 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
925 /** Number of symbols composing the right hand side of rule #RULE. */
927 yyrhsLength (yyRuleNum yyrule
)
933 yydestroyGLRState (char const *yymsg
, yyGLRState
*yys
]b4_user_formals
[)
936 yydestruct (yymsg
, yystos
[yys
->yylrState
],
937 &yys
->yysemantics
.yysval
]b4_locuser_args([&yys
->yyloc
])[);
940 #if ]b4_api_PREFIX[DEBUG
943 if (yys
->yysemantics
.yyfirstVal
)
944 YYFPRINTF (stderr
, "%s unresolved ", yymsg
);
946 YYFPRINTF (stderr
, "%s incomplete ", yymsg
);
947 yy_symbol_print (stderr
, yystos
[yys
->yylrState
],
948 YY_NULL
]b4_locuser_args([&yys
->yyloc
])[);
949 YYFPRINTF (stderr
, "\n");
953 if (yys
->yysemantics
.yyfirstVal
)
955 yySemanticOption
*yyoption
= yys
->yysemantics
.yyfirstVal
;
958 for (yyrh
= yyoption
->yystate
, yyn
= yyrhsLength (yyoption
->yyrule
);
960 yyrh
= yyrh
->yypred
, yyn
-= 1)
961 yydestroyGLRState (yymsg
, yyrh
]b4_user_args
[);
966 /** Left-hand-side symbol for rule #RULE. */
967 static inline yySymbol
968 yylhsNonterm (yyRuleNum yyrule
)
973 #define yypact_value_is_default(yystate) \
974 ]b4_table_value_equals([[pact]], [[yystate]], [b4_pact_ninf])[
976 /** True iff LR state STATE has only a default reduction (regardless
979 yyisDefaultedState (yyStateNum yystate
)
981 return yypact_value_is_default (yypact
[yystate
]);
984 /** The default reduction for STATE, assuming it has one. */
985 static inline yyRuleNum
986 yydefaultAction (yyStateNum yystate
)
988 return yydefact
[yystate
];
991 #define yytable_value_is_error(yytable_value) \
992 ]b4_table_value_equals([[table]], [[yytable_value]], [b4_table_ninf])[
994 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
996 * R < 0: Reduce on rule -R.
998 * R > 0: Shift to state R.
999 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
1000 * conflicting reductions.
1003 yygetLRActions (yyStateNum yystate
, int yytoken
,
1004 int* yyaction
, const short int** yyconflicts
)
1006 int yyindex
= yypact
[yystate
] + yytoken
;
1007 if (yypact_value_is_default (yypact
[yystate
])
1008 || yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
1010 *yyaction
= -yydefact
[yystate
];
1011 *yyconflicts
= yyconfl
;
1013 else if (! yytable_value_is_error (yytable
[yyindex
]))
1015 *yyaction
= yytable
[yyindex
];
1016 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
1021 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
1025 static inline yyStateNum
1026 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
1029 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
1030 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
1031 return yytable
[yyr
];
1033 return yydefgoto
[yylhs
- YYNTOKENS
];
1036 static inline yybool
1037 yyisShiftAction (int yyaction
)
1039 return 0 < yyaction
;
1042 static inline yybool
1043 yyisErrorAction (int yyaction
)
1045 return yyaction
== 0;
1050 /** Return a fresh GLRStackItem. Callers should call
1051 * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
1054 static inline yyGLRStackItem
*
1055 yynewGLRStackItem (yyGLRStack
* yystackp
, yybool yyisState
)
1057 yyGLRStackItem
* yynewItem
= yystackp
->yynextFree
;
1058 yystackp
->yyspaceLeft
-= 1;
1059 yystackp
->yynextFree
+= 1;
1060 yynewItem
->yystate
.yyisState
= yyisState
;
1064 /** Add a new semantic action that will execute the action for rule
1065 * RULENUM on the semantic values in RHS to the list of
1066 * alternative actions for STATE. Assumes that RHS comes from
1067 * stack #K of *STACKP. */
1069 yyaddDeferredAction (yyGLRStack
* yystackp
, size_t yyk
, yyGLRState
* yystate
,
1070 yyGLRState
* rhs
, yyRuleNum yyrule
)
1072 yySemanticOption
* yynewOption
=
1073 &yynewGLRStackItem (yystackp
, yyfalse
)->yyoption
;
1074 yynewOption
->yystate
= rhs
;
1075 yynewOption
->yyrule
= yyrule
;
1076 if (yystackp
->yytops
.yylookaheadNeeds
[yyk
])
1078 yynewOption
->yyrawchar
= yychar
;
1079 yynewOption
->yyval
= yylval
;]b4_locations_if([
1080 yynewOption
->yyloc
= yylloc
;])[
1083 yynewOption
->yyrawchar
= YYEMPTY
;
1084 yynewOption
->yynext
= yystate
->yysemantics
.yyfirstVal
;
1085 yystate
->yysemantics
.yyfirstVal
= yynewOption
;
1087 YY_RESERVE_GLRSTACK (yystackp
);
1092 /** Initialize SET to a singleton set containing an empty stack. */
1094 yyinitStateSet (yyGLRStateSet
* yyset
)
1097 yyset
->yycapacity
= 16;
1098 yyset
->yystates
= (yyGLRState
**) YYMALLOC (16 * sizeof yyset
->yystates
[0]);
1099 if (! yyset
->yystates
)
1101 yyset
->yystates
[0] = YY_NULL
;
1102 yyset
->yylookaheadNeeds
=
1103 (yybool
*) YYMALLOC (16 * sizeof yyset
->yylookaheadNeeds
[0]);
1104 if (! yyset
->yylookaheadNeeds
)
1106 YYFREE (yyset
->yystates
);
1112 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
1114 YYFREE (yyset
->yystates
);
1115 YYFREE (yyset
->yylookaheadNeeds
);
1118 /** Initialize STACK to a single empty stack, with total maximum
1119 * capacity for all stacks of SIZE. */
1121 yyinitGLRStack (yyGLRStack
* yystackp
, size_t yysize
)
1123 yystackp
->yyerrState
= 0;
1125 yystackp
->yyspaceLeft
= yysize
;
1127 (yyGLRStackItem
*) YYMALLOC (yysize
* sizeof yystackp
->yynextFree
[0]);
1128 if (!yystackp
->yyitems
)
1130 yystackp
->yynextFree
= yystackp
->yyitems
;
1131 yystackp
->yysplitPoint
= YY_NULL
;
1132 yystackp
->yylastDeleted
= YY_NULL
;
1133 return yyinitStateSet (&yystackp
->yytops
);
1137 #if YYSTACKEXPANDABLE
1138 # define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
1139 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
1141 /** If STACK is expandable, extend it. WARNING: Pointers into the
1142 stack from outside should be considered invalid after this call.
1143 We always expand when there are 1 or fewer items left AFTER an
1144 allocation, so that we can avoid having external pointers exist
1145 across an allocation. */
1147 yyexpandGLRStack (yyGLRStack
* yystackp
)
1149 yyGLRStackItem
* yynewItems
;
1150 yyGLRStackItem
* yyp0
, *yyp1
;
1153 size_t yysize
= yystackp
->yynextFree
- yystackp
->yyitems
;
1154 if (YYMAXDEPTH
- YYHEADROOM
< yysize
)
1155 yyMemoryExhausted (yystackp
);
1156 yynewSize
= 2*yysize
;
1157 if (YYMAXDEPTH
< yynewSize
)
1158 yynewSize
= YYMAXDEPTH
;
1159 yynewItems
= (yyGLRStackItem
*) YYMALLOC (yynewSize
* sizeof yynewItems
[0]);
1161 yyMemoryExhausted (yystackp
);
1162 for (yyp0
= yystackp
->yyitems
, yyp1
= yynewItems
, yyn
= yysize
;
1164 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
1167 if (*(yybool
*) yyp0
)
1169 yyGLRState
* yys0
= &yyp0
->yystate
;
1170 yyGLRState
* yys1
= &yyp1
->yystate
;
1171 if (yys0
->yypred
!= YY_NULL
)
1173 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
1174 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= YY_NULL
)
1175 yys1
->yysemantics
.yyfirstVal
=
1176 YYRELOC (yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
1180 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
1181 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
1182 if (yyv0
->yystate
!= YY_NULL
)
1183 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
1184 if (yyv0
->yynext
!= YY_NULL
)
1185 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
1188 if (yystackp
->yysplitPoint
!= YY_NULL
)
1189 yystackp
->yysplitPoint
= YYRELOC (yystackp
->yyitems
, yynewItems
,
1190 yystackp
->yysplitPoint
, yystate
);
1192 for (yyn
= 0; yyn
< yystackp
->yytops
.yysize
; yyn
+= 1)
1193 if (yystackp
->yytops
.yystates
[yyn
] != YY_NULL
)
1194 yystackp
->yytops
.yystates
[yyn
] =
1195 YYRELOC (yystackp
->yyitems
, yynewItems
,
1196 yystackp
->yytops
.yystates
[yyn
], yystate
);
1197 YYFREE (yystackp
->yyitems
);
1198 yystackp
->yyitems
= yynewItems
;
1199 yystackp
->yynextFree
= yynewItems
+ yysize
;
1200 yystackp
->yyspaceLeft
= yynewSize
- yysize
;
1205 yyfreeGLRStack (yyGLRStack
* yystackp
)
1207 YYFREE (yystackp
->yyitems
);
1208 yyfreeStateSet (&yystackp
->yytops
);
1211 /** Assuming that S is a GLRState somewhere on STACK, update the
1212 * splitpoint of STACK, if needed, so that it is at least as deep as
1215 yyupdateSplit (yyGLRStack
* yystackp
, yyGLRState
* yys
)
1217 if (yystackp
->yysplitPoint
!= YY_NULL
&& yystackp
->yysplitPoint
> yys
)
1218 yystackp
->yysplitPoint
= yys
;
1221 /** Invalidate stack #K in STACK. */
1223 yymarkStackDeleted (yyGLRStack
* yystackp
, size_t yyk
)
1225 if (yystackp
->yytops
.yystates
[yyk
] != YY_NULL
)
1226 yystackp
->yylastDeleted
= yystackp
->yytops
.yystates
[yyk
];
1227 yystackp
->yytops
.yystates
[yyk
] = YY_NULL
;
1230 /** Undelete the last stack that was marked as deleted. Can only be
1231 done once after a deletion, and only when all other stacks have
1234 yyundeleteLastStack (yyGLRStack
* yystackp
)
1236 if (yystackp
->yylastDeleted
== YY_NULL
|| yystackp
->yytops
.yysize
!= 0)
1238 yystackp
->yytops
.yystates
[0] = yystackp
->yylastDeleted
;
1239 yystackp
->yytops
.yysize
= 1;
1240 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1241 yystackp
->yylastDeleted
= YY_NULL
;
1245 yyremoveDeletes (yyGLRStack
* yystackp
)
1249 while (yyj
< yystackp
->yytops
.yysize
)
1251 if (yystackp
->yytops
.yystates
[yyi
] == YY_NULL
)
1255 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1257 yystackp
->yytops
.yysize
-= 1;
1261 yystackp
->yytops
.yystates
[yyj
] = yystackp
->yytops
.yystates
[yyi
];
1262 /* In the current implementation, it's unnecessary to copy
1263 yystackp->yytops.yylookaheadNeeds[yyi] since, after
1264 yyremoveDeletes returns, the parser immediately either enters
1265 deterministic operation or shifts a token. However, it doesn't
1266 hurt, and the code might evolve to need it. */
1267 yystackp
->yytops
.yylookaheadNeeds
[yyj
] =
1268 yystackp
->yytops
.yylookaheadNeeds
[yyi
];
1271 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1272 (unsigned long int) yyi
, (unsigned long int) yyj
));
1280 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1281 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1283 yyglrShift (yyGLRStack
* yystackp
, size_t yyk
, yyStateNum yylrState
,
1285 YYSTYPE
* yyvalp
]b4_locations_if([, YYLTYPE
* yylocp
])[)
1287 yyGLRState
* yynewState
= &yynewGLRStackItem (yystackp
, yytrue
)->yystate
;
1289 yynewState
->yylrState
= yylrState
;
1290 yynewState
->yyposn
= yyposn
;
1291 yynewState
->yyresolved
= yytrue
;
1292 yynewState
->yypred
= yystackp
->yytops
.yystates
[yyk
];
1293 yynewState
->yysemantics
.yysval
= *yyvalp
;]b4_locations_if([
1294 yynewState
->yyloc
= *yylocp
;])[
1295 yystackp
->yytops
.yystates
[yyk
] = yynewState
;
1297 YY_RESERVE_GLRSTACK (yystackp
);
1300 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1301 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1302 * semantic value of YYRHS under the action for YYRULE. */
1304 yyglrShiftDefer (yyGLRStack
* yystackp
, size_t yyk
, yyStateNum yylrState
,
1305 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
)
1307 yyGLRState
* yynewState
= &yynewGLRStackItem (yystackp
, yytrue
)->yystate
;
1309 yynewState
->yylrState
= yylrState
;
1310 yynewState
->yyposn
= yyposn
;
1311 yynewState
->yyresolved
= yyfalse
;
1312 yynewState
->yypred
= yystackp
->yytops
.yystates
[yyk
];
1313 yynewState
->yysemantics
.yyfirstVal
= YY_NULL
;
1314 yystackp
->yytops
.yystates
[yyk
] = yynewState
;
1316 /* Invokes YY_RESERVE_GLRSTACK. */
1317 yyaddDeferredAction (yystackp
, yyk
, yynewState
, rhs
, yyrule
);
1320 /** Pop the symbols consumed by reduction #RULE from the top of stack
1321 * #K of STACK, and perform the appropriate semantic action on their
1322 * semantic values. Assumes that all ambiguities in semantic values
1323 * have been previously resolved. Set *VALP to the resulting value,
1324 * and *LOCP to the computed location (if any). Return value is as
1325 * for userAction. */
1326 static inline YYRESULTTAG
1327 yydoAction (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1328 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
1330 int yynrhs
= yyrhsLength (yyrule
);
1332 if (yystackp
->yysplitPoint
== YY_NULL
)
1334 /* Standard special case: single stack. */
1335 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystackp
->yytops
.yystates
[yyk
];
1336 YYASSERT (yyk
== 0);
1337 yystackp
->yynextFree
-= yynrhs
;
1338 yystackp
->yyspaceLeft
+= yynrhs
;
1339 yystackp
->yytops
.yystates
[0] = & yystackp
->yynextFree
[-1].yystate
;
1340 return yyuserAction (yyrule
, yynrhs
, rhs
, yystackp
,
1341 yyvalp
]b4_locuser_args
[);
1345 /* At present, doAction is never called in nondeterministic
1346 * mode, so this branch is never taken. It is here in
1347 * anticipation of a future feature that will allow immediate
1348 * evaluation of selected actions in nondeterministic mode. */
1351 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1352 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1353 = yystackp
->yytops
.yystates
[yyk
];]b4_locations_if([[
1355 /* Set default location. */
1356 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
- 1].yystate
.yyloc
= yys
->yyloc
;]])[
1357 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1362 yyupdateSplit (yystackp
, yys
);
1363 yystackp
->yytops
.yystates
[yyk
] = yys
;
1364 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1365 yystackp
, yyvalp
]b4_locuser_args
[);
1369 #if !]b4_api_PREFIX[DEBUG
1370 # define YY_REDUCE_PRINT(Args)
1372 # define YY_REDUCE_PRINT(Args) \
1375 yy_reduce_print Args; \
1378 /*----------------------------------------------------------.
1379 | Report that the RULE is going to be reduced on stack #K. |
1380 `----------------------------------------------------------*/
1382 /*ARGSUSED*/ static inline void
1383 yy_reduce_print (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1384 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
1386 int yynrhs
= yyrhsLength (yyrule
);
1387 yybool yynormal
__attribute__ ((__unused__
)) =
1388 (yystackp
->yysplitPoint
== YY_NULL
);
1389 yyGLRStackItem
* yyvsp
= (yyGLRStackItem
*) yystackp
->yytops
.yystates
[yyk
];
1392 YYUSE (yyvalp
);]b4_locations_if([
1394 ]b4_parse_param_use
[]dnl
1395 [ YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu):\n",
1396 (unsigned long int) yyk
, yyrule
- 1,
1397 (unsigned long int) yyrline
[yyrule
]);
1398 /* The symbols being reduced. */
1399 for (yyi
= 0; yyi
< yynrhs
; yyi
++)
1401 YYFPRINTF (stderr
, " $%d = ", yyi
+ 1);
1402 yy_symbol_print (stderr
, yyrhs
[yyprhs
[yyrule
] + yyi
],
1403 &]b4_rhs_value(yynrhs
, yyi
+ 1)[
1404 ]b4_locations_if([, &]b4_rhs_location(yynrhs
, yyi
+ 1))[]dnl
1406 YYFPRINTF (stderr
, "\n");
1411 /** Pop items off stack #K of STACK according to grammar rule RULE,
1412 * and push back on the resulting nonterminal symbol. Perform the
1413 * semantic action associated with RULE and store its value with the
1414 * newly pushed state, if FORCEEVAL or if STACK is currently
1415 * unambiguous. Otherwise, store the deferred semantic action with
1416 * the new state. If the new state would have an identical input
1417 * position, LR state, and predecessor to an existing state on the stack,
1418 * it is identified with that existing state, eliminating stack #K from
1419 * the STACK. In this case, the (necessarily deferred) semantic value is
1420 * added to the options for the existing state's semantic value.
1422 static inline YYRESULTTAG
1423 yyglrReduce (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1424 yybool yyforceEval
]b4_user_formals
[)
1426 size_t yyposn
= yystackp
->yytops
.yystates
[yyk
]->yyposn
;
1428 if (yyforceEval
|| yystackp
->yysplitPoint
== YY_NULL
)
1430 YYSTYPE yysval
;]b4_locations_if([
1433 YY_REDUCE_PRINT ((yystackp
, yyk
, yyrule
, &yysval
]b4_locuser_args([&yyloc
])[));
1434 YYCHK (yydoAction (yystackp
, yyk
, yyrule
, &yysval
]b4_locuser_args([&yyloc
])[));
1435 YY_SYMBOL_PRINT ("-> $$ =", yyr1
[yyrule
], &yysval
, &yyloc
);
1436 yyglrShift (yystackp
, yyk
,
1437 yyLRgotoState (yystackp
->yytops
.yystates
[yyk
]->yylrState
,
1438 yylhsNonterm (yyrule
)),
1439 yyposn
, &yysval
]b4_locations_if([, &yyloc
])[);
1445 yyGLRState
* yys
, *yys0
= yystackp
->yytops
.yystates
[yyk
];
1446 yyStateNum yynewLRState
;
1448 for (yys
= yystackp
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1454 yyupdateSplit (yystackp
, yys
);
1455 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1457 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
1458 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1459 for (yyi
= 0; yyi
< yystackp
->yytops
.yysize
; yyi
+= 1)
1460 if (yyi
!= yyk
&& yystackp
->yytops
.yystates
[yyi
] != YY_NULL
)
1462 yyGLRState
*yysplit
= yystackp
->yysplitPoint
;
1463 yyGLRState
*yyp
= yystackp
->yytops
.yystates
[yyi
];
1464 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1466 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1468 yyaddDeferredAction (yystackp
, yyk
, yyp
, yys0
, yyrule
);
1469 yymarkStackDeleted (yystackp
, yyk
);
1470 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1471 (unsigned long int) yyk
,
1472 (unsigned long int) yyi
));
1478 yystackp
->yytops
.yystates
[yyk
] = yys
;
1479 yyglrShiftDefer (yystackp
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
);
1485 yysplitStack (yyGLRStack
* yystackp
, size_t yyk
)
1487 if (yystackp
->yysplitPoint
== YY_NULL
)
1489 YYASSERT (yyk
== 0);
1490 yystackp
->yysplitPoint
= yystackp
->yytops
.yystates
[yyk
];
1492 if (yystackp
->yytops
.yysize
>= yystackp
->yytops
.yycapacity
)
1494 yyGLRState
** yynewStates
;
1495 yybool
* yynewLookaheadNeeds
;
1497 yynewStates
= YY_NULL
;
1499 if (yystackp
->yytops
.yycapacity
1500 > (YYSIZEMAX
/ (2 * sizeof yynewStates
[0])))
1501 yyMemoryExhausted (yystackp
);
1502 yystackp
->yytops
.yycapacity
*= 2;
1505 (yyGLRState
**) YYREALLOC (yystackp
->yytops
.yystates
,
1506 (yystackp
->yytops
.yycapacity
1507 * sizeof yynewStates
[0]));
1508 if (yynewStates
== YY_NULL
)
1509 yyMemoryExhausted (yystackp
);
1510 yystackp
->yytops
.yystates
= yynewStates
;
1512 yynewLookaheadNeeds
=
1513 (yybool
*) YYREALLOC (yystackp
->yytops
.yylookaheadNeeds
,
1514 (yystackp
->yytops
.yycapacity
1515 * sizeof yynewLookaheadNeeds
[0]));
1516 if (yynewLookaheadNeeds
== YY_NULL
)
1517 yyMemoryExhausted (yystackp
);
1518 yystackp
->yytops
.yylookaheadNeeds
= yynewLookaheadNeeds
;
1520 yystackp
->yytops
.yystates
[yystackp
->yytops
.yysize
]
1521 = yystackp
->yytops
.yystates
[yyk
];
1522 yystackp
->yytops
.yylookaheadNeeds
[yystackp
->yytops
.yysize
]
1523 = yystackp
->yytops
.yylookaheadNeeds
[yyk
];
1524 yystackp
->yytops
.yysize
+= 1;
1525 return yystackp
->yytops
.yysize
-1;
1528 /** True iff Y0 and Y1 represent identical options at the top level.
1529 * That is, they represent the same rule applied to RHS symbols
1530 * that produce the same terminal symbols. */
1532 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1534 if (yyy0
->yyrule
== yyy1
->yyrule
)
1536 yyGLRState
*yys0
, *yys1
;
1538 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1539 yyn
= yyrhsLength (yyy0
->yyrule
);
1541 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1542 if (yys0
->yyposn
!= yys1
->yyposn
)
1550 /** Assuming identicalOptions (Y0,Y1), destructively merge the
1551 * alternative semantic values for the RHS-symbols of Y1 and Y0. */
1553 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1555 yyGLRState
*yys0
, *yys1
;
1557 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1558 yyn
= yyrhsLength (yyy0
->yyrule
);
1560 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1564 else if (yys0
->yyresolved
)
1566 yys1
->yyresolved
= yytrue
;
1567 yys1
->yysemantics
.yysval
= yys0
->yysemantics
.yysval
;
1569 else if (yys1
->yyresolved
)
1571 yys0
->yyresolved
= yytrue
;
1572 yys0
->yysemantics
.yysval
= yys1
->yysemantics
.yysval
;
1576 yySemanticOption
** yyz0p
= &yys0
->yysemantics
.yyfirstVal
;
1577 yySemanticOption
* yyz1
= yys1
->yysemantics
.yyfirstVal
;
1578 while (YYID (yytrue
))
1580 if (yyz1
== *yyz0p
|| yyz1
== YY_NULL
)
1582 else if (*yyz0p
== YY_NULL
)
1587 else if (*yyz0p
< yyz1
)
1589 yySemanticOption
* yyz
= *yyz0p
;
1591 yyz1
= yyz1
->yynext
;
1592 (*yyz0p
)->yynext
= yyz
;
1594 yyz0p
= &(*yyz0p
)->yynext
;
1596 yys1
->yysemantics
.yyfirstVal
= yys0
->yysemantics
.yyfirstVal
;
1601 /** Y0 and Y1 represent two possible actions to take in a given
1602 * parsing state; return 0 if no combination is possible,
1603 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1605 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1607 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1608 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1612 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1617 if (p0
== 0 || p1
== 0)
1626 static YYRESULTTAG
yyresolveValue (yyGLRState
* yys
,
1627 yyGLRStack
* yystackp
]b4_user_formals
[);
1630 /** Resolve the previous N states starting at and including state S. If result
1631 * != yyok, some states may have been left unresolved possibly with empty
1632 * semantic option chains. Regardless of whether result = yyok, each state
1633 * has been left with consistent data so that yydestroyGLRState can be invoked
1636 yyresolveStates (yyGLRState
* yys
, int yyn
,
1637 yyGLRStack
* yystackp
]b4_user_formals
[)
1641 YYASSERT (yys
->yypred
);
1642 YYCHK (yyresolveStates (yys
->yypred
, yyn
-1, yystackp
]b4_user_args
[));
1643 if (! yys
->yyresolved
)
1644 YYCHK (yyresolveValue (yys
, yystackp
]b4_user_args
[));
1649 /** Resolve the states for the RHS of OPT, perform its user action, and return
1650 * the semantic value and location. Regardless of whether result = yyok, all
1651 * RHS states have been destroyed (assuming the user action destroys all RHS
1652 * semantic values if invoked). */
1654 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystackp
,
1655 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
1657 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1658 int yynrhs
= yyrhsLength (yyopt
->yyrule
);
1659 YYRESULTTAG yyflag
=
1660 yyresolveStates (yyopt
->yystate
, yynrhs
, yystackp
]b4_user_args
[);
1664 for (yys
= yyopt
->yystate
; yynrhs
> 0; yys
= yys
->yypred
, yynrhs
-= 1)
1665 yydestroyGLRState ("Cleanup: popping", yys
]b4_user_args
[);
1669 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;]b4_locations_if([[
1671 /* Set default location. */
1672 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
- 1].yystate
.yyloc
= yyopt
->yystate
->yyloc
;]])[
1674 int yychar_current
= yychar
;
1675 YYSTYPE yylval_current
= yylval
;]b4_locations_if([
1676 YYLTYPE yylloc_current
= yylloc
;])[
1677 yychar
= yyopt
->yyrawchar
;
1678 yylval
= yyopt
->yyval
;]b4_locations_if([
1679 yylloc
= yyopt
->yyloc
;])[
1680 yyflag
= yyuserAction (yyopt
->yyrule
, yynrhs
,
1681 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1682 yystackp
, yyvalp
]b4_locuser_args
[);
1683 yychar
= yychar_current
;
1684 yylval
= yylval_current
;]b4_locations_if([
1685 yylloc
= yylloc_current
;])[
1690 #if ]b4_api_PREFIX[DEBUG
1692 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1694 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1697 yyGLRState
* yystates
[1 + YYMAXRHS
];
1698 yyGLRState yyleftmost_state
;
1700 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1701 yystates
[yyi
] = yys
;
1704 yyleftmost_state
.yyposn
= 0;
1705 yystates
[0] = &yyleftmost_state
;
1710 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1711 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1712 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1715 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1716 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1717 yyx
->yyrule
- 1, (unsigned long int) (yys
->yyposn
+ 1),
1718 (unsigned long int) yyx
->yystate
->yyposn
);
1719 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1721 if (yystates
[yyi
]->yyresolved
)
1723 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1724 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1725 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1727 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1728 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1729 (unsigned long int) (yystates
[yyi
- 1]->yyposn
+ 1),
1730 (unsigned long int) yystates
[yyi
]->yyposn
);
1733 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1738 /*ARGSUSED*/ static YYRESULTTAG
1739 yyreportAmbiguity (yySemanticOption
* yyx0
,
1740 yySemanticOption
* yyx1
]b4_pure_formals
[)
1745 #if ]b4_api_PREFIX[DEBUG
1746 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1747 YYFPRINTF (stderr
, "Option 1,\n");
1748 yyreportTree (yyx0
, 2);
1749 YYFPRINTF (stderr
, "\nOption 2,\n");
1750 yyreportTree (yyx1
, 2);
1751 YYFPRINTF (stderr
, "\n");
1754 yyerror (]b4_yyerror_args
[YY_("syntax is ambiguous"));
1756 }]b4_locations_if([[
1758 /** Starting at and including state S1, resolve the location for each of the
1759 * previous N1 states that is unresolved. The first semantic option of a state
1760 * is always chosen. */
1762 yyresolveLocations (yyGLRState
* yys1
, int yyn1
,
1763 yyGLRStack
*yystackp
]b4_user_formals
[)
1767 yyresolveLocations (yys1
->yypred
, yyn1
- 1, yystackp
]b4_user_args
[);
1768 if (!yys1
->yyresolved
)
1770 yyGLRStackItem yyrhsloc
[1 + YYMAXRHS
];
1772 yySemanticOption
*yyoption
= yys1
->yysemantics
.yyfirstVal
;
1773 YYASSERT (yyoption
!= YY_NULL
);
1774 yynrhs
= yyrhsLength (yyoption
->yyrule
);
1779 yyresolveLocations (yyoption
->yystate
, yynrhs
,
1780 yystackp
]b4_user_args
[);
1781 for (yys
= yyoption
->yystate
, yyn
= yynrhs
;
1783 yys
= yys
->yypred
, yyn
-= 1)
1784 yyrhsloc
[yyn
].yystate
.yyloc
= yys
->yyloc
;
1788 /* Both yyresolveAction and yyresolveLocations traverse the GSS
1789 in reverse rightmost order. It is only necessary to invoke
1790 yyresolveLocations on a subforest for which yyresolveAction
1791 would have been invoked next had an ambiguity not been
1792 detected. Thus the location of the previous state (but not
1793 necessarily the previous state itself) is guaranteed to be
1794 resolved already. */
1795 yyGLRState
*yyprevious
= yyoption
->yystate
;
1796 yyrhsloc
[0].yystate
.yyloc
= yyprevious
->yyloc
;
1799 int yychar_current
= yychar
;
1800 YYSTYPE yylval_current
= yylval
;
1801 YYLTYPE yylloc_current
= yylloc
;
1802 yychar
= yyoption
->yyrawchar
;
1803 yylval
= yyoption
->yyval
;
1804 yylloc
= yyoption
->yyloc
;
1805 YYLLOC_DEFAULT ((yys1
->yyloc
), yyrhsloc
, yynrhs
);
1806 yychar
= yychar_current
;
1807 yylval
= yylval_current
;
1808 yylloc
= yylloc_current
;
1814 /** Resolve the ambiguity represented in state S, perform the indicated
1815 * actions, and set the semantic value of S. If result != yyok, the chain of
1816 * semantic options in S has been cleared instead or it has been left
1817 * unmodified except that redundant options may have been removed. Regardless
1818 * of whether result = yyok, S has been left with consistent data so that
1819 * yydestroyGLRState can be invoked if necessary. */
1821 yyresolveValue (yyGLRState
* yys
, yyGLRStack
* yystackp
]b4_user_formals
[)
1823 yySemanticOption
* yyoptionList
= yys
->yysemantics
.yyfirstVal
;
1824 yySemanticOption
* yybest
= yyoptionList
;
1825 yySemanticOption
** yypp
;
1826 yybool yymerge
= yyfalse
;
1828 YYRESULTTAG yyflag
;]b4_locations_if([
1829 YYLTYPE
*yylocp
= &yys
->yyloc
;])[
1831 for (yypp
= &yyoptionList
->yynext
; *yypp
!= YY_NULL
; )
1833 yySemanticOption
* yyp
= *yypp
;
1835 if (yyidenticalOptions (yybest
, yyp
))
1837 yymergeOptionSets (yybest
, yyp
);
1838 *yypp
= yyp
->yynext
;
1842 switch (yypreference (yybest
, yyp
))
1844 case 0:]b4_locations_if([[
1845 yyresolveLocations (yys
, 1, yystackp
]b4_user_args
[);]])[
1846 return yyreportAmbiguity (yybest
, yyp
]b4_pure_args
[);
1858 /* This cannot happen so it is not worth a YYASSERT (yyfalse),
1859 but some compilers complain if the default case is
1863 yypp
= &yyp
->yynext
;
1869 yySemanticOption
* yyp
;
1870 int yyprec
= yydprec
[yybest
->yyrule
];
1871 yyflag
= yyresolveAction (yybest
, yystackp
, &yysval
]b4_locuser_args
[);
1873 for (yyp
= yybest
->yynext
; yyp
!= YY_NULL
; yyp
= yyp
->yynext
)
1875 if (yyprec
== yydprec
[yyp
->yyrule
])
1877 YYSTYPE yysval_other
;]b4_locations_if([
1879 yyflag
= yyresolveAction (yyp
, yystackp
, &yysval_other
]b4_locuser_args([&yydummy
])[);
1882 yydestruct ("Cleanup: discarding incompletely merged value for",
1883 yystos
[yys
->yylrState
],
1884 &yysval
]b4_locuser_args
[);
1887 yyuserMerge (yymerger
[yyp
->yyrule
], &yysval
, &yysval_other
);
1892 yyflag
= yyresolveAction (yybest
, yystackp
, &yysval
]b4_locuser_args([yylocp
])[);
1896 yys
->yyresolved
= yytrue
;
1897 yys
->yysemantics
.yysval
= yysval
;
1900 yys
->yysemantics
.yyfirstVal
= YY_NULL
;
1905 yyresolveStack (yyGLRStack
* yystackp
]b4_user_formals
[)
1907 if (yystackp
->yysplitPoint
!= YY_NULL
)
1912 for (yyn
= 0, yys
= yystackp
->yytops
.yystates
[0];
1913 yys
!= yystackp
->yysplitPoint
;
1914 yys
= yys
->yypred
, yyn
+= 1)
1916 YYCHK (yyresolveStates (yystackp
->yytops
.yystates
[0], yyn
, yystackp
1923 yycompressStack (yyGLRStack
* yystackp
)
1925 yyGLRState
* yyp
, *yyq
, *yyr
;
1927 if (yystackp
->yytops
.yysize
!= 1 || yystackp
->yysplitPoint
== YY_NULL
)
1930 for (yyp
= yystackp
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= YY_NULL
;
1931 yyp
!= yystackp
->yysplitPoint
;
1932 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1935 yystackp
->yyspaceLeft
+= yystackp
->yynextFree
- yystackp
->yyitems
;
1936 yystackp
->yynextFree
= ((yyGLRStackItem
*) yystackp
->yysplitPoint
) + 1;
1937 yystackp
->yyspaceLeft
-= yystackp
->yynextFree
- yystackp
->yyitems
;
1938 yystackp
->yysplitPoint
= YY_NULL
;
1939 yystackp
->yylastDeleted
= YY_NULL
;
1941 while (yyr
!= YY_NULL
)
1943 yystackp
->yynextFree
->yystate
= *yyr
;
1945 yystackp
->yynextFree
->yystate
.yypred
= &yystackp
->yynextFree
[-1].yystate
;
1946 yystackp
->yytops
.yystates
[0] = &yystackp
->yynextFree
->yystate
;
1947 yystackp
->yynextFree
+= 1;
1948 yystackp
->yyspaceLeft
-= 1;
1953 yyprocessOneStack (yyGLRStack
* yystackp
, size_t yyk
,
1954 size_t yyposn
]b4_pure_formals
[)
1957 const short int* yyconflicts
;
1960 while (yystackp
->yytops
.yystates
[yyk
] != YY_NULL
)
1962 yyStateNum yystate
= yystackp
->yytops
.yystates
[yyk
]->yylrState
;
1963 YYDPRINTF ((stderr
, "Stack %lu Entering state %d\n",
1964 (unsigned long int) yyk
, yystate
));
1966 YYASSERT (yystate
!= YYFINAL
);
1968 if (yyisDefaultedState (yystate
))
1970 yyrule
= yydefaultAction (yystate
);
1973 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
1974 (unsigned long int) yyk
));
1975 yymarkStackDeleted (yystackp
, yyk
);
1978 YYCHK (yyglrReduce (yystackp
, yyk
, yyrule
, yyfalse
]b4_user_args
[));
1983 yystackp
->yytops
.yylookaheadNeeds
[yyk
] = yytrue
;
1984 if (yychar
== YYEMPTY
)
1986 YYDPRINTF ((stderr
, "Reading a token: "));
1990 if (yychar
<= YYEOF
)
1992 yychar
= yytoken
= YYEOF
;
1993 YYDPRINTF ((stderr
, "Now at end of input.\n"));
1997 yytoken
= YYTRANSLATE (yychar
);
1998 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
2001 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
2003 while (*yyconflicts
!= 0)
2005 size_t yynewStack
= yysplitStack (yystackp
, yyk
);
2006 YYDPRINTF ((stderr
, "Splitting off stack %lu from %lu.\n",
2007 (unsigned long int) yynewStack
,
2008 (unsigned long int) yyk
));
2009 YYCHK (yyglrReduce (yystackp
, yynewStack
,
2010 *yyconflicts
, yyfalse
]b4_user_args
[));
2011 YYCHK (yyprocessOneStack (yystackp
, yynewStack
,
2012 yyposn
]b4_pure_args
[));
2016 if (yyisShiftAction (yyaction
))
2018 else if (yyisErrorAction (yyaction
))
2020 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
2021 (unsigned long int) yyk
));
2022 yymarkStackDeleted (yystackp
, yyk
);
2026 YYCHK (yyglrReduce (yystackp
, yyk
, -yyaction
,
2027 yyfalse
]b4_user_args
[));
2033 /*ARGSUSED*/ static void
2034 yyreportSyntaxError (yyGLRStack
* yystackp
]b4_user_formals
[)
2036 if (yystackp
->yyerrState
!= 0)
2038 #if ! YYERROR_VERBOSE
2039 yyerror (]b4_lyyerror_args
[YY_("syntax error"));
2041 yySymbol yytoken
= yychar
== YYEMPTY
? YYEMPTY
: YYTRANSLATE (yychar
);
2042 size_t yysize0
= yytnamerr (YY_NULL
, yytokenName (yytoken
));
2043 size_t yysize
= yysize0
;
2045 yybool yysize_overflow
= yyfalse
;
2046 char* yymsg
= YY_NULL
;
2047 enum { YYERROR_VERBOSE_ARGS_MAXIMUM
= 5 };
2048 /* Internationalized format string. */
2049 const char *yyformat
= YY_NULL
;
2050 /* Arguments of yyformat. */
2051 char const *yyarg
[YYERROR_VERBOSE_ARGS_MAXIMUM
];
2052 /* Number of reported tokens (one for the "unexpected", one per
2056 /* There are many possibilities here to consider:
2057 - If this state is a consistent state with a default action, then
2058 the only way this function was invoked is if the default action
2059 is an error action. In that case, don't check for expected
2060 tokens because there are none.
2061 - The only way there can be no lookahead present (in yychar) is if
2062 this state is a consistent state with a default action. Thus,
2063 detecting the absence of a lookahead is sufficient to determine
2064 that there is no unexpected or expected token to report. In that
2065 case, just report a simple "syntax error".
2066 - Don't assume there isn't a lookahead just because this state is a
2067 consistent state with a default action. There might have been a
2068 previous inconsistent state, consistent state with a non-default
2069 action, or user semantic action that manipulated yychar.
2070 - Of course, the expected token list depends on states to have
2071 correct lookahead information, and it depends on the parser not
2072 to perform extra reductions after fetching a lookahead from the
2073 scanner and before detecting a syntax error. Thus, state merging
2074 (from LALR or IELR) and default reductions corrupt the expected
2075 token list. However, the list is correct for canonical LR with
2076 one exception: it will still contain any token that will not be
2077 accepted due to an error action in a later state.
2079 if (yytoken
!= YYEMPTY
)
2081 int yyn
= yypact
[yystackp
->yytops
.yystates
[0]->yylrState
];
2082 yyarg
[yycount
++] = yytokenName (yytoken
);
2083 if (!yypact_value_is_default (yyn
))
2085 /* Start YYX at -YYN if negative to avoid negative indexes in
2086 YYCHECK. In other words, skip the first -YYN actions for this
2087 state because they are default actions. */
2088 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
2089 /* Stay within bounds of both yycheck and yytname. */
2090 int yychecklim
= YYLAST
- yyn
+ 1;
2091 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
2093 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
2094 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
2095 && !yytable_value_is_error (yytable
[yyx
+ yyn
]))
2097 if (yycount
== YYERROR_VERBOSE_ARGS_MAXIMUM
)
2103 yyarg
[yycount
++] = yytokenName (yyx
);
2104 yysize1
= yysize
+ yytnamerr (YY_NULL
, yytokenName (yyx
));
2105 yysize_overflow
|= yysize1
< yysize
;
2113 #define YYCASE_(N, S) \
2117 YYCASE_(0, YY_("syntax error"));
2118 YYCASE_(1, YY_("syntax error, unexpected %s"));
2119 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
2120 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
2121 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
2122 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
2126 yysize1
= yysize
+ strlen (yyformat
);
2127 yysize_overflow
|= yysize1
< yysize
;
2130 if (!yysize_overflow
)
2131 yymsg
= (char *) YYMALLOC (yysize
);
2137 while ((*yyp
= *yyformat
))
2139 if (*yyp
== '%' && yyformat
[1] == 's' && yyi
< yycount
)
2141 yyp
+= yytnamerr (yyp
, yyarg
[yyi
++]);
2150 yyerror (]b4_lyyerror_args
[yymsg
);
2155 yyerror (]b4_lyyerror_args
[YY_("syntax error"));
2156 yyMemoryExhausted (yystackp
);
2158 #endif /* YYERROR_VERBOSE */
2162 /* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP,
2163 yylval, and yylloc are the syntactic category, semantic value, and location
2164 of the lookahead. */
2165 /*ARGSUSED*/ static void
2166 yyrecoverSyntaxError (yyGLRStack
* yystackp
]b4_user_formals
[)
2171 if (yystackp
->yyerrState
== 3)
2172 /* We just shifted the error token and (perhaps) took some
2173 reductions. Skip tokens until we can proceed. */
2174 while (YYID (yytrue
))
2177 if (yychar
== YYEOF
)
2178 yyFail (yystackp
][]b4_lpure_args
[, YY_NULL
);
2179 if (yychar
!= YYEMPTY
)
2180 {]b4_locations_if([[
2181 /* We throw away the lookahead, but the error range
2182 of the shifted error token must take it into account. */
2183 yyGLRState
*yys
= yystackp
->yytops
.yystates
[0];
2184 yyGLRStackItem yyerror_range
[3];
2185 yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;
2186 yyerror_range
[2].yystate
.yyloc
= yylloc
;
2187 YYLLOC_DEFAULT ((yys
->yyloc
), yyerror_range
, 2);]])[
2188 yytoken
= YYTRANSLATE (yychar
);
2189 yydestruct ("Error: discarding",
2190 yytoken
, &yylval
]b4_locuser_args([&yylloc
])[);
2192 YYDPRINTF ((stderr
, "Reading a token: "));
2194 if (yychar
<= YYEOF
)
2196 yychar
= yytoken
= YYEOF
;
2197 YYDPRINTF ((stderr
, "Now at end of input.\n"));
2201 yytoken
= YYTRANSLATE (yychar
);
2202 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
2204 yyj
= yypact
[yystackp
->yytops
.yystates
[0]->yylrState
];
2205 if (yypact_value_is_default (yyj
))
2208 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != yytoken
)
2210 if (yydefact
[yystackp
->yytops
.yystates
[0]->yylrState
] != 0)
2213 else if (! yytable_value_is_error (yytable
[yyj
]))
2217 /* Reduce to one stack. */
2218 for (yyk
= 0; yyk
< yystackp
->yytops
.yysize
; yyk
+= 1)
2219 if (yystackp
->yytops
.yystates
[yyk
] != YY_NULL
)
2221 if (yyk
>= yystackp
->yytops
.yysize
)
2222 yyFail (yystackp
][]b4_lpure_args
[, YY_NULL
);
2223 for (yyk
+= 1; yyk
< yystackp
->yytops
.yysize
; yyk
+= 1)
2224 yymarkStackDeleted (yystackp
, yyk
);
2225 yyremoveDeletes (yystackp
);
2226 yycompressStack (yystackp
);
2228 /* Now pop stack until we find a state that shifts the error token. */
2229 yystackp
->yyerrState
= 3;
2230 while (yystackp
->yytops
.yystates
[0] != YY_NULL
)
2232 yyGLRState
*yys
= yystackp
->yytops
.yystates
[0];
2233 yyj
= yypact
[yys
->yylrState
];
2234 if (! yypact_value_is_default (yyj
))
2237 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
2238 && yyisShiftAction (yytable
[yyj
]))
2240 /* Shift the error token. */]b4_locations_if([[
2241 /* First adjust its location.*/
2243 yystackp
->yyerror_range
[2].yystate
.yyloc
= yylloc
;
2244 YYLLOC_DEFAULT (yyerrloc
, (yystackp
->yyerror_range
), 2);]])[
2245 YY_SYMBOL_PRINT ("Shifting", yystos
[yytable
[yyj
]],
2246 &yylval
, &yyerrloc
);
2247 yyglrShift (yystackp
, 0, yytable
[yyj
],
2248 yys
->yyposn
, &yylval
]b4_locations_if([, &yyerrloc
])[);
2249 yys
= yystackp
->yytops
.yystates
[0];
2252 }]b4_locations_if([[
2253 yystackp
->yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]])[
2254 if (yys
->yypred
!= YY_NULL
)
2255 yydestroyGLRState ("Error: popping", yys
]b4_user_args
[);
2256 yystackp
->yytops
.yystates
[0] = yys
->yypred
;
2257 yystackp
->yynextFree
-= 1;
2258 yystackp
->yyspaceLeft
+= 1;
2260 if (yystackp
->yytops
.yystates
[0] == YY_NULL
)
2261 yyFail (yystackp
][]b4_lpure_args
[, YY_NULL
);
2264 #define YYCHK1(YYE) \
2274 goto yyuser_error; \
2285 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
2289 yyGLRStack
* const yystackp
= &yystack
;
2292 YYDPRINTF ((stderr
, "Starting parse\n"));
2295 yylval
= yyval_default
;
2297 #if defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL
2298 yylloc
.first_line
= yylloc
.last_line
= ]b4_location_initial_line
[;
2299 yylloc
.first_column
= yylloc
.last_column
= ]b4_location_initial_column
[;
2302 m4_ifdef([b4_initial_action
], [
2303 m4_pushdef([b4_at_dollar
], [yylloc
])dnl
2304 m4_pushdef([b4_dollar_dollar
], [yylval
])dnl
2305 /* User initialization code. */
2306 b4_user_initial_action
2307 m4_popdef([b4_dollar_dollar
])dnl
2308 m4_popdef([b4_at_dollar
])])dnl
2310 if (! yyinitGLRStack (yystackp
, YYINITDEPTH
))
2311 goto yyexhaustedlab
;
2312 switch (YYSETJMP (yystack
.yyexception_buffer
))
2315 case 1: goto yyabortlab
;
2316 case 2: goto yyexhaustedlab
;
2317 default: goto yybuglab
;
2319 yyglrShift (&yystack
, 0, 0, 0, &yylval
]b4_locations_if([, &yylloc
])[);
2322 while (YYID (yytrue
))
2324 /* For efficiency, we have two loops, the first of which is
2325 specialized to deterministic operation (single stack, no
2326 potential ambiguity). */
2328 while (YYID (yytrue
))
2332 const short int* yyconflicts
;
2334 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
2335 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
2336 if (yystate
== YYFINAL
)
2338 if (yyisDefaultedState (yystate
))
2340 yyrule
= yydefaultAction (yystate
);
2343 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2344 yyreportSyntaxError (&yystack
]b4_user_args
[);
2347 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_user_args
[));
2352 if (yychar
== YYEMPTY
)
2354 YYDPRINTF ((stderr
, "Reading a token: "));
2358 if (yychar
<= YYEOF
)
2360 yychar
= yytoken
= YYEOF
;
2361 YYDPRINTF ((stderr
, "Now at end of input.\n"));
2365 yytoken
= YYTRANSLATE (yychar
);
2366 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
2369 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
2370 if (*yyconflicts
!= 0)
2372 if (yyisShiftAction (yyaction
))
2374 YY_SYMBOL_PRINT ("Shifting", yytoken
, &yylval
, &yylloc
);
2377 yyglrShift (&yystack
, 0, yyaction
, yyposn
, &yylval
]b4_locations_if([, &yylloc
])[);
2378 if (0 < yystack
.yyerrState
)
2379 yystack
.yyerrState
-= 1;
2381 else if (yyisErrorAction (yyaction
))
2383 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2384 yyreportSyntaxError (&yystack
]b4_user_args
[);
2388 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_user_args
[));
2392 while (YYID (yytrue
))
2394 yySymbol yytoken_to_shift
;
2397 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2398 yystackp
->yytops
.yylookaheadNeeds
[yys
] = yychar
!= YYEMPTY
;
2400 /* yyprocessOneStack returns one of three things:
2402 - An error flag. If the caller is yyprocessOneStack, it
2403 immediately returns as well. When the caller is finally
2404 yyparse, it jumps to an error label via YYCHK1.
2406 - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
2407 (&yystack, yys), which sets the top state of yys to NULL. Thus,
2408 yyparse's following invocation of yyremoveDeletes will remove
2411 - yyok, when ready to shift a token.
2413 Except in the first case, yyparse will invoke yyremoveDeletes and
2414 then shift the next token onto all remaining stacks. This
2415 synchronization of the shift (that is, after all preceding
2416 reductions on all stacks) helps prevent double destructor calls
2417 on yylval in the event of memory exhaustion. */
2419 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2420 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
]b4_lpure_args
[));
2421 yyremoveDeletes (&yystack
);
2422 if (yystack
.yytops
.yysize
== 0)
2424 yyundeleteLastStack (&yystack
);
2425 if (yystack
.yytops
.yysize
== 0)
2426 yyFail (&yystack
][]b4_lpure_args
[, YY_("syntax error"));
2427 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
2428 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
2429 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2430 yyreportSyntaxError (&yystack
]b4_user_args
[);
2434 /* If any yyglrShift call fails, it will fail after shifting. Thus,
2435 a copy of yylval will already be on stack 0 in the event of a
2436 failure in the following loop. Thus, yychar is set to YYEMPTY
2437 before the loop to make sure the user destructor for yylval isn't
2439 yytoken_to_shift
= YYTRANSLATE (yychar
);
2442 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2445 const short int* yyconflicts
;
2446 yyStateNum yystate
= yystack
.yytops
.yystates
[yys
]->yylrState
;
2447 yygetLRActions (yystate
, yytoken_to_shift
, &yyaction
,
2449 /* Note that yyconflicts were handled by yyprocessOneStack. */
2450 YYDPRINTF ((stderr
, "On stack %lu, ", (unsigned long int) yys
));
2451 YY_SYMBOL_PRINT ("shifting", yytoken_to_shift
, &yylval
, &yylloc
);
2452 yyglrShift (&yystack
, yys
, yyaction
, yyposn
,
2453 &yylval
]b4_locations_if([, &yylloc
])[);
2454 YYDPRINTF ((stderr
, "Stack %lu now in state #%d\n",
2455 (unsigned long int) yys
,
2456 yystack
.yytops
.yystates
[yys
]->yylrState
));
2459 if (yystack
.yytops
.yysize
== 1)
2461 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
2462 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
2463 yycompressStack (&yystack
);
2469 yyrecoverSyntaxError (&yystack
]b4_user_args
[);
2470 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
2486 yyerror (]b4_lyyerror_args
[YY_("memory exhausted"));
2491 if (yychar
!= YYEMPTY
)
2492 yydestruct ("Cleanup: discarding lookahead",
2493 YYTRANSLATE (yychar
), &yylval
]b4_locuser_args([&yylloc
])[);
2495 /* If the stack is well-formed, pop the stack until it is empty,
2496 destroying its entries as we go. But free the stack regardless
2497 of whether it is well-formed. */
2498 if (yystack
.yyitems
)
2500 yyGLRState
** yystates
= yystack
.yytops
.yystates
;
2503 size_t yysize
= yystack
.yytops
.yysize
;
2505 for (yyk
= 0; yyk
< yysize
; yyk
+= 1)
2508 while (yystates
[yyk
])
2510 yyGLRState
*yys
= yystates
[yyk
];
2511 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]]
2512 )[ if (yys
->yypred
!= YY_NULL
)
2513 yydestroyGLRState ("Cleanup: popping", yys
]b4_user_args
[);
2514 yystates
[yyk
] = yys
->yypred
;
2515 yystack
.yynextFree
-= 1;
2516 yystack
.yyspaceLeft
+= 1;
2521 yyfreeGLRStack (&yystack
);
2524 /* Make sure YYID is used. */
2525 return YYID (yyresult
);
2528 /* DEBUGGING ONLY */
2529 #if ]b4_api_PREFIX[DEBUG
2530 static void yypstack (yyGLRStack
* yystackp
, size_t yyk
)
2531 __attribute__ ((__unused__
));
2532 static void yypdumpstack (yyGLRStack
* yystackp
) __attribute__ ((__unused__
));
2535 yy_yypstack (yyGLRState
* yys
)
2539 yy_yypstack (yys
->yypred
);
2540 YYFPRINTF (stderr
, " -> ");
2542 YYFPRINTF (stderr
, "%d@@%lu", yys
->yylrState
,
2543 (unsigned long int) yys
->yyposn
);
2547 yypstates (yyGLRState
* yyst
)
2549 if (yyst
== YY_NULL
)
2550 YYFPRINTF (stderr
, "<null>");
2553 YYFPRINTF (stderr
, "\n");
2557 yypstack (yyGLRStack
* yystackp
, size_t yyk
)
2559 yypstates (yystackp
->yytops
.yystates
[yyk
]);
2562 #define YYINDEX(YYX) \
2563 ((YYX) == YY_NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
2567 yypdumpstack (yyGLRStack
* yystackp
)
2569 yyGLRStackItem
* yyp
;
2571 for (yyp
= yystackp
->yyitems
; yyp
< yystackp
->yynextFree
; yyp
+= 1)
2573 YYFPRINTF (stderr
, "%3lu. ",
2574 (unsigned long int) (yyp
- yystackp
->yyitems
));
2575 if (*(yybool
*) yyp
)
2577 YYFPRINTF (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
2578 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
2579 (unsigned long int) yyp
->yystate
.yyposn
,
2580 (long int) YYINDEX (yyp
->yystate
.yypred
));
2581 if (! yyp
->yystate
.yyresolved
)
2582 YYFPRINTF (stderr
, ", firstVal: %ld",
2583 (long int) YYINDEX (yyp
->yystate
2584 .yysemantics
.yyfirstVal
));
2588 YYFPRINTF (stderr
, "Option. rule: %d, state: %ld, next: %ld",
2589 yyp
->yyoption
.yyrule
- 1,
2590 (long int) YYINDEX (yyp
->yyoption
.yystate
),
2591 (long int) YYINDEX (yyp
->yyoption
.yynext
));
2593 YYFPRINTF (stderr
, "\n");
2595 YYFPRINTF (stderr
, "Tops:");
2596 for (yyi
= 0; yyi
< yystackp
->yytops
.yysize
; yyi
+= 1)
2597 YYFPRINTF (stderr
, "%lu: %ld; ", (unsigned long int) yyi
,
2598 (long int) YYINDEX (yystackp
->yytops
.yystates
[yyi
]));
2599 YYFPRINTF (stderr
, "\n");
2606 dnl glr
.cc produces its own header
.
2608 m4_if(b4_skeleton
, ["glr.c"],
2610 [@
output(b4_spec_defines_file@
)@
2611 b4_copyright([Skeleton interface
for Bison GLR parsers in C
],
2614 ]b4_cpp_guard_open([b4_spec_defines_file
])[
2615 ]b4_shared_declarations
[
2616 ]b4_cpp_guard_close([b4_spec_defines_file
])[