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
[] =
471 /* Error token number */
474 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
475 If N is 0, then set CURRENT to the empty location which ends
476 the previous symbol: RHS[0] (always defined). */
479 #define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
480 #ifndef YYLLOC_DEFAULT
481 # define YYLLOC_DEFAULT(Current, Rhs, N) \
485 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
486 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
487 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
488 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
492 (Current).first_line = (Current).last_line = \
493 YYRHSLOC (Rhs, 0).last_line; \
494 (Current).first_column = (Current).last_column = \
495 YYRHSLOC (Rhs, 0).last_column; \
499 /* YY_LOCATION_PRINT -- Print the location on the stream.
500 This macro was not mandated originally: define only if we know
501 we won't break user code: when these are the locations we know. */
503 # define YY_LOCATION_PRINT(File, Loc) \
504 fprintf (File, "%d.%d-%d.%d", \
505 (Loc).first_line, (Loc).first_column, \
506 (Loc).last_line, (Loc).last_column)
509 #ifndef YYLLOC_DEFAULT
510 # define YYLLOC_DEFAULT(Current, Rhs, N) ((void) 0)
514 #ifndef YY_LOCATION_PRINT
515 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
519 /* YYLEX -- calling `yylex' with the right arguments. */
520 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
525 #define yynerrs (yystackp->yyerrcnt)
527 #define yychar (yystackp->yyrawchar)
529 #define yylval (yystackp->yyval)
531 #define yylloc (yystackp->yyloc)
532 m4_if(b4_prefix
[], [yy
], [],
533 [#define b4_prefix[]nerrs yynerrs
534 #define b4_prefix[]char yychar
535 #define b4_prefix[]lval yylval
536 #define b4_prefix[]lloc yylloc])],
537 [YYSTYPE yylval
;]b4_locations_if([[
543 static const int YYEOF
= 0;
544 static const int YYEMPTY
= -2;
546 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
549 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
552 #if ]b4_api_PREFIX[DEBUG
555 # define YYFPRINTF fprintf
558 # define YYDPRINTF(Args) \
564 ]b4_yy_symbol_print_generate([b4_c_ansi_function_def
])[
566 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
570 YYFPRINTF (stderr, "%s ", Title); \
571 yy_symbol_print (stderr, Type, Value]b4_locuser_args([Location])[); \
572 YYFPRINTF (stderr, "\n"); \
576 /* Nonzero means print parse trace. It is left uninitialized so that
577 multiple parsers can coexist. */
580 #else /* !]b4_api_PREFIX[DEBUG */
582 # define YYDPRINTF(Args)
583 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
585 #endif /* !]b4_api_PREFIX[DEBUG */
587 /* YYINITDEPTH -- initial size of the parser's stacks. */
589 # define YYINITDEPTH ]b4_stack_depth_init[
592 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
593 if the built-in stack extension method is used).
595 Do not make this value too large; the results are undefined if
596 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
597 evaluated with infinite-precision integer arithmetic. */
600 # define YYMAXDEPTH ]b4_stack_depth_max[
603 /* Minimum number of free items on the stack allowed after an
604 allocation. This is to allow allocation and initialization
605 to be completed by functions that call yyexpandGLRStack before the
606 stack is expanded, thus insuring that all necessary pointers get
607 properly redirected to new data. */
610 #ifndef YYSTACKEXPANDABLE
611 # if (! defined __cplusplus \
612 || (]b4_locations_if([[defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL \
613 && ]])[defined ]b4_api_PREFIX[STYPE_IS_TRIVIAL && ]b4_api_PREFIX[STYPE_IS_TRIVIAL))
614 # define YYSTACKEXPANDABLE 1
616 # define YYSTACKEXPANDABLE 0
620 #if YYSTACKEXPANDABLE
621 # define YY_RESERVE_GLRSTACK(Yystack) \
623 if (Yystack->yyspaceLeft < YYHEADROOM) \
624 yyexpandGLRStack (Yystack); \
627 # define YY_RESERVE_GLRSTACK(Yystack) \
629 if (Yystack->yyspaceLeft < YYHEADROOM) \
630 yyMemoryExhausted (Yystack); \
638 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
639 # define yystpcpy stpcpy
641 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
644 yystpcpy (char *yydest
, const char *yysrc
)
647 const char *yys
= yysrc
;
649 while ((*yyd
++ = *yys
++) != '\0')
658 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
659 quotes and backslashes, so that it's suitable for yyerror. The
660 heuristic is that double-quoting is unnecessary unless the string
661 contains an apostrophe, a comma, or backslash (other than
662 backslash-backslash). YYSTR is taken from yytname. If YYRES is
663 null, do not copy; instead, return the length of what the result
666 yytnamerr (char *yyres
, const char *yystr
)
671 char const *yyp
= yystr
;
678 goto do_not_strip_quotes
;
682 goto do_not_strip_quotes
;
695 do_not_strip_quotes
: ;
699 return strlen (yystr
);
701 return yystpcpy (yyres
, yystr
) - yyres
;
705 #endif /* !YYERROR_VERBOSE */
707 /** State numbers, as in LALR(1) machine */
708 typedef int yyStateNum
;
710 /** Rule numbers, as in LALR(1) machine */
711 typedef int yyRuleNum
;
713 /** Grammar symbol */
714 typedef short int yySymbol
;
716 /** Item references, as in LALR(1) machine */
717 typedef short int yyItemNum
;
719 typedef struct yyGLRState yyGLRState
;
720 typedef struct yyGLRStateSet yyGLRStateSet
;
721 typedef struct yySemanticOption yySemanticOption
;
722 typedef union yyGLRStackItem yyGLRStackItem
;
723 typedef struct yyGLRStack yyGLRStack
;
726 /** Type tag: always true. */
728 /** Type tag for yysemantics. If true, yysval applies, otherwise
729 * yyfirstVal applies. */
731 /** Number of corresponding LALR(1) machine state. */
732 yyStateNum yylrState
;
733 /** Preceding state in this stack */
735 /** Source position of the first token produced by my symbol */
738 /** First in a chain of alternative reductions producing the
739 * non-terminal corresponding to this state, threaded through
741 yySemanticOption
* yyfirstVal
;
742 /** Semantic value for this state. */
744 } yysemantics
;]b4_locations_if([[
745 /** Source location for this state. */
749 struct yyGLRStateSet
{
750 yyGLRState
** yystates
;
751 /** During nondeterministic operation, yylookaheadNeeds tracks which
752 * stacks have actually needed the current lookahead. During deterministic
753 * operation, yylookaheadNeeds[0] is not maintained since it would merely
754 * duplicate yychar != YYEMPTY. */
755 yybool
* yylookaheadNeeds
;
756 size_t yysize
, yycapacity
;
759 struct yySemanticOption
{
760 /** Type tag: always false. */
762 /** Rule number for this reduction */
764 /** The last RHS state in the list of states to be reduced. */
766 /** The lookahead for this reduction. */
768 YYSTYPE yyval
;]b4_locations_if([[
770 /** Next sibling in chain of options. To facilitate merging,
771 * options are chained in decreasing order by address. */
772 yySemanticOption
* yynext
;
775 /** Type of the items in the GLR stack. The yyisState field
776 * indicates which item of the union is valid. */
777 union yyGLRStackItem
{
779 yySemanticOption yyoption
;
784 ]b4_locations_if([[ /* To compute the location of the error token. */
785 yyGLRStackItem yyerror_range
[3];]])[
790 YYSTYPE yyval
;]b4_locations_if([[
793 YYJMP_BUF yyexception_buffer
;
794 yyGLRStackItem
* yyitems
;
795 yyGLRStackItem
* yynextFree
;
797 yyGLRState
* yysplitPoint
;
798 yyGLRState
* yylastDeleted
;
799 yyGLRStateSet yytops
;
802 #if YYSTACKEXPANDABLE
803 static void yyexpandGLRStack (yyGLRStack
* yystackp
);
806 static void yyFail (yyGLRStack
* yystackp
]b4_pure_formals
[, const char* yymsg
)
807 __attribute__ ((__noreturn__
));
809 yyFail (yyGLRStack
* yystackp
]b4_pure_formals
[, const char* yymsg
)
811 if (yymsg
!= YY_NULL
)
812 yyerror (]b4_yyerror_args
[yymsg
);
813 YYLONGJMP (yystackp
->yyexception_buffer
, 1);
816 static void yyMemoryExhausted (yyGLRStack
* yystackp
)
817 __attribute__ ((__noreturn__
));
819 yyMemoryExhausted (yyGLRStack
* yystackp
)
821 YYLONGJMP (yystackp
->yyexception_buffer
, 2);
824 #if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE
825 /** A printable representation of TOKEN. */
826 static inline const char*
827 yytokenName (yySymbol yytoken
)
829 if (yytoken
== YYEMPTY
)
832 return yytname
[yytoken
];
836 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
837 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
838 * containing the pointer to the next state in the chain. */
839 static void yyfillin (yyGLRStackItem
*, int, int) __attribute__ ((__unused__
));
841 yyfillin (yyGLRStackItem
*yyvsp
, int yylow0
, int yylow1
)
844 yyGLRState
*s
= yyvsp
[yylow0
].yystate
.yypred
;
845 for (i
= yylow0
-1; i
>= yylow1
; i
-= 1)
847 YYASSERT (s
->yyresolved
);
848 yyvsp
[i
].yystate
.yyresolved
= yytrue
;
849 yyvsp
[i
].yystate
.yysemantics
.yysval
= s
->yysemantics
.yysval
;]b4_locations_if([[
850 yyvsp
[i
].yystate
.yyloc
= s
->yyloc
;]])[
851 s
= yyvsp
[i
].yystate
.yypred
= s
->yypred
;
855 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
856 * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
857 * For convenience, always return YYLOW1. */
858 static inline int yyfill (yyGLRStackItem
*, int *, int, yybool
)
859 __attribute__ ((__unused__
));
861 yyfill (yyGLRStackItem
*yyvsp
, int *yylow
, int yylow1
, yybool yynormal
)
863 if (!yynormal
&& yylow1
< *yylow
)
865 yyfillin (yyvsp
, *yylow
, yylow1
);
871 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
872 * and top stack item YYVSP. YYLVALP points to place to put semantic
873 * value ($$), and yylocp points to place for location information
874 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
875 * yyerr for YYERROR, yyabort for YYABORT. */
876 /*ARGSUSED*/ static YYRESULTTAG
877 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
878 yyGLRStack
* yystackp
,
879 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
881 yybool yynormal
__attribute__ ((__unused__
)) =
882 (yystackp
->yysplitPoint
== YY_NULL
);
884 ]b4_parse_param_use
[]dnl
886 # define yyerrok (yystackp->yyerrState = 0)
888 # define YYACCEPT return yyaccept
890 # define YYABORT return yyabort
892 # define YYERROR return yyerrok, yyerr
894 # define YYRECOVERING() (yystackp->yyerrState != 0)
896 # define yyclearin (yychar = YYEMPTY)
898 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
900 # define YYBACKUP(Token, Value) \
901 return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")), \
906 *yyvalp
= yyval_default
;
908 *yyvalp
= yyvsp
[YYFILL (1-yyrhslen
)].yystate
.yysemantics
.yysval
;]b4_locations_if([[
909 YYLLOC_DEFAULT ((*yylocp
), (yyvsp
- yyrhslen
), yyrhslen
);
910 yystackp
->yyerror_range
[1].yystate
.yyloc
= *yylocp
;
929 /*ARGSUSED*/ static void
930 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
942 /* Bison grammar-table manipulation. */
944 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
946 /** Number of symbols composing the right hand side of rule #RULE. */
948 yyrhsLength (yyRuleNum yyrule
)
954 yydestroyGLRState (char const *yymsg
, yyGLRState
*yys
]b4_user_formals
[)
957 yydestruct (yymsg
, yystos
[yys
->yylrState
],
958 &yys
->yysemantics
.yysval
]b4_locuser_args([&yys
->yyloc
])[);
961 #if ]b4_api_PREFIX[DEBUG
964 if (yys
->yysemantics
.yyfirstVal
)
965 YYFPRINTF (stderr
, "%s unresolved ", yymsg
);
967 YYFPRINTF (stderr
, "%s incomplete ", yymsg
);
968 yy_symbol_print (stderr
, yystos
[yys
->yylrState
],
969 YY_NULL
]b4_locuser_args([&yys
->yyloc
])[);
970 YYFPRINTF (stderr
, "\n");
974 if (yys
->yysemantics
.yyfirstVal
)
976 yySemanticOption
*yyoption
= yys
->yysemantics
.yyfirstVal
;
979 for (yyrh
= yyoption
->yystate
, yyn
= yyrhsLength (yyoption
->yyrule
);
981 yyrh
= yyrh
->yypred
, yyn
-= 1)
982 yydestroyGLRState (yymsg
, yyrh
]b4_user_args
[);
987 /** Left-hand-side symbol for rule #RULE. */
988 static inline yySymbol
989 yylhsNonterm (yyRuleNum yyrule
)
994 #define yypact_value_is_default(yystate) \
995 ]b4_table_value_equals([[pact]], [[yystate]], [b4_pact_ninf])[
997 /** True iff LR state STATE has only a default reduction (regardless
1000 yyisDefaultedState (yyStateNum yystate
)
1002 return yypact_value_is_default (yypact
[yystate
]);
1005 /** The default reduction for STATE, assuming it has one. */
1006 static inline yyRuleNum
1007 yydefaultAction (yyStateNum yystate
)
1009 return yydefact
[yystate
];
1012 #define yytable_value_is_error(yytable_value) \
1013 ]b4_table_value_equals([[table]], [[yytable_value]], [b4_table_ninf])[
1015 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
1017 * R < 0: Reduce on rule -R.
1019 * R > 0: Shift to state R.
1020 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
1021 * conflicting reductions.
1024 yygetLRActions (yyStateNum yystate
, int yytoken
,
1025 int* yyaction
, const short int** yyconflicts
)
1027 int yyindex
= yypact
[yystate
] + yytoken
;
1028 if (yypact_value_is_default (yypact
[yystate
])
1029 || yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
1031 *yyaction
= -yydefact
[yystate
];
1032 *yyconflicts
= yyconfl
;
1034 else if (! yytable_value_is_error (yytable
[yyindex
]))
1036 *yyaction
= yytable
[yyindex
];
1037 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
1042 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
1046 static inline yyStateNum
1047 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
1050 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
1051 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
1052 return yytable
[yyr
];
1054 return yydefgoto
[yylhs
- YYNTOKENS
];
1057 static inline yybool
1058 yyisShiftAction (int yyaction
)
1060 return 0 < yyaction
;
1063 static inline yybool
1064 yyisErrorAction (int yyaction
)
1066 return yyaction
== 0;
1071 /** Return a fresh GLRStackItem. Callers should call
1072 * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
1075 static inline yyGLRStackItem
*
1076 yynewGLRStackItem (yyGLRStack
* yystackp
, yybool yyisState
)
1078 yyGLRStackItem
* yynewItem
= yystackp
->yynextFree
;
1079 yystackp
->yyspaceLeft
-= 1;
1080 yystackp
->yynextFree
+= 1;
1081 yynewItem
->yystate
.yyisState
= yyisState
;
1085 /** Add a new semantic action that will execute the action for rule
1086 * RULENUM on the semantic values in RHS to the list of
1087 * alternative actions for STATE. Assumes that RHS comes from
1088 * stack #K of *STACKP. */
1090 yyaddDeferredAction (yyGLRStack
* yystackp
, size_t yyk
, yyGLRState
* yystate
,
1091 yyGLRState
* rhs
, yyRuleNum yyrule
)
1093 yySemanticOption
* yynewOption
=
1094 &yynewGLRStackItem (yystackp
, yyfalse
)->yyoption
;
1095 yynewOption
->yystate
= rhs
;
1096 yynewOption
->yyrule
= yyrule
;
1097 if (yystackp
->yytops
.yylookaheadNeeds
[yyk
])
1099 yynewOption
->yyrawchar
= yychar
;
1100 yynewOption
->yyval
= yylval
;]b4_locations_if([
1101 yynewOption
->yyloc
= yylloc
;])[
1104 yynewOption
->yyrawchar
= YYEMPTY
;
1105 yynewOption
->yynext
= yystate
->yysemantics
.yyfirstVal
;
1106 yystate
->yysemantics
.yyfirstVal
= yynewOption
;
1108 YY_RESERVE_GLRSTACK (yystackp
);
1113 /** Initialize SET to a singleton set containing an empty stack. */
1115 yyinitStateSet (yyGLRStateSet
* yyset
)
1118 yyset
->yycapacity
= 16;
1119 yyset
->yystates
= (yyGLRState
**) YYMALLOC (16 * sizeof yyset
->yystates
[0]);
1120 if (! yyset
->yystates
)
1122 yyset
->yystates
[0] = YY_NULL
;
1123 yyset
->yylookaheadNeeds
=
1124 (yybool
*) YYMALLOC (16 * sizeof yyset
->yylookaheadNeeds
[0]);
1125 if (! yyset
->yylookaheadNeeds
)
1127 YYFREE (yyset
->yystates
);
1133 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
1135 YYFREE (yyset
->yystates
);
1136 YYFREE (yyset
->yylookaheadNeeds
);
1139 /** Initialize STACK to a single empty stack, with total maximum
1140 * capacity for all stacks of SIZE. */
1142 yyinitGLRStack (yyGLRStack
* yystackp
, size_t yysize
)
1144 yystackp
->yyerrState
= 0;
1146 yystackp
->yyspaceLeft
= yysize
;
1148 (yyGLRStackItem
*) YYMALLOC (yysize
* sizeof yystackp
->yynextFree
[0]);
1149 if (!yystackp
->yyitems
)
1151 yystackp
->yynextFree
= yystackp
->yyitems
;
1152 yystackp
->yysplitPoint
= YY_NULL
;
1153 yystackp
->yylastDeleted
= YY_NULL
;
1154 return yyinitStateSet (&yystackp
->yytops
);
1158 #if YYSTACKEXPANDABLE
1159 # define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
1160 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
1162 /** If STACK is expandable, extend it. WARNING: Pointers into the
1163 stack from outside should be considered invalid after this call.
1164 We always expand when there are 1 or fewer items left AFTER an
1165 allocation, so that we can avoid having external pointers exist
1166 across an allocation. */
1168 yyexpandGLRStack (yyGLRStack
* yystackp
)
1170 yyGLRStackItem
* yynewItems
;
1171 yyGLRStackItem
* yyp0
, *yyp1
;
1174 size_t yysize
= yystackp
->yynextFree
- yystackp
->yyitems
;
1175 if (YYMAXDEPTH
- YYHEADROOM
< yysize
)
1176 yyMemoryExhausted (yystackp
);
1177 yynewSize
= 2*yysize
;
1178 if (YYMAXDEPTH
< yynewSize
)
1179 yynewSize
= YYMAXDEPTH
;
1180 yynewItems
= (yyGLRStackItem
*) YYMALLOC (yynewSize
* sizeof yynewItems
[0]);
1182 yyMemoryExhausted (yystackp
);
1183 for (yyp0
= yystackp
->yyitems
, yyp1
= yynewItems
, yyn
= yysize
;
1185 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
1188 if (*(yybool
*) yyp0
)
1190 yyGLRState
* yys0
= &yyp0
->yystate
;
1191 yyGLRState
* yys1
= &yyp1
->yystate
;
1192 if (yys0
->yypred
!= YY_NULL
)
1194 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
1195 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= YY_NULL
)
1196 yys1
->yysemantics
.yyfirstVal
=
1197 YYRELOC (yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
1201 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
1202 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
1203 if (yyv0
->yystate
!= YY_NULL
)
1204 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
1205 if (yyv0
->yynext
!= YY_NULL
)
1206 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
1209 if (yystackp
->yysplitPoint
!= YY_NULL
)
1210 yystackp
->yysplitPoint
= YYRELOC (yystackp
->yyitems
, yynewItems
,
1211 yystackp
->yysplitPoint
, yystate
);
1213 for (yyn
= 0; yyn
< yystackp
->yytops
.yysize
; yyn
+= 1)
1214 if (yystackp
->yytops
.yystates
[yyn
] != YY_NULL
)
1215 yystackp
->yytops
.yystates
[yyn
] =
1216 YYRELOC (yystackp
->yyitems
, yynewItems
,
1217 yystackp
->yytops
.yystates
[yyn
], yystate
);
1218 YYFREE (yystackp
->yyitems
);
1219 yystackp
->yyitems
= yynewItems
;
1220 yystackp
->yynextFree
= yynewItems
+ yysize
;
1221 yystackp
->yyspaceLeft
= yynewSize
- yysize
;
1226 yyfreeGLRStack (yyGLRStack
* yystackp
)
1228 YYFREE (yystackp
->yyitems
);
1229 yyfreeStateSet (&yystackp
->yytops
);
1232 /** Assuming that S is a GLRState somewhere on STACK, update the
1233 * splitpoint of STACK, if needed, so that it is at least as deep as
1236 yyupdateSplit (yyGLRStack
* yystackp
, yyGLRState
* yys
)
1238 if (yystackp
->yysplitPoint
!= YY_NULL
&& yystackp
->yysplitPoint
> yys
)
1239 yystackp
->yysplitPoint
= yys
;
1242 /** Invalidate stack #K in STACK. */
1244 yymarkStackDeleted (yyGLRStack
* yystackp
, size_t yyk
)
1246 if (yystackp
->yytops
.yystates
[yyk
] != YY_NULL
)
1247 yystackp
->yylastDeleted
= yystackp
->yytops
.yystates
[yyk
];
1248 yystackp
->yytops
.yystates
[yyk
] = YY_NULL
;
1251 /** Undelete the last stack that was marked as deleted. Can only be
1252 done once after a deletion, and only when all other stacks have
1255 yyundeleteLastStack (yyGLRStack
* yystackp
)
1257 if (yystackp
->yylastDeleted
== YY_NULL
|| yystackp
->yytops
.yysize
!= 0)
1259 yystackp
->yytops
.yystates
[0] = yystackp
->yylastDeleted
;
1260 yystackp
->yytops
.yysize
= 1;
1261 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1262 yystackp
->yylastDeleted
= YY_NULL
;
1266 yyremoveDeletes (yyGLRStack
* yystackp
)
1270 while (yyj
< yystackp
->yytops
.yysize
)
1272 if (yystackp
->yytops
.yystates
[yyi
] == YY_NULL
)
1276 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1278 yystackp
->yytops
.yysize
-= 1;
1282 yystackp
->yytops
.yystates
[yyj
] = yystackp
->yytops
.yystates
[yyi
];
1283 /* In the current implementation, it's unnecessary to copy
1284 yystackp->yytops.yylookaheadNeeds[yyi] since, after
1285 yyremoveDeletes returns, the parser immediately either enters
1286 deterministic operation or shifts a token. However, it doesn't
1287 hurt, and the code might evolve to need it. */
1288 yystackp
->yytops
.yylookaheadNeeds
[yyj
] =
1289 yystackp
->yytops
.yylookaheadNeeds
[yyi
];
1292 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1293 (unsigned long int) yyi
, (unsigned long int) yyj
));
1301 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1302 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1304 yyglrShift (yyGLRStack
* yystackp
, size_t yyk
, yyStateNum yylrState
,
1306 YYSTYPE
* yyvalp
]b4_locations_if([, YYLTYPE
* yylocp
])[)
1308 yyGLRState
* yynewState
= &yynewGLRStackItem (yystackp
, yytrue
)->yystate
;
1310 yynewState
->yylrState
= yylrState
;
1311 yynewState
->yyposn
= yyposn
;
1312 yynewState
->yyresolved
= yytrue
;
1313 yynewState
->yypred
= yystackp
->yytops
.yystates
[yyk
];
1314 yynewState
->yysemantics
.yysval
= *yyvalp
;]b4_locations_if([
1315 yynewState
->yyloc
= *yylocp
;])[
1316 yystackp
->yytops
.yystates
[yyk
] = yynewState
;
1318 YY_RESERVE_GLRSTACK (yystackp
);
1321 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1322 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1323 * semantic value of YYRHS under the action for YYRULE. */
1325 yyglrShiftDefer (yyGLRStack
* yystackp
, size_t yyk
, yyStateNum yylrState
,
1326 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
)
1328 yyGLRState
* yynewState
= &yynewGLRStackItem (yystackp
, yytrue
)->yystate
;
1330 yynewState
->yylrState
= yylrState
;
1331 yynewState
->yyposn
= yyposn
;
1332 yynewState
->yyresolved
= yyfalse
;
1333 yynewState
->yypred
= yystackp
->yytops
.yystates
[yyk
];
1334 yynewState
->yysemantics
.yyfirstVal
= YY_NULL
;
1335 yystackp
->yytops
.yystates
[yyk
] = yynewState
;
1337 /* Invokes YY_RESERVE_GLRSTACK. */
1338 yyaddDeferredAction (yystackp
, yyk
, yynewState
, rhs
, yyrule
);
1341 /** Pop the symbols consumed by reduction #RULE from the top of stack
1342 * #K of STACK, and perform the appropriate semantic action on their
1343 * semantic values. Assumes that all ambiguities in semantic values
1344 * have been previously resolved. Set *VALP to the resulting value,
1345 * and *LOCP to the computed location (if any). Return value is as
1346 * for userAction. */
1347 static inline YYRESULTTAG
1348 yydoAction (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1349 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
1351 int yynrhs
= yyrhsLength (yyrule
);
1353 if (yystackp
->yysplitPoint
== YY_NULL
)
1355 /* Standard special case: single stack. */
1356 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystackp
->yytops
.yystates
[yyk
];
1357 YYASSERT (yyk
== 0);
1358 yystackp
->yynextFree
-= yynrhs
;
1359 yystackp
->yyspaceLeft
+= yynrhs
;
1360 yystackp
->yytops
.yystates
[0] = & yystackp
->yynextFree
[-1].yystate
;
1361 return yyuserAction (yyrule
, yynrhs
, rhs
, yystackp
,
1362 yyvalp
]b4_locuser_args
[);
1366 /* At present, doAction is never called in nondeterministic
1367 * mode, so this branch is never taken. It is here in
1368 * anticipation of a future feature that will allow immediate
1369 * evaluation of selected actions in nondeterministic mode. */
1372 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1373 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1374 = yystackp
->yytops
.yystates
[yyk
];]b4_locations_if([[
1376 /* Set default location. */
1377 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
- 1].yystate
.yyloc
= yys
->yyloc
;]])[
1378 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1383 yyupdateSplit (yystackp
, yys
);
1384 yystackp
->yytops
.yystates
[yyk
] = yys
;
1385 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1386 yystackp
, yyvalp
]b4_locuser_args
[);
1390 #if !]b4_api_PREFIX[DEBUG
1391 # define YY_REDUCE_PRINT(Args)
1393 # define YY_REDUCE_PRINT(Args) \
1396 yy_reduce_print Args; \
1399 /*----------------------------------------------------------.
1400 | Report that the RULE is going to be reduced on stack #K. |
1401 `----------------------------------------------------------*/
1403 /*ARGSUSED*/ static inline void
1404 yy_reduce_print (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1405 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
1407 int yynrhs
= yyrhsLength (yyrule
);
1408 yybool yynormal
__attribute__ ((__unused__
)) =
1409 (yystackp
->yysplitPoint
== YY_NULL
);
1410 yyGLRStackItem
* yyvsp
= (yyGLRStackItem
*) yystackp
->yytops
.yystates
[yyk
];
1413 YYUSE (yyvalp
);]b4_locations_if([
1415 ]b4_parse_param_use
[]dnl
1416 [ YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu):\n",
1417 (unsigned long int) yyk
, yyrule
- 1,
1418 (unsigned long int) yyrline
[yyrule
]);
1419 /* The symbols being reduced. */
1420 for (yyi
= 0; yyi
< yynrhs
; yyi
++)
1422 YYFPRINTF (stderr
, " $%d = ", yyi
+ 1);
1423 yy_symbol_print (stderr
, yyrhs
[yyprhs
[yyrule
] + yyi
],
1424 &]b4_rhs_value(yynrhs
, yyi
+ 1)[
1425 ]b4_locations_if([, &]b4_rhs_location(yynrhs
, yyi
+ 1))[]dnl
1427 YYFPRINTF (stderr
, "\n");
1432 /** Pop items off stack #K of STACK according to grammar rule RULE,
1433 * and push back on the resulting nonterminal symbol. Perform the
1434 * semantic action associated with RULE and store its value with the
1435 * newly pushed state, if FORCEEVAL or if STACK is currently
1436 * unambiguous. Otherwise, store the deferred semantic action with
1437 * the new state. If the new state would have an identical input
1438 * position, LR state, and predecessor to an existing state on the stack,
1439 * it is identified with that existing state, eliminating stack #K from
1440 * the STACK. In this case, the (necessarily deferred) semantic value is
1441 * added to the options for the existing state's semantic value.
1443 static inline YYRESULTTAG
1444 yyglrReduce (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1445 yybool yyforceEval
]b4_user_formals
[)
1447 size_t yyposn
= yystackp
->yytops
.yystates
[yyk
]->yyposn
;
1449 if (yyforceEval
|| yystackp
->yysplitPoint
== YY_NULL
)
1451 YYSTYPE yysval
;]b4_locations_if([
1454 YY_REDUCE_PRINT ((yystackp
, yyk
, yyrule
, &yysval
]b4_locuser_args([&yyloc
])[));
1455 YYCHK (yydoAction (yystackp
, yyk
, yyrule
, &yysval
]b4_locuser_args([&yyloc
])[));
1456 YY_SYMBOL_PRINT ("-> $$ =", yyr1
[yyrule
], &yysval
, &yyloc
);
1457 yyglrShift (yystackp
, yyk
,
1458 yyLRgotoState (yystackp
->yytops
.yystates
[yyk
]->yylrState
,
1459 yylhsNonterm (yyrule
)),
1460 yyposn
, &yysval
]b4_locations_if([, &yyloc
])[);
1466 yyGLRState
* yys
, *yys0
= yystackp
->yytops
.yystates
[yyk
];
1467 yyStateNum yynewLRState
;
1469 for (yys
= yystackp
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1475 yyupdateSplit (yystackp
, yys
);
1476 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1478 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
1479 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1480 for (yyi
= 0; yyi
< yystackp
->yytops
.yysize
; yyi
+= 1)
1481 if (yyi
!= yyk
&& yystackp
->yytops
.yystates
[yyi
] != YY_NULL
)
1483 yyGLRState
*yysplit
= yystackp
->yysplitPoint
;
1484 yyGLRState
*yyp
= yystackp
->yytops
.yystates
[yyi
];
1485 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1487 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1489 yyaddDeferredAction (yystackp
, yyk
, yyp
, yys0
, yyrule
);
1490 yymarkStackDeleted (yystackp
, yyk
);
1491 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1492 (unsigned long int) yyk
,
1493 (unsigned long int) yyi
));
1499 yystackp
->yytops
.yystates
[yyk
] = yys
;
1500 yyglrShiftDefer (yystackp
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
);
1506 yysplitStack (yyGLRStack
* yystackp
, size_t yyk
)
1508 if (yystackp
->yysplitPoint
== YY_NULL
)
1510 YYASSERT (yyk
== 0);
1511 yystackp
->yysplitPoint
= yystackp
->yytops
.yystates
[yyk
];
1513 if (yystackp
->yytops
.yysize
>= yystackp
->yytops
.yycapacity
)
1515 yyGLRState
** yynewStates
;
1516 yybool
* yynewLookaheadNeeds
;
1518 yynewStates
= YY_NULL
;
1520 if (yystackp
->yytops
.yycapacity
1521 > (YYSIZEMAX
/ (2 * sizeof yynewStates
[0])))
1522 yyMemoryExhausted (yystackp
);
1523 yystackp
->yytops
.yycapacity
*= 2;
1526 (yyGLRState
**) YYREALLOC (yystackp
->yytops
.yystates
,
1527 (yystackp
->yytops
.yycapacity
1528 * sizeof yynewStates
[0]));
1529 if (yynewStates
== YY_NULL
)
1530 yyMemoryExhausted (yystackp
);
1531 yystackp
->yytops
.yystates
= yynewStates
;
1533 yynewLookaheadNeeds
=
1534 (yybool
*) YYREALLOC (yystackp
->yytops
.yylookaheadNeeds
,
1535 (yystackp
->yytops
.yycapacity
1536 * sizeof yynewLookaheadNeeds
[0]));
1537 if (yynewLookaheadNeeds
== YY_NULL
)
1538 yyMemoryExhausted (yystackp
);
1539 yystackp
->yytops
.yylookaheadNeeds
= yynewLookaheadNeeds
;
1541 yystackp
->yytops
.yystates
[yystackp
->yytops
.yysize
]
1542 = yystackp
->yytops
.yystates
[yyk
];
1543 yystackp
->yytops
.yylookaheadNeeds
[yystackp
->yytops
.yysize
]
1544 = yystackp
->yytops
.yylookaheadNeeds
[yyk
];
1545 yystackp
->yytops
.yysize
+= 1;
1546 return yystackp
->yytops
.yysize
-1;
1549 /** True iff Y0 and Y1 represent identical options at the top level.
1550 * That is, they represent the same rule applied to RHS symbols
1551 * that produce the same terminal symbols. */
1553 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1555 if (yyy0
->yyrule
== yyy1
->yyrule
)
1557 yyGLRState
*yys0
, *yys1
;
1559 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1560 yyn
= yyrhsLength (yyy0
->yyrule
);
1562 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1563 if (yys0
->yyposn
!= yys1
->yyposn
)
1571 /** Assuming identicalOptions (Y0,Y1), destructively merge the
1572 * alternative semantic values for the RHS-symbols of Y1 and Y0. */
1574 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1576 yyGLRState
*yys0
, *yys1
;
1578 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1579 yyn
= yyrhsLength (yyy0
->yyrule
);
1581 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1585 else if (yys0
->yyresolved
)
1587 yys1
->yyresolved
= yytrue
;
1588 yys1
->yysemantics
.yysval
= yys0
->yysemantics
.yysval
;
1590 else if (yys1
->yyresolved
)
1592 yys0
->yyresolved
= yytrue
;
1593 yys0
->yysemantics
.yysval
= yys1
->yysemantics
.yysval
;
1597 yySemanticOption
** yyz0p
= &yys0
->yysemantics
.yyfirstVal
;
1598 yySemanticOption
* yyz1
= yys1
->yysemantics
.yyfirstVal
;
1599 while (YYID (yytrue
))
1601 if (yyz1
== *yyz0p
|| yyz1
== YY_NULL
)
1603 else if (*yyz0p
== YY_NULL
)
1608 else if (*yyz0p
< yyz1
)
1610 yySemanticOption
* yyz
= *yyz0p
;
1612 yyz1
= yyz1
->yynext
;
1613 (*yyz0p
)->yynext
= yyz
;
1615 yyz0p
= &(*yyz0p
)->yynext
;
1617 yys1
->yysemantics
.yyfirstVal
= yys0
->yysemantics
.yyfirstVal
;
1622 /** Y0 and Y1 represent two possible actions to take in a given
1623 * parsing state; return 0 if no combination is possible,
1624 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1626 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1628 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1629 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1633 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1638 if (p0
== 0 || p1
== 0)
1647 static YYRESULTTAG
yyresolveValue (yyGLRState
* yys
,
1648 yyGLRStack
* yystackp
]b4_user_formals
[);
1651 /** Resolve the previous N states starting at and including state S. If result
1652 * != yyok, some states may have been left unresolved possibly with empty
1653 * semantic option chains. Regardless of whether result = yyok, each state
1654 * has been left with consistent data so that yydestroyGLRState can be invoked
1657 yyresolveStates (yyGLRState
* yys
, int yyn
,
1658 yyGLRStack
* yystackp
]b4_user_formals
[)
1662 YYASSERT (yys
->yypred
);
1663 YYCHK (yyresolveStates (yys
->yypred
, yyn
-1, yystackp
]b4_user_args
[));
1664 if (! yys
->yyresolved
)
1665 YYCHK (yyresolveValue (yys
, yystackp
]b4_user_args
[));
1670 /** Resolve the states for the RHS of OPT, perform its user action, and return
1671 * the semantic value and location. Regardless of whether result = yyok, all
1672 * RHS states have been destroyed (assuming the user action destroys all RHS
1673 * semantic values if invoked). */
1675 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystackp
,
1676 YYSTYPE
* yyvalp
]b4_locuser_formals
[)
1678 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1679 int yynrhs
= yyrhsLength (yyopt
->yyrule
);
1680 YYRESULTTAG yyflag
=
1681 yyresolveStates (yyopt
->yystate
, yynrhs
, yystackp
]b4_user_args
[);
1685 for (yys
= yyopt
->yystate
; yynrhs
> 0; yys
= yys
->yypred
, yynrhs
-= 1)
1686 yydestroyGLRState ("Cleanup: popping", yys
]b4_user_args
[);
1690 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;]b4_locations_if([[
1692 /* Set default location. */
1693 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
- 1].yystate
.yyloc
= yyopt
->yystate
->yyloc
;]])[
1695 int yychar_current
= yychar
;
1696 YYSTYPE yylval_current
= yylval
;]b4_locations_if([
1697 YYLTYPE yylloc_current
= yylloc
;])[
1698 yychar
= yyopt
->yyrawchar
;
1699 yylval
= yyopt
->yyval
;]b4_locations_if([
1700 yylloc
= yyopt
->yyloc
;])[
1701 yyflag
= yyuserAction (yyopt
->yyrule
, yynrhs
,
1702 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1703 yystackp
, yyvalp
]b4_locuser_args
[);
1704 yychar
= yychar_current
;
1705 yylval
= yylval_current
;]b4_locations_if([
1706 yylloc
= yylloc_current
;])[
1711 #if ]b4_api_PREFIX[DEBUG
1713 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1715 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1718 yyGLRState
* yystates
[1 + YYMAXRHS
];
1719 yyGLRState yyleftmost_state
;
1721 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1722 yystates
[yyi
] = yys
;
1725 yyleftmost_state
.yyposn
= 0;
1726 yystates
[0] = &yyleftmost_state
;
1731 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1732 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1733 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1736 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1737 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1738 yyx
->yyrule
- 1, (unsigned long int) (yys
->yyposn
+ 1),
1739 (unsigned long int) yyx
->yystate
->yyposn
);
1740 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1742 if (yystates
[yyi
]->yyresolved
)
1744 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1745 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1746 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1748 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1749 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1750 (unsigned long int) (yystates
[yyi
- 1]->yyposn
+ 1),
1751 (unsigned long int) yystates
[yyi
]->yyposn
);
1754 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1759 /*ARGSUSED*/ static YYRESULTTAG
1760 yyreportAmbiguity (yySemanticOption
* yyx0
,
1761 yySemanticOption
* yyx1
]b4_pure_formals
[)
1766 #if ]b4_api_PREFIX[DEBUG
1767 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1768 YYFPRINTF (stderr
, "Option 1,\n");
1769 yyreportTree (yyx0
, 2);
1770 YYFPRINTF (stderr
, "\nOption 2,\n");
1771 yyreportTree (yyx1
, 2);
1772 YYFPRINTF (stderr
, "\n");
1775 yyerror (]b4_yyerror_args
[YY_("syntax is ambiguous"));
1777 }]b4_locations_if([[
1779 /** Starting at and including state S1, resolve the location for each of the
1780 * previous N1 states that is unresolved. The first semantic option of a state
1781 * is always chosen. */
1783 yyresolveLocations (yyGLRState
* yys1
, int yyn1
,
1784 yyGLRStack
*yystackp
]b4_user_formals
[)
1788 yyresolveLocations (yys1
->yypred
, yyn1
- 1, yystackp
]b4_user_args
[);
1789 if (!yys1
->yyresolved
)
1791 yyGLRStackItem yyrhsloc
[1 + YYMAXRHS
];
1793 yySemanticOption
*yyoption
= yys1
->yysemantics
.yyfirstVal
;
1794 YYASSERT (yyoption
!= YY_NULL
);
1795 yynrhs
= yyrhsLength (yyoption
->yyrule
);
1800 yyresolveLocations (yyoption
->yystate
, yynrhs
,
1801 yystackp
]b4_user_args
[);
1802 for (yys
= yyoption
->yystate
, yyn
= yynrhs
;
1804 yys
= yys
->yypred
, yyn
-= 1)
1805 yyrhsloc
[yyn
].yystate
.yyloc
= yys
->yyloc
;
1809 /* Both yyresolveAction and yyresolveLocations traverse the GSS
1810 in reverse rightmost order. It is only necessary to invoke
1811 yyresolveLocations on a subforest for which yyresolveAction
1812 would have been invoked next had an ambiguity not been
1813 detected. Thus the location of the previous state (but not
1814 necessarily the previous state itself) is guaranteed to be
1815 resolved already. */
1816 yyGLRState
*yyprevious
= yyoption
->yystate
;
1817 yyrhsloc
[0].yystate
.yyloc
= yyprevious
->yyloc
;
1820 int yychar_current
= yychar
;
1821 YYSTYPE yylval_current
= yylval
;
1822 YYLTYPE yylloc_current
= yylloc
;
1823 yychar
= yyoption
->yyrawchar
;
1824 yylval
= yyoption
->yyval
;
1825 yylloc
= yyoption
->yyloc
;
1826 YYLLOC_DEFAULT ((yys1
->yyloc
), yyrhsloc
, yynrhs
);
1827 yychar
= yychar_current
;
1828 yylval
= yylval_current
;
1829 yylloc
= yylloc_current
;
1835 /** Resolve the ambiguity represented in state S, perform the indicated
1836 * actions, and set the semantic value of S. If result != yyok, the chain of
1837 * semantic options in S has been cleared instead or it has been left
1838 * unmodified except that redundant options may have been removed. Regardless
1839 * of whether result = yyok, S has been left with consistent data so that
1840 * yydestroyGLRState can be invoked if necessary. */
1842 yyresolveValue (yyGLRState
* yys
, yyGLRStack
* yystackp
]b4_user_formals
[)
1844 yySemanticOption
* yyoptionList
= yys
->yysemantics
.yyfirstVal
;
1845 yySemanticOption
* yybest
= yyoptionList
;
1846 yySemanticOption
** yypp
;
1847 yybool yymerge
= yyfalse
;
1849 YYRESULTTAG yyflag
;]b4_locations_if([
1850 YYLTYPE
*yylocp
= &yys
->yyloc
;])[
1852 for (yypp
= &yyoptionList
->yynext
; *yypp
!= YY_NULL
; )
1854 yySemanticOption
* yyp
= *yypp
;
1856 if (yyidenticalOptions (yybest
, yyp
))
1858 yymergeOptionSets (yybest
, yyp
);
1859 *yypp
= yyp
->yynext
;
1863 switch (yypreference (yybest
, yyp
))
1865 case 0:]b4_locations_if([[
1866 yyresolveLocations (yys
, 1, yystackp
]b4_user_args
[);]])[
1867 return yyreportAmbiguity (yybest
, yyp
]b4_pure_args
[);
1879 /* This cannot happen so it is not worth a YYASSERT (yyfalse),
1880 but some compilers complain if the default case is
1884 yypp
= &yyp
->yynext
;
1890 yySemanticOption
* yyp
;
1891 int yyprec
= yydprec
[yybest
->yyrule
];
1892 yyflag
= yyresolveAction (yybest
, yystackp
, &yysval
]b4_locuser_args
[);
1894 for (yyp
= yybest
->yynext
; yyp
!= YY_NULL
; yyp
= yyp
->yynext
)
1896 if (yyprec
== yydprec
[yyp
->yyrule
])
1898 YYSTYPE yysval_other
;]b4_locations_if([
1900 yyflag
= yyresolveAction (yyp
, yystackp
, &yysval_other
]b4_locuser_args([&yydummy
])[);
1903 yydestruct ("Cleanup: discarding incompletely merged value for",
1904 yystos
[yys
->yylrState
],
1905 &yysval
]b4_locuser_args
[);
1908 yyuserMerge (yymerger
[yyp
->yyrule
], &yysval
, &yysval_other
);
1913 yyflag
= yyresolveAction (yybest
, yystackp
, &yysval
]b4_locuser_args([yylocp
])[);
1917 yys
->yyresolved
= yytrue
;
1918 yys
->yysemantics
.yysval
= yysval
;
1921 yys
->yysemantics
.yyfirstVal
= YY_NULL
;
1926 yyresolveStack (yyGLRStack
* yystackp
]b4_user_formals
[)
1928 if (yystackp
->yysplitPoint
!= YY_NULL
)
1933 for (yyn
= 0, yys
= yystackp
->yytops
.yystates
[0];
1934 yys
!= yystackp
->yysplitPoint
;
1935 yys
= yys
->yypred
, yyn
+= 1)
1937 YYCHK (yyresolveStates (yystackp
->yytops
.yystates
[0], yyn
, yystackp
1944 yycompressStack (yyGLRStack
* yystackp
)
1946 yyGLRState
* yyp
, *yyq
, *yyr
;
1948 if (yystackp
->yytops
.yysize
!= 1 || yystackp
->yysplitPoint
== YY_NULL
)
1951 for (yyp
= yystackp
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= YY_NULL
;
1952 yyp
!= yystackp
->yysplitPoint
;
1953 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1956 yystackp
->yyspaceLeft
+= yystackp
->yynextFree
- yystackp
->yyitems
;
1957 yystackp
->yynextFree
= ((yyGLRStackItem
*) yystackp
->yysplitPoint
) + 1;
1958 yystackp
->yyspaceLeft
-= yystackp
->yynextFree
- yystackp
->yyitems
;
1959 yystackp
->yysplitPoint
= YY_NULL
;
1960 yystackp
->yylastDeleted
= YY_NULL
;
1962 while (yyr
!= YY_NULL
)
1964 yystackp
->yynextFree
->yystate
= *yyr
;
1966 yystackp
->yynextFree
->yystate
.yypred
= &yystackp
->yynextFree
[-1].yystate
;
1967 yystackp
->yytops
.yystates
[0] = &yystackp
->yynextFree
->yystate
;
1968 yystackp
->yynextFree
+= 1;
1969 yystackp
->yyspaceLeft
-= 1;
1974 yyprocessOneStack (yyGLRStack
* yystackp
, size_t yyk
,
1975 size_t yyposn
]b4_pure_formals
[)
1978 const short int* yyconflicts
;
1981 while (yystackp
->yytops
.yystates
[yyk
] != YY_NULL
)
1983 yyStateNum yystate
= yystackp
->yytops
.yystates
[yyk
]->yylrState
;
1984 YYDPRINTF ((stderr
, "Stack %lu Entering state %d\n",
1985 (unsigned long int) yyk
, yystate
));
1987 YYASSERT (yystate
!= YYFINAL
);
1989 if (yyisDefaultedState (yystate
))
1991 yyrule
= yydefaultAction (yystate
);
1994 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
1995 (unsigned long int) yyk
));
1996 yymarkStackDeleted (yystackp
, yyk
);
1999 YYCHK (yyglrReduce (yystackp
, yyk
, yyrule
, yyfalse
]b4_user_args
[));
2004 yystackp
->yytops
.yylookaheadNeeds
[yyk
] = yytrue
;
2005 if (yychar
== YYEMPTY
)
2007 YYDPRINTF ((stderr
, "Reading a token: "));
2011 if (yychar
<= YYEOF
)
2013 yychar
= yytoken
= YYEOF
;
2014 YYDPRINTF ((stderr
, "Now at end of input.\n"));
2018 yytoken
= YYTRANSLATE (yychar
);
2019 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
2022 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
2024 while (*yyconflicts
!= 0)
2026 size_t yynewStack
= yysplitStack (yystackp
, yyk
);
2027 YYDPRINTF ((stderr
, "Splitting off stack %lu from %lu.\n",
2028 (unsigned long int) yynewStack
,
2029 (unsigned long int) yyk
));
2030 YYCHK (yyglrReduce (yystackp
, yynewStack
,
2031 *yyconflicts
, yyfalse
]b4_user_args
[));
2032 YYCHK (yyprocessOneStack (yystackp
, yynewStack
,
2033 yyposn
]b4_pure_args
[));
2037 if (yyisShiftAction (yyaction
))
2039 else if (yyisErrorAction (yyaction
))
2041 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
2042 (unsigned long int) yyk
));
2043 yymarkStackDeleted (yystackp
, yyk
);
2047 YYCHK (yyglrReduce (yystackp
, yyk
, -yyaction
,
2048 yyfalse
]b4_user_args
[));
2054 /*ARGSUSED*/ static void
2055 yyreportSyntaxError (yyGLRStack
* yystackp
]b4_user_formals
[)
2057 if (yystackp
->yyerrState
!= 0)
2059 #if ! YYERROR_VERBOSE
2060 yyerror (]b4_lyyerror_args
[YY_("syntax error"));
2062 yySymbol yytoken
= yychar
== YYEMPTY
? YYEMPTY
: YYTRANSLATE (yychar
);
2063 size_t yysize0
= yytnamerr (YY_NULL
, yytokenName (yytoken
));
2064 size_t yysize
= yysize0
;
2066 yybool yysize_overflow
= yyfalse
;
2067 char* yymsg
= YY_NULL
;
2068 enum { YYERROR_VERBOSE_ARGS_MAXIMUM
= 5 };
2069 /* Internationalized format string. */
2070 const char *yyformat
= YY_NULL
;
2071 /* Arguments of yyformat. */
2072 char const *yyarg
[YYERROR_VERBOSE_ARGS_MAXIMUM
];
2073 /* Number of reported tokens (one for the "unexpected", one per
2077 /* There are many possibilities here to consider:
2078 - If this state is a consistent state with a default action, then
2079 the only way this function was invoked is if the default action
2080 is an error action. In that case, don't check for expected
2081 tokens because there are none.
2082 - The only way there can be no lookahead present (in yychar) is if
2083 this state is a consistent state with a default action. Thus,
2084 detecting the absence of a lookahead is sufficient to determine
2085 that there is no unexpected or expected token to report. In that
2086 case, just report a simple "syntax error".
2087 - Don't assume there isn't a lookahead just because this state is a
2088 consistent state with a default action. There might have been a
2089 previous inconsistent state, consistent state with a non-default
2090 action, or user semantic action that manipulated yychar.
2091 - Of course, the expected token list depends on states to have
2092 correct lookahead information, and it depends on the parser not
2093 to perform extra reductions after fetching a lookahead from the
2094 scanner and before detecting a syntax error. Thus, state merging
2095 (from LALR or IELR) and default reductions corrupt the expected
2096 token list. However, the list is correct for canonical LR with
2097 one exception: it will still contain any token that will not be
2098 accepted due to an error action in a later state.
2100 if (yytoken
!= YYEMPTY
)
2102 int yyn
= yypact
[yystackp
->yytops
.yystates
[0]->yylrState
];
2103 yyarg
[yycount
++] = yytokenName (yytoken
);
2104 if (!yypact_value_is_default (yyn
))
2106 /* Start YYX at -YYN if negative to avoid negative indexes in
2107 YYCHECK. In other words, skip the first -YYN actions for this
2108 state because they are default actions. */
2109 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
2110 /* Stay within bounds of both yycheck and yytname. */
2111 int yychecklim
= YYLAST
- yyn
+ 1;
2112 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
2114 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
2115 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
2116 && !yytable_value_is_error (yytable
[yyx
+ yyn
]))
2118 if (yycount
== YYERROR_VERBOSE_ARGS_MAXIMUM
)
2124 yyarg
[yycount
++] = yytokenName (yyx
);
2125 yysize1
= yysize
+ yytnamerr (YY_NULL
, yytokenName (yyx
));
2126 yysize_overflow
|= yysize1
< yysize
;
2134 #define YYCASE_(N, S) \
2138 YYCASE_(0, YY_("syntax error"));
2139 YYCASE_(1, YY_("syntax error, unexpected %s"));
2140 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
2141 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
2142 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
2143 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
2147 yysize1
= yysize
+ strlen (yyformat
);
2148 yysize_overflow
|= yysize1
< yysize
;
2151 if (!yysize_overflow
)
2152 yymsg
= (char *) YYMALLOC (yysize
);
2158 while ((*yyp
= *yyformat
))
2160 if (*yyp
== '%' && yyformat
[1] == 's' && yyi
< yycount
)
2162 yyp
+= yytnamerr (yyp
, yyarg
[yyi
++]);
2171 yyerror (]b4_lyyerror_args
[yymsg
);
2176 yyerror (]b4_lyyerror_args
[YY_("syntax error"));
2177 yyMemoryExhausted (yystackp
);
2179 #endif /* YYERROR_VERBOSE */
2183 /* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP,
2184 yylval, and yylloc are the syntactic category, semantic value, and location
2185 of the lookahead. */
2186 /*ARGSUSED*/ static void
2187 yyrecoverSyntaxError (yyGLRStack
* yystackp
]b4_user_formals
[)
2192 if (yystackp
->yyerrState
== 3)
2193 /* We just shifted the error token and (perhaps) took some
2194 reductions. Skip tokens until we can proceed. */
2195 while (YYID (yytrue
))
2198 if (yychar
== YYEOF
)
2199 yyFail (yystackp
][]b4_lpure_args
[, YY_NULL
);
2200 if (yychar
!= YYEMPTY
)
2201 {]b4_locations_if([[
2202 /* We throw away the lookahead, but the error range
2203 of the shifted error token must take it into account. */
2204 yyGLRState
*yys
= yystackp
->yytops
.yystates
[0];
2205 yyGLRStackItem yyerror_range
[3];
2206 yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;
2207 yyerror_range
[2].yystate
.yyloc
= yylloc
;
2208 YYLLOC_DEFAULT ((yys
->yyloc
), yyerror_range
, 2);]])[
2209 yytoken
= YYTRANSLATE (yychar
);
2210 yydestruct ("Error: discarding",
2211 yytoken
, &yylval
]b4_locuser_args([&yylloc
])[);
2213 YYDPRINTF ((stderr
, "Reading a token: "));
2215 if (yychar
<= YYEOF
)
2217 yychar
= yytoken
= YYEOF
;
2218 YYDPRINTF ((stderr
, "Now at end of input.\n"));
2222 yytoken
= YYTRANSLATE (yychar
);
2223 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
2225 yyj
= yypact
[yystackp
->yytops
.yystates
[0]->yylrState
];
2226 if (yypact_value_is_default (yyj
))
2229 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != yytoken
)
2231 if (yydefact
[yystackp
->yytops
.yystates
[0]->yylrState
] != 0)
2234 else if (! yytable_value_is_error (yytable
[yyj
]))
2238 /* Reduce to one stack. */
2239 for (yyk
= 0; yyk
< yystackp
->yytops
.yysize
; yyk
+= 1)
2240 if (yystackp
->yytops
.yystates
[yyk
] != YY_NULL
)
2242 if (yyk
>= yystackp
->yytops
.yysize
)
2243 yyFail (yystackp
][]b4_lpure_args
[, YY_NULL
);
2244 for (yyk
+= 1; yyk
< yystackp
->yytops
.yysize
; yyk
+= 1)
2245 yymarkStackDeleted (yystackp
, yyk
);
2246 yyremoveDeletes (yystackp
);
2247 yycompressStack (yystackp
);
2249 /* Now pop stack until we find a state that shifts the error token. */
2250 yystackp
->yyerrState
= 3;
2251 while (yystackp
->yytops
.yystates
[0] != YY_NULL
)
2253 yyGLRState
*yys
= yystackp
->yytops
.yystates
[0];
2254 yyj
= yypact
[yys
->yylrState
];
2255 if (! yypact_value_is_default (yyj
))
2258 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
2259 && yyisShiftAction (yytable
[yyj
]))
2261 /* Shift the error token. */]b4_locations_if([[
2262 /* First adjust its location.*/
2264 yystackp
->yyerror_range
[2].yystate
.yyloc
= yylloc
;
2265 YYLLOC_DEFAULT (yyerrloc
, (yystackp
->yyerror_range
), 2);]])[
2266 YY_SYMBOL_PRINT ("Shifting", yystos
[yytable
[yyj
]],
2267 &yylval
, &yyerrloc
);
2268 yyglrShift (yystackp
, 0, yytable
[yyj
],
2269 yys
->yyposn
, &yylval
]b4_locations_if([, &yyerrloc
])[);
2270 yys
= yystackp
->yytops
.yystates
[0];
2273 }]b4_locations_if([[
2274 yystackp
->yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]])[
2275 if (yys
->yypred
!= YY_NULL
)
2276 yydestroyGLRState ("Error: popping", yys
]b4_user_args
[);
2277 yystackp
->yytops
.yystates
[0] = yys
->yypred
;
2278 yystackp
->yynextFree
-= 1;
2279 yystackp
->yyspaceLeft
+= 1;
2281 if (yystackp
->yytops
.yystates
[0] == YY_NULL
)
2282 yyFail (yystackp
][]b4_lpure_args
[, YY_NULL
);
2285 #define YYCHK1(YYE) \
2295 goto yyuser_error; \
2306 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
2310 yyGLRStack
* const yystackp
= &yystack
;
2313 YYDPRINTF ((stderr
, "Starting parse\n"));
2316 yylval
= yyval_default
;
2318 #if defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL
2319 yylloc
.first_line
= yylloc
.last_line
= ]b4_location_initial_line
[;
2320 yylloc
.first_column
= yylloc
.last_column
= ]b4_location_initial_column
[;
2323 m4_ifdef([b4_initial_action
], [
2324 m4_pushdef([b4_at_dollar
], [yylloc
])dnl
2325 m4_pushdef([b4_dollar_dollar
], [yylval
])dnl
2326 /* User initialization code. */
2327 b4_user_initial_action
2328 m4_popdef([b4_dollar_dollar
])dnl
2329 m4_popdef([b4_at_dollar
])])dnl
2331 if (! yyinitGLRStack (yystackp
, YYINITDEPTH
))
2332 goto yyexhaustedlab
;
2333 switch (YYSETJMP (yystack
.yyexception_buffer
))
2336 case 1: goto yyabortlab
;
2337 case 2: goto yyexhaustedlab
;
2338 default: goto yybuglab
;
2340 yyglrShift (&yystack
, 0, 0, 0, &yylval
]b4_locations_if([, &yylloc
])[);
2343 while (YYID (yytrue
))
2345 /* For efficiency, we have two loops, the first of which is
2346 specialized to deterministic operation (single stack, no
2347 potential ambiguity). */
2349 while (YYID (yytrue
))
2353 const short int* yyconflicts
;
2355 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
2356 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
2357 if (yystate
== YYFINAL
)
2359 if (yyisDefaultedState (yystate
))
2361 yyrule
= yydefaultAction (yystate
);
2364 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2365 yyreportSyntaxError (&yystack
]b4_user_args
[);
2368 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_user_args
[));
2373 if (yychar
== YYEMPTY
)
2375 YYDPRINTF ((stderr
, "Reading a token: "));
2379 if (yychar
<= YYEOF
)
2381 yychar
= yytoken
= YYEOF
;
2382 YYDPRINTF ((stderr
, "Now at end of input.\n"));
2386 yytoken
= YYTRANSLATE (yychar
);
2387 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
2390 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
2391 if (*yyconflicts
!= 0)
2393 if (yyisShiftAction (yyaction
))
2395 YY_SYMBOL_PRINT ("Shifting", yytoken
, &yylval
, &yylloc
);
2398 yyglrShift (&yystack
, 0, yyaction
, yyposn
, &yylval
]b4_locations_if([, &yylloc
])[);
2399 if (0 < yystack
.yyerrState
)
2400 yystack
.yyerrState
-= 1;
2402 else if (yyisErrorAction (yyaction
))
2404 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2405 yyreportSyntaxError (&yystack
]b4_user_args
[);
2409 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_user_args
[));
2413 while (YYID (yytrue
))
2415 yySymbol yytoken_to_shift
;
2418 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2419 yystackp
->yytops
.yylookaheadNeeds
[yys
] = yychar
!= YYEMPTY
;
2421 /* yyprocessOneStack returns one of three things:
2423 - An error flag. If the caller is yyprocessOneStack, it
2424 immediately returns as well. When the caller is finally
2425 yyparse, it jumps to an error label via YYCHK1.
2427 - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
2428 (&yystack, yys), which sets the top state of yys to NULL. Thus,
2429 yyparse's following invocation of yyremoveDeletes will remove
2432 - yyok, when ready to shift a token.
2434 Except in the first case, yyparse will invoke yyremoveDeletes and
2435 then shift the next token onto all remaining stacks. This
2436 synchronization of the shift (that is, after all preceding
2437 reductions on all stacks) helps prevent double destructor calls
2438 on yylval in the event of memory exhaustion. */
2440 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2441 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
]b4_lpure_args
[));
2442 yyremoveDeletes (&yystack
);
2443 if (yystack
.yytops
.yysize
== 0)
2445 yyundeleteLastStack (&yystack
);
2446 if (yystack
.yytops
.yysize
== 0)
2447 yyFail (&yystack
][]b4_lpure_args
[, YY_("syntax error"));
2448 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
2449 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
2450 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2451 yyreportSyntaxError (&yystack
]b4_user_args
[);
2455 /* If any yyglrShift call fails, it will fail after shifting. Thus,
2456 a copy of yylval will already be on stack 0 in the event of a
2457 failure in the following loop. Thus, yychar is set to YYEMPTY
2458 before the loop to make sure the user destructor for yylval isn't
2460 yytoken_to_shift
= YYTRANSLATE (yychar
);
2463 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2466 const short int* yyconflicts
;
2467 yyStateNum yystate
= yystack
.yytops
.yystates
[yys
]->yylrState
;
2468 yygetLRActions (yystate
, yytoken_to_shift
, &yyaction
,
2470 /* Note that yyconflicts were handled by yyprocessOneStack. */
2471 YYDPRINTF ((stderr
, "On stack %lu, ", (unsigned long int) yys
));
2472 YY_SYMBOL_PRINT ("shifting", yytoken_to_shift
, &yylval
, &yylloc
);
2473 yyglrShift (&yystack
, yys
, yyaction
, yyposn
,
2474 &yylval
]b4_locations_if([, &yylloc
])[);
2475 YYDPRINTF ((stderr
, "Stack %lu now in state #%d\n",
2476 (unsigned long int) yys
,
2477 yystack
.yytops
.yystates
[yys
]->yylrState
));
2480 if (yystack
.yytops
.yysize
== 1)
2482 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
2483 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
2484 yycompressStack (&yystack
);
2490 yyrecoverSyntaxError (&yystack
]b4_user_args
[);
2491 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
2507 yyerror (]b4_lyyerror_args
[YY_("memory exhausted"));
2512 if (yychar
!= YYEMPTY
)
2513 yydestruct ("Cleanup: discarding lookahead",
2514 YYTRANSLATE (yychar
), &yylval
]b4_locuser_args([&yylloc
])[);
2516 /* If the stack is well-formed, pop the stack until it is empty,
2517 destroying its entries as we go. But free the stack regardless
2518 of whether it is well-formed. */
2519 if (yystack
.yyitems
)
2521 yyGLRState
** yystates
= yystack
.yytops
.yystates
;
2524 size_t yysize
= yystack
.yytops
.yysize
;
2526 for (yyk
= 0; yyk
< yysize
; yyk
+= 1)
2529 while (yystates
[yyk
])
2531 yyGLRState
*yys
= yystates
[yyk
];
2532 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]]
2533 )[ if (yys
->yypred
!= YY_NULL
)
2534 yydestroyGLRState ("Cleanup: popping", yys
]b4_user_args
[);
2535 yystates
[yyk
] = yys
->yypred
;
2536 yystack
.yynextFree
-= 1;
2537 yystack
.yyspaceLeft
+= 1;
2542 yyfreeGLRStack (&yystack
);
2545 /* Make sure YYID is used. */
2546 return YYID (yyresult
);
2549 /* DEBUGGING ONLY */
2550 #if ]b4_api_PREFIX[DEBUG
2551 static void yypstack (yyGLRStack
* yystackp
, size_t yyk
)
2552 __attribute__ ((__unused__
));
2553 static void yypdumpstack (yyGLRStack
* yystackp
) __attribute__ ((__unused__
));
2556 yy_yypstack (yyGLRState
* yys
)
2560 yy_yypstack (yys
->yypred
);
2561 YYFPRINTF (stderr
, " -> ");
2563 YYFPRINTF (stderr
, "%d@@%lu", yys
->yylrState
,
2564 (unsigned long int) yys
->yyposn
);
2568 yypstates (yyGLRState
* yyst
)
2570 if (yyst
== YY_NULL
)
2571 YYFPRINTF (stderr
, "<null>");
2574 YYFPRINTF (stderr
, "\n");
2578 yypstack (yyGLRStack
* yystackp
, size_t yyk
)
2580 yypstates (yystackp
->yytops
.yystates
[yyk
]);
2583 #define YYINDEX(YYX) \
2584 ((YYX) == YY_NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
2588 yypdumpstack (yyGLRStack
* yystackp
)
2590 yyGLRStackItem
* yyp
;
2592 for (yyp
= yystackp
->yyitems
; yyp
< yystackp
->yynextFree
; yyp
+= 1)
2594 YYFPRINTF (stderr
, "%3lu. ",
2595 (unsigned long int) (yyp
- yystackp
->yyitems
));
2596 if (*(yybool
*) yyp
)
2598 YYFPRINTF (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
2599 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
2600 (unsigned long int) yyp
->yystate
.yyposn
,
2601 (long int) YYINDEX (yyp
->yystate
.yypred
));
2602 if (! yyp
->yystate
.yyresolved
)
2603 YYFPRINTF (stderr
, ", firstVal: %ld",
2604 (long int) YYINDEX (yyp
->yystate
2605 .yysemantics
.yyfirstVal
));
2609 YYFPRINTF (stderr
, "Option. rule: %d, state: %ld, next: %ld",
2610 yyp
->yyoption
.yyrule
- 1,
2611 (long int) YYINDEX (yyp
->yyoption
.yystate
),
2612 (long int) YYINDEX (yyp
->yyoption
.yynext
));
2614 YYFPRINTF (stderr
, "\n");
2616 YYFPRINTF (stderr
, "Tops:");
2617 for (yyi
= 0; yyi
< yystackp
->yytops
.yysize
; yyi
+= 1)
2618 YYFPRINTF (stderr
, "%lu: %ld; ", (unsigned long int) yyi
,
2619 (long int) YYINDEX (yystackp
->yytops
.yystates
[yyi
]));
2620 YYFPRINTF (stderr
, "\n");
2627 dnl glr
.cc produces its own header
.
2629 m4_if(b4_skeleton
, ["glr.c"],
2631 [@
output(b4_spec_defines_file@
)@
2632 b4_copyright([Skeleton interface
for Bison GLR parsers in C
],
2635 ]b4_cpp_guard_open([b4_spec_defines_file
])[
2636 ]b4_shared_declarations
[
2637 ]b4_cpp_guard_close([b4_spec_defines_file
])[