3 # GLR skeleton for Bison
4 # Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
5 # 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, don't
39 # change the value of b4_pure_flag, and don't 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
])
98 # Arguments passed to yyerror: user formals plus yylocp.
99 m4_define([b4_pure_formals
],
100 [b4_pure_if([b4_locations_if([, YYLTYPE
*yylocp
])])[]b4_user_formals
])
103 ## ----------------- ##
104 ## Semantic Values. ##
105 ## ----------------- ##
108 # b4_lhs_value([TYPE])
109 # --------------------
110 # Expansion of $<TYPE>$.
111 m4_define([b4_lhs_value
],
112 [b4_symbol_value([(*yyvalp
)], [$
1])])
115 # b4_rhs_data(RULE-LENGTH, NUM)
116 # -----------------------------
117 # Expand to the semantic stack place that contains value and location
118 # of symbol number NUM in a rule of length RULE-LENGTH.
119 m4_define([b4_rhs_data
],
120 [((yyGLRStackItem
const *)yyvsp
)@
{YYFILL (b4_subtract([$
2], [$
1]))@
}.yystate
])
123 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
124 # --------------------------------------
125 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
127 m4_define([b4_rhs_value
],
128 [b4_symbol_value([b4_rhs_data([$
1], [$
2]).yysemantics
.yysval
], [$
3])])
139 m4_define([b4_lhs_location
],
143 # b4_rhs_location(RULE-LENGTH, NUM)
144 # ---------------------------------
145 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
147 m4_define([b4_rhs_location
],
148 [(b4_rhs_data([$
1], [$
2]).yyloc
)])
156 # We do want M4 expansion after # for CPP macros.
159 @
output(b4_parser_file_name@
)@
160 b4_copyright([Skeleton implementation
for Bison GLR parsers in C
],
161 [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009])
163 /* C GLR parser skeleton written by Paul Hilfinger. */
167 b4_percent_code_get([[top]])[]dnl
168 m4_if(b4_prefix
, [yy
], [],
169 [/* Substitute the variable and function names. */
170 #define yyparse b4_prefix[]parse
171 #define yylex b4_prefix[]lex
172 #define yyerror b4_prefix[]error
173 #define yylval b4_prefix[]lval
174 #define yychar b4_prefix[]char
175 #define yydebug b4_prefix[]debug
176 #define yynerrs b4_prefix[]nerrs
177 #define yylloc b4_prefix[]lloc])[
179 /* Copy the first part of user declarations. */
180 ]b4_user_pre_prologue
182 dnl
# b4_shared_declarations
183 dnl
# ----------------------
184 dnl
# Declaration that might either go into the header (if --defines)
185 dnl
# or open coded in the parser body.
186 m4_define([b4_shared_declarations
],
187 [b4_percent_code_get([[requires]])[]dnl
189 b4_token_enums(b4_tokens
)
192 ]m4_ifdef([b4_stype
],
193 [[typedef union ]b4_union_name
[
197 # define YYSTYPE_IS_TRIVIAL 1]],
198 [m4_if(b4_tag_seen_flag
, 0,
199 [[typedef int YYSTYPE
;
200 # define YYSTYPE_IS_TRIVIAL 1]])])[
203 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
204 typedef struct YYLTYPE
215 # define YYLTYPE_IS_DECLARED 1
216 # define YYLTYPE_IS_TRIVIAL 1
219 ]b4_percent_code_get([[provides]])[]dnl
222 b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
223 [b4_shared_declarations
])[
225 /* Enabling traces. */
227 # define YYDEBUG ]b4_parse_trace_if([1], [0])[
230 /* Enabling verbose error messages. */
231 #ifdef YYERROR_VERBOSE
232 # undef YYERROR_VERBOSE
233 # define YYERROR_VERBOSE 1
235 # define YYERROR_VERBOSE ]b4_error_verbose_if([1], [0])[
238 /* Enabling the token table. */
239 #ifndef YYTOKEN_TABLE
240 # define YYTOKEN_TABLE ]b4_token_table[
243 /* Default (constant) value used for initialization for null
244 right-hand sides. Unlike the standard yacc.c template,
245 here we set the default value of $$ to a zeroed-out value.
246 Since the default value is undefined, this behavior is
247 technically correct. */
248 static YYSTYPE yyval_default
;
250 /* Copy the second part of user declarations. */
251 ]b4_user_post_prologue
252 b4_percent_code_get
[]dnl
259 # if defined YYENABLE_NLS && YYENABLE_NLS
261 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
262 # define YY_(msgid) dgettext ("bison-runtime", msgid)
266 # define YY_(msgid) msgid
270 /* Suppress unused-variable warnings by "using" E. */
271 #if ! defined lint || defined __GNUC__
272 # define YYUSE(e) ((void) (e))
274 # define YYUSE(e) /* empty */
277 /* Identity function, used to suppress warnings about constant conditions. */
281 ]b4_c_function_def([YYID
], [static int], [[int i
], [i
]])[
291 # define YYMALLOC malloc
294 # define YYREALLOC realloc
297 #define YYSIZEMAX ((size_t) -1)
302 typedef unsigned char yybool
;
309 # define YYJMP_BUF jmp_buf
310 # define YYSETJMP(env) setjmp (env)
311 # define YYLONGJMP(env, val) longjmp (env, val)
318 #ifndef __attribute__
319 /* This feature is available in gcc versions 2.5 and later. */
320 # if (! defined __GNUC__ || __GNUC__ < 2 \
321 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__)
322 # define __attribute__(Spec) /* empty */
326 ]b4_locations_if([#define YYOPTIONAL_LOC(Name) Name],[
328 # define YYOPTIONAL_LOC(Name) /* empty */
330 # define YYOPTIONAL_LOC(Name) Name __attribute__ ((__unused__))
334 # define YYASSERT(condition) ((void) ((condition) || (abort (), 0)))
337 /* YYFINAL -- State number of the termination state. */
338 #define YYFINAL ]b4_final_state_number[
339 /* YYLAST -- Last index in YYTABLE. */
340 #define YYLAST ]b4_last[
342 /* YYNTOKENS -- Number of terminals. */
343 #define YYNTOKENS ]b4_tokens_number[
344 /* YYNNTS -- Number of nonterminals. */
345 #define YYNNTS ]b4_nterms_number[
346 /* YYNRULES -- Number of rules. */
347 #define YYNRULES ]b4_rules_number[
348 /* YYNRULES -- Number of states. */
349 #define YYNSTATES ]b4_states_number[
350 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
351 #define YYMAXRHS ]b4_r2_max[
352 /* YYMAXLEFT -- Maximum number of symbols to the left of a handle
353 accessed by $0, $-1, etc., in any rule. */
354 #define YYMAXLEFT ]b4_max_left_semantic_context[
356 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
357 #define YYUNDEFTOK ]b4_undef_token_number[
358 #define YYMAXUTOK ]b4_user_token_number_max[
360 #define YYTRANSLATE(YYX) \
361 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
363 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
364 static const ]b4_int_type_for([b4_translate
])[ yytranslate
[] =
370 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
371 static const ]b4_int_type_for([b4_rline
])[ yyrline
[] =
377 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
378 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
379 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
380 static const char *const yytname
[] =
386 #define YYPACT_NINF ]b4_pact_ninf[
387 #define YYTABLE_NINF ]b4_table_ninf[
389 ]b4_parser_tables_define
[
391 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
392 static const ]b4_int_type_for([b4_dprec
])[ yydprec
[] =
397 /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
398 static const ]b4_int_type_for([b4_merger
])[ yymerger
[] =
403 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
404 list of conflicting reductions corresponding to action entry for
405 state STATE-NUM in yytable. 0 means no conflicts. The list in
406 yyconfl is terminated by a rule number of 0. */
407 static const ]b4_int_type_for([b4_conflict_list_heads
])[ yyconflp
[] =
409 ]b4_conflict_list_heads
[
412 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
413 0, pointed into by YYCONFLP. */
414 ]dnl Do
not use b4_int_type_for here
, since there are places where
415 dnl pointers onto yyconfl are taken
, which type is
"short int *".
416 dnl We probably ought to introduce a type
for confl
.
417 [static const short int yyconfl
[] =
419 ]b4_conflicting_rules
[
422 /* Prevent warning if -Wmissing-prototypes. */
423 ]b4_c_ansi_function_decl([yyparse
], [int], b4_parse_param
)[
425 /* Error token number */
428 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
429 If N is 0, then set CURRENT to the empty location which ends
430 the previous symbol: RHS[0] (always defined). */
433 #define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
434 #ifndef YYLLOC_DEFAULT
435 # define YYLLOC_DEFAULT(Current, Rhs, N) \
439 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
440 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
441 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
442 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
446 (Current).first_line = (Current).last_line = \
447 YYRHSLOC (Rhs, 0).last_line; \
448 (Current).first_column = (Current).last_column = \
449 YYRHSLOC (Rhs, 0).last_column; \
453 /* YY_LOCATION_PRINT -- Print the location on the stream.
454 This macro was not mandated originally: define only if we know
455 we won't break user code: when these are the locations we know. */
457 # define YY_LOCATION_PRINT(File, Loc) \
458 fprintf (File, "%d.%d-%d.%d", \
459 (Loc).first_line, (Loc).first_column, \
460 (Loc).last_line, (Loc).last_column)
463 #ifndef YYLLOC_DEFAULT
464 # define YYLLOC_DEFAULT(Current, Rhs, N) ((void) 0)
468 #ifndef YY_LOCATION_PRINT
469 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
473 /* YYLEX -- calling `yylex' with the right arguments. */
474 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
479 #define yynerrs (yystackp->yyerrcnt)
481 #define yychar (yystackp->yyrawchar)
483 #define yylval (yystackp->yyval)
485 #define yylloc (yystackp->yyloc)
486 m4_if(b4_prefix
[], [yy
], [],
487 [#define b4_prefix[]nerrs yynerrs
488 #define b4_prefix[]char yychar
489 #define b4_prefix[]lval yylval
490 #define b4_prefix[]lloc yylloc])],
498 static const int YYEOF
= 0;
499 static const int YYEMPTY
= -2;
501 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
505 YYRESULTTAG yyflag = YYE; \
506 if (yyflag != yyok) \
513 # define YYFPRINTF fprintf
516 # define YYDPRINTF(Args) \
522 ]b4_yy_symbol_print_generate([b4_c_ansi_function_def
])[
524 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
528 YYFPRINTF (stderr, "%s ", Title); \
529 yy_symbol_print (stderr, Type, \
530 Value]b4_locations_if([, Location])[]b4_user_args[); \
531 YYFPRINTF (stderr, "\n"); \
535 /* Nonzero means print parse trace. It is left uninitialized so that
536 multiple parsers can coexist. */
541 # define YYDPRINTF(Args)
542 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
544 #endif /* !YYDEBUG */
546 /* YYINITDEPTH -- initial size of the parser's stacks. */
548 # define YYINITDEPTH ]b4_stack_depth_init[
551 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
552 if the built-in stack extension method is used).
554 Do not make this value too large; the results are undefined if
555 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
556 evaluated with infinite-precision integer arithmetic. */
559 # define YYMAXDEPTH ]b4_stack_depth_max[
562 /* Minimum number of free items on the stack allowed after an
563 allocation. This is to allow allocation and initialization
564 to be completed by functions that call yyexpandGLRStack before the
565 stack is expanded, thus insuring that all necessary pointers get
566 properly redirected to new data. */
569 #ifndef YYSTACKEXPANDABLE
570 # if (! defined __cplusplus \
571 || (]b4_locations_if([[defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
572 && ]])[defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))
573 # define YYSTACKEXPANDABLE 1
575 # define YYSTACKEXPANDABLE 0
579 #if YYSTACKEXPANDABLE
580 # define YY_RESERVE_GLRSTACK(Yystack) \
582 if (Yystack->yyspaceLeft < YYHEADROOM) \
583 yyexpandGLRStack (Yystack); \
586 # define YY_RESERVE_GLRSTACK(Yystack) \
588 if (Yystack->yyspaceLeft < YYHEADROOM) \
589 yyMemoryExhausted (Yystack); \
597 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
598 # define yystpcpy stpcpy
600 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
603 yystpcpy (char *yydest
, const char *yysrc
)
606 const char *yys
= yysrc
;
608 while ((*yyd
++ = *yys
++) != '\0')
617 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
618 quotes and backslashes, so that it's suitable for yyerror. The
619 heuristic is that double-quoting is unnecessary unless the string
620 contains an apostrophe, a comma, or backslash (other than
621 backslash-backslash). YYSTR is taken from yytname. If YYRES is
622 null, do not copy; instead, return the length of what the result
625 yytnamerr (char *yyres
, const char *yystr
)
630 char const *yyp
= yystr
;
637 goto do_not_strip_quotes
;
641 goto do_not_strip_quotes
;
654 do_not_strip_quotes
: ;
658 return strlen (yystr
);
660 return yystpcpy (yyres
, yystr
) - yyres
;
664 #endif /* !YYERROR_VERBOSE */
666 /** State numbers, as in LALR(1) machine */
667 typedef int yyStateNum
;
669 /** Rule numbers, as in LALR(1) machine */
670 typedef int yyRuleNum
;
672 /** Grammar symbol */
673 typedef short int yySymbol
;
675 /** Item references, as in LALR(1) machine */
676 typedef short int yyItemNum
;
678 typedef struct yyGLRState yyGLRState
;
679 typedef struct yyGLRStateSet yyGLRStateSet
;
680 typedef struct yySemanticOption yySemanticOption
;
681 typedef union yyGLRStackItem yyGLRStackItem
;
682 typedef struct yyGLRStack yyGLRStack
;
685 /** Type tag: always true. */
687 /** Type tag for yysemantics. If true, yysval applies, otherwise
688 * yyfirstVal applies. */
690 /** Number of corresponding LALR(1) machine state. */
691 yyStateNum yylrState
;
692 /** Preceding state in this stack */
694 /** Source position of the first token produced by my symbol */
697 /** First in a chain of alternative reductions producing the
698 * non-terminal corresponding to this state, threaded through
700 yySemanticOption
* yyfirstVal
;
701 /** Semantic value for this state. */
704 /** Source location for this state. */
708 struct yyGLRStateSet
{
709 yyGLRState
** yystates
;
710 /** During nondeterministic operation, yylookaheadNeeds tracks which
711 * stacks have actually needed the current lookahead. During deterministic
712 * operation, yylookaheadNeeds[0] is not maintained since it would merely
713 * duplicate yychar != YYEMPTY. */
714 yybool
* yylookaheadNeeds
;
715 size_t yysize
, yycapacity
;
718 struct yySemanticOption
{
719 /** Type tag: always false. */
721 /** Rule number for this reduction */
723 /** The last RHS state in the list of states to be reduced. */
725 /** The lookahead for this reduction. */
729 /** Next sibling in chain of options. To facilitate merging,
730 * options are chained in decreasing order by address. */
731 yySemanticOption
* yynext
;
734 /** Type of the items in the GLR stack. The yyisState field
735 * indicates which item of the union is valid. */
736 union yyGLRStackItem
{
738 yySemanticOption yyoption
;
743 ]b4_locations_if([[ /* To compute the location of the error token. */
744 yyGLRStackItem yyerror_range
[3];]])[
752 YYJMP_BUF yyexception_buffer
;
753 yyGLRStackItem
* yyitems
;
754 yyGLRStackItem
* yynextFree
;
756 yyGLRState
* yysplitPoint
;
757 yyGLRState
* yylastDeleted
;
758 yyGLRStateSet yytops
;
761 #if YYSTACKEXPANDABLE
762 static void yyexpandGLRStack (yyGLRStack
* yystackp
);
765 static void yyFail (yyGLRStack
* yystackp
]b4_pure_formals
[, const char* yymsg
)
766 __attribute__ ((__noreturn__
));
768 yyFail (yyGLRStack
* yystackp
]b4_pure_formals
[, const char* yymsg
)
771 yyerror (]b4_yyerror_args
[yymsg
);
772 YYLONGJMP (yystackp
->yyexception_buffer
, 1);
775 static void yyMemoryExhausted (yyGLRStack
* yystackp
)
776 __attribute__ ((__noreturn__
));
778 yyMemoryExhausted (yyGLRStack
* yystackp
)
780 YYLONGJMP (yystackp
->yyexception_buffer
, 2);
783 #if YYDEBUG || YYERROR_VERBOSE
784 /** A printable representation of TOKEN. */
785 static inline const char*
786 yytokenName (yySymbol yytoken
)
788 if (yytoken
== YYEMPTY
)
791 return yytname
[yytoken
];
795 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
796 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
797 * containing the pointer to the next state in the chain. */
798 static void yyfillin (yyGLRStackItem
*, int, int) __attribute__ ((__unused__
));
800 yyfillin (yyGLRStackItem
*yyvsp
, int yylow0
, int yylow1
)
804 s
= yyvsp
[yylow0
].yystate
.yypred
;
805 for (i
= yylow0
-1; i
>= yylow1
; i
-= 1)
807 YYASSERT (s
->yyresolved
);
808 yyvsp
[i
].yystate
.yyresolved
= yytrue
;
809 yyvsp
[i
].yystate
.yysemantics
.yysval
= s
->yysemantics
.yysval
;
810 yyvsp
[i
].yystate
.yyloc
= s
->yyloc
;
811 s
= yyvsp
[i
].yystate
.yypred
= s
->yypred
;
815 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
816 * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
817 * For convenience, always return YYLOW1. */
818 static inline int yyfill (yyGLRStackItem
*, int *, int, yybool
)
819 __attribute__ ((__unused__
));
821 yyfill (yyGLRStackItem
*yyvsp
, int *yylow
, int yylow1
, yybool yynormal
)
823 if (!yynormal
&& yylow1
< *yylow
)
825 yyfillin (yyvsp
, *yylow
, yylow1
);
831 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
832 * and top stack item YYVSP. YYLVALP points to place to put semantic
833 * value ($$), and yylocp points to place for location information
834 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
835 * yyerr for YYERROR, yyabort for YYABORT. */
836 /*ARGSUSED*/ static YYRESULTTAG
837 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
839 YYLTYPE
* YYOPTIONAL_LOC (yylocp
),
843 yybool yynormal
__attribute__ ((__unused__
)) =
844 (yystackp
->yysplitPoint
== NULL
);
846 ]b4_parse_param_use
[]dnl
848 # define yyerrok (yystackp->yyerrState = 0)
850 # define YYACCEPT return yyaccept
852 # define YYABORT return yyabort
854 # define YYERROR return yyerrok, yyerr
856 # define YYRECOVERING() (yystackp->yyerrState != 0)
858 # define yyclearin (yychar = YYEMPTY)
860 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
862 # define YYBACKUP(Token, Value) \
863 return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")), \
868 *yyvalp
= yyval_default
;
870 *yyvalp
= yyvsp
[YYFILL (1-yyrhslen
)].yystate
.yysemantics
.yysval
;
871 YYLLOC_DEFAULT ((*yylocp
), (yyvsp
- yyrhslen
), yyrhslen
);
872 ]b4_locations_if([[ yystackp
->yyerror_range
[1].yystate
.yyloc
= *yylocp
;
891 /*ARGSUSED*/ static void
892 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
904 /* Bison grammar-table manipulation. */
906 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
908 /** Number of symbols composing the right hand side of rule #RULE. */
910 yyrhsLength (yyRuleNum yyrule
)
916 yydestroyGLRState (char const *yymsg
, yyGLRState
*yys
]b4_user_formals
[)
919 yydestruct (yymsg
, yystos
[yys
->yylrState
],
920 &yys
->yysemantics
.yysval
]b4_locations_if([, &yys
->yyloc
])[]b4_user_args
[);
926 if (yys
->yysemantics
.yyfirstVal
)
927 YYFPRINTF (stderr
, "%s unresolved ", yymsg
);
929 YYFPRINTF (stderr
, "%s incomplete ", yymsg
);
930 yy_symbol_print (stderr
, yystos
[yys
->yylrState
],
931 NULL
]b4_locations_if([, &yys
->yyloc
])[]b4_user_args
[);
932 YYFPRINTF (stderr
, "\n");
936 if (yys
->yysemantics
.yyfirstVal
)
938 yySemanticOption
*yyoption
= yys
->yysemantics
.yyfirstVal
;
941 for (yyrh
= yyoption
->yystate
, yyn
= yyrhsLength (yyoption
->yyrule
);
943 yyrh
= yyrh
->yypred
, yyn
-= 1)
944 yydestroyGLRState (yymsg
, yyrh
]b4_user_args
[);
949 /** Left-hand-side symbol for rule #RULE. */
950 static inline yySymbol
951 yylhsNonterm (yyRuleNum yyrule
)
956 #define yypact_value_is_default(yystate) \
957 ]b4_table_value_equals([[pact]], [[yystate]], [b4_pact_ninf])[
959 /** True iff LR state STATE has only a default reduction (regardless
962 yyisDefaultedState (yyStateNum yystate
)
964 return yypact_value_is_default (yypact
[yystate
]);
967 /** The default reduction for STATE, assuming it has one. */
968 static inline yyRuleNum
969 yydefaultAction (yyStateNum yystate
)
971 return yydefact
[yystate
];
974 #define yytable_value_is_error(yytable_value) \
975 ]b4_table_value_equals([[table]], [[yytable_value]], [b4_table_ninf])[
977 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
979 * R < 0: Reduce on rule -R.
981 * R > 0: Shift to state R.
982 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
983 * conflicting reductions.
986 yygetLRActions (yyStateNum yystate
, int yytoken
,
987 int* yyaction
, const short int** yyconflicts
)
989 int yyindex
= yypact
[yystate
] + yytoken
;
990 if (yypact_value_is_default (yypact
[yystate
])
991 || yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
993 *yyaction
= -yydefact
[yystate
];
994 *yyconflicts
= yyconfl
;
996 else if (! yytable_value_is_error (yytable
[yyindex
]))
998 *yyaction
= yytable
[yyindex
];
999 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
1004 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
1008 static inline yyStateNum
1009 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
1011 int yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
1012 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
1013 return yytable
[yyr
];
1015 return yydefgoto
[yylhs
- YYNTOKENS
];
1018 static inline yybool
1019 yyisShiftAction (int yyaction
)
1021 return 0 < yyaction
;
1024 static inline yybool
1025 yyisErrorAction (int yyaction
)
1027 return yyaction
== 0;
1032 /** Return a fresh GLRStackItem. Callers should call
1033 * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
1036 static inline yyGLRStackItem
*
1037 yynewGLRStackItem (yyGLRStack
* yystackp
, yybool yyisState
)
1039 yyGLRStackItem
* yynewItem
= yystackp
->yynextFree
;
1040 yystackp
->yyspaceLeft
-= 1;
1041 yystackp
->yynextFree
+= 1;
1042 yynewItem
->yystate
.yyisState
= yyisState
;
1046 /** Add a new semantic action that will execute the action for rule
1047 * RULENUM on the semantic values in RHS to the list of
1048 * alternative actions for STATE. Assumes that RHS comes from
1049 * stack #K of *STACKP. */
1051 yyaddDeferredAction (yyGLRStack
* yystackp
, size_t yyk
, yyGLRState
* yystate
,
1052 yyGLRState
* yyrhs
, yyRuleNum yyrule
)
1054 yySemanticOption
* yynewOption
=
1055 &yynewGLRStackItem (yystackp
, yyfalse
)->yyoption
;
1056 yynewOption
->yystate
= yyrhs
;
1057 yynewOption
->yyrule
= yyrule
;
1058 if (yystackp
->yytops
.yylookaheadNeeds
[yyk
])
1060 yynewOption
->yyrawchar
= yychar
;
1061 yynewOption
->yyval
= yylval
;
1062 yynewOption
->yyloc
= yylloc
;
1065 yynewOption
->yyrawchar
= YYEMPTY
;
1066 yynewOption
->yynext
= yystate
->yysemantics
.yyfirstVal
;
1067 yystate
->yysemantics
.yyfirstVal
= yynewOption
;
1069 YY_RESERVE_GLRSTACK (yystackp
);
1074 /** Initialize SET to a singleton set containing an empty stack. */
1076 yyinitStateSet (yyGLRStateSet
* yyset
)
1079 yyset
->yycapacity
= 16;
1080 yyset
->yystates
= (yyGLRState
**) YYMALLOC (16 * sizeof yyset
->yystates
[0]);
1081 if (! yyset
->yystates
)
1083 yyset
->yystates
[0] = NULL
;
1084 yyset
->yylookaheadNeeds
=
1085 (yybool
*) YYMALLOC (16 * sizeof yyset
->yylookaheadNeeds
[0]);
1086 if (! yyset
->yylookaheadNeeds
)
1088 YYFREE (yyset
->yystates
);
1094 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
1096 YYFREE (yyset
->yystates
);
1097 YYFREE (yyset
->yylookaheadNeeds
);
1100 /** Initialize STACK to a single empty stack, with total maximum
1101 * capacity for all stacks of SIZE. */
1103 yyinitGLRStack (yyGLRStack
* yystackp
, size_t yysize
)
1105 yystackp
->yyerrState
= 0;
1107 yystackp
->yyspaceLeft
= yysize
;
1109 (yyGLRStackItem
*) YYMALLOC (yysize
* sizeof yystackp
->yynextFree
[0]);
1110 if (!yystackp
->yyitems
)
1112 yystackp
->yynextFree
= yystackp
->yyitems
;
1113 yystackp
->yysplitPoint
= NULL
;
1114 yystackp
->yylastDeleted
= NULL
;
1115 return yyinitStateSet (&yystackp
->yytops
);
1119 #if YYSTACKEXPANDABLE
1120 # define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
1121 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
1123 /** If STACK is expandable, extend it. WARNING: Pointers into the
1124 stack from outside should be considered invalid after this call.
1125 We always expand when there are 1 or fewer items left AFTER an
1126 allocation, so that we can avoid having external pointers exist
1127 across an allocation. */
1129 yyexpandGLRStack (yyGLRStack
* yystackp
)
1131 yyGLRStackItem
* yynewItems
;
1132 yyGLRStackItem
* yyp0
, *yyp1
;
1133 size_t yysize
, yynewSize
;
1135 yysize
= yystackp
->yynextFree
- yystackp
->yyitems
;
1136 if (YYMAXDEPTH
- YYHEADROOM
< yysize
)
1137 yyMemoryExhausted (yystackp
);
1138 yynewSize
= 2*yysize
;
1139 if (YYMAXDEPTH
< yynewSize
)
1140 yynewSize
= YYMAXDEPTH
;
1141 yynewItems
= (yyGLRStackItem
*) YYMALLOC (yynewSize
* sizeof yynewItems
[0]);
1143 yyMemoryExhausted (yystackp
);
1144 for (yyp0
= yystackp
->yyitems
, yyp1
= yynewItems
, yyn
= yysize
;
1146 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
1149 if (*(yybool
*) yyp0
)
1151 yyGLRState
* yys0
= &yyp0
->yystate
;
1152 yyGLRState
* yys1
= &yyp1
->yystate
;
1153 if (yys0
->yypred
!= NULL
)
1155 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
1156 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
1157 yys1
->yysemantics
.yyfirstVal
=
1158 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
1162 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
1163 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
1164 if (yyv0
->yystate
!= NULL
)
1165 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
1166 if (yyv0
->yynext
!= NULL
)
1167 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
1170 if (yystackp
->yysplitPoint
!= NULL
)
1171 yystackp
->yysplitPoint
= YYRELOC (yystackp
->yyitems
, yynewItems
,
1172 yystackp
->yysplitPoint
, yystate
);
1174 for (yyn
= 0; yyn
< yystackp
->yytops
.yysize
; yyn
+= 1)
1175 if (yystackp
->yytops
.yystates
[yyn
] != NULL
)
1176 yystackp
->yytops
.yystates
[yyn
] =
1177 YYRELOC (yystackp
->yyitems
, yynewItems
,
1178 yystackp
->yytops
.yystates
[yyn
], yystate
);
1179 YYFREE (yystackp
->yyitems
);
1180 yystackp
->yyitems
= yynewItems
;
1181 yystackp
->yynextFree
= yynewItems
+ yysize
;
1182 yystackp
->yyspaceLeft
= yynewSize
- yysize
;
1187 yyfreeGLRStack (yyGLRStack
* yystackp
)
1189 YYFREE (yystackp
->yyitems
);
1190 yyfreeStateSet (&yystackp
->yytops
);
1193 /** Assuming that S is a GLRState somewhere on STACK, update the
1194 * splitpoint of STACK, if needed, so that it is at least as deep as
1197 yyupdateSplit (yyGLRStack
* yystackp
, yyGLRState
* yys
)
1199 if (yystackp
->yysplitPoint
!= NULL
&& yystackp
->yysplitPoint
> yys
)
1200 yystackp
->yysplitPoint
= yys
;
1203 /** Invalidate stack #K in STACK. */
1205 yymarkStackDeleted (yyGLRStack
* yystackp
, size_t yyk
)
1207 if (yystackp
->yytops
.yystates
[yyk
] != NULL
)
1208 yystackp
->yylastDeleted
= yystackp
->yytops
.yystates
[yyk
];
1209 yystackp
->yytops
.yystates
[yyk
] = NULL
;
1212 /** Undelete the last stack that was marked as deleted. Can only be
1213 done once after a deletion, and only when all other stacks have
1216 yyundeleteLastStack (yyGLRStack
* yystackp
)
1218 if (yystackp
->yylastDeleted
== NULL
|| yystackp
->yytops
.yysize
!= 0)
1220 yystackp
->yytops
.yystates
[0] = yystackp
->yylastDeleted
;
1221 yystackp
->yytops
.yysize
= 1;
1222 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1223 yystackp
->yylastDeleted
= NULL
;
1227 yyremoveDeletes (yyGLRStack
* yystackp
)
1231 while (yyj
< yystackp
->yytops
.yysize
)
1233 if (yystackp
->yytops
.yystates
[yyi
] == NULL
)
1237 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1239 yystackp
->yytops
.yysize
-= 1;
1243 yystackp
->yytops
.yystates
[yyj
] = yystackp
->yytops
.yystates
[yyi
];
1244 /* In the current implementation, it's unnecessary to copy
1245 yystackp->yytops.yylookaheadNeeds[yyi] since, after
1246 yyremoveDeletes returns, the parser immediately either enters
1247 deterministic operation or shifts a token. However, it doesn't
1248 hurt, and the code might evolve to need it. */
1249 yystackp
->yytops
.yylookaheadNeeds
[yyj
] =
1250 yystackp
->yytops
.yylookaheadNeeds
[yyi
];
1253 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1254 (unsigned long int) yyi
, (unsigned long int) yyj
));
1262 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1263 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1265 yyglrShift (yyGLRStack
* yystackp
, size_t yyk
, yyStateNum yylrState
,
1267 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
)
1269 yyGLRState
* yynewState
= &yynewGLRStackItem (yystackp
, yytrue
)->yystate
;
1271 yynewState
->yylrState
= yylrState
;
1272 yynewState
->yyposn
= yyposn
;
1273 yynewState
->yyresolved
= yytrue
;
1274 yynewState
->yypred
= yystackp
->yytops
.yystates
[yyk
];
1275 yynewState
->yysemantics
.yysval
= *yyvalp
;
1276 yynewState
->yyloc
= *yylocp
;
1277 yystackp
->yytops
.yystates
[yyk
] = yynewState
;
1279 YY_RESERVE_GLRSTACK (yystackp
);
1282 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1283 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1284 * semantic value of YYRHS under the action for YYRULE. */
1286 yyglrShiftDefer (yyGLRStack
* yystackp
, size_t yyk
, yyStateNum yylrState
,
1287 size_t yyposn
, yyGLRState
* yyrhs
, yyRuleNum yyrule
)
1289 yyGLRState
* yynewState
= &yynewGLRStackItem (yystackp
, yytrue
)->yystate
;
1291 yynewState
->yylrState
= yylrState
;
1292 yynewState
->yyposn
= yyposn
;
1293 yynewState
->yyresolved
= yyfalse
;
1294 yynewState
->yypred
= yystackp
->yytops
.yystates
[yyk
];
1295 yynewState
->yysemantics
.yyfirstVal
= NULL
;
1296 yystackp
->yytops
.yystates
[yyk
] = yynewState
;
1298 /* Invokes YY_RESERVE_GLRSTACK. */
1299 yyaddDeferredAction (yystackp
, yyk
, yynewState
, yyrhs
, yyrule
);
1302 /** Pop the symbols consumed by reduction #RULE from the top of stack
1303 * #K of STACK, and perform the appropriate semantic action on their
1304 * semantic values. Assumes that all ambiguities in semantic values
1305 * have been previously resolved. Set *VALP to the resulting value,
1306 * and *LOCP to the computed location (if any). Return value is as
1307 * for userAction. */
1308 static inline YYRESULTTAG
1309 yydoAction (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1310 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1312 int yynrhs
= yyrhsLength (yyrule
);
1314 if (yystackp
->yysplitPoint
== NULL
)
1316 /* Standard special case: single stack. */
1317 yyGLRStackItem
* yyrhs
= (yyGLRStackItem
*) yystackp
->yytops
.yystates
[yyk
];
1318 YYASSERT (yyk
== 0);
1319 yystackp
->yynextFree
-= yynrhs
;
1320 yystackp
->yyspaceLeft
+= yynrhs
;
1321 yystackp
->yytops
.yystates
[0] = & yystackp
->yynextFree
[-1].yystate
;
1322 return yyuserAction (yyrule
, yynrhs
, yyrhs
,
1323 yyvalp
, yylocp
, yystackp
]b4_user_args
[);
1327 /* At present, doAction is never called in nondeterministic
1328 * mode, so this branch is never taken. It is here in
1329 * anticipation of a future feature that will allow immediate
1330 * evaluation of selected actions in nondeterministic mode. */
1333 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1334 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1335 = yystackp
->yytops
.yystates
[yyk
];]b4_locations_if([[
1337 /* Set default location. */
1338 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
- 1].yystate
.yyloc
= yys
->yyloc
;]])[
1339 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1344 yyupdateSplit (yystackp
, yys
);
1345 yystackp
->yytops
.yystates
[yyk
] = yys
;
1346 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1347 yyvalp
, yylocp
, yystackp
]b4_user_args
[);
1352 # define YY_REDUCE_PRINT(Args)
1354 # define YY_REDUCE_PRINT(Args) \
1357 yy_reduce_print Args; \
1360 /*----------------------------------------------------------.
1361 | Report that the RULE is going to be reduced on stack #K. |
1362 `----------------------------------------------------------*/
1364 /*ARGSUSED*/ static inline void
1365 yy_reduce_print (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
]b4_user_formals
[)
1367 int yynrhs
= yyrhsLength (yyrule
);
1368 yybool yynormal
__attribute__ ((__unused__
)) =
1369 (yystackp
->yysplitPoint
== NULL
);
1370 yyGLRStackItem
* yyvsp
= (yyGLRStackItem
*) yystackp
->yytops
.yystates
[yyk
];
1373 ]b4_parse_param_use
[]dnl
1374 [ YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu):\n",
1375 (unsigned long int) yyk
, yyrule
- 1,
1376 (unsigned long int) yyrline
[yyrule
]);
1377 /* The symbols being reduced. */
1378 for (yyi
= 0; yyi
< yynrhs
; yyi
++)
1380 YYFPRINTF (stderr
, " $%d = ", yyi
+ 1);
1381 yy_symbol_print (stderr
,
1382 ]yystos@
{b4_rhs_data(yynrhs
, yyi
+ 1).yylrState@
}[,
1383 &]b4_rhs_value(yynrhs
, yyi
+ 1)[
1384 ]b4_locations_if([, &]b4_rhs_location(yynrhs
, yyi
+ 1))[]dnl
1386 YYFPRINTF (stderr
, "\n");
1391 /** Pop items off stack #K of STACK according to grammar rule RULE,
1392 * and push back on the resulting nonterminal symbol. Perform the
1393 * semantic action associated with RULE and store its value with the
1394 * newly pushed state, if FORCEEVAL or if STACK is currently
1395 * unambiguous. Otherwise, store the deferred semantic action with
1396 * the new state. If the new state would have an identical input
1397 * position, LR state, and predecessor to an existing state on the stack,
1398 * it is identified with that existing state, eliminating stack #K from
1399 * the STACK. In this case, the (necessarily deferred) semantic value is
1400 * added to the options for the existing state's semantic value.
1402 static inline YYRESULTTAG
1403 yyglrReduce (yyGLRStack
* yystackp
, size_t yyk
, yyRuleNum yyrule
,
1404 yybool yyforceEval
]b4_user_formals
[)
1406 size_t yyposn
= yystackp
->yytops
.yystates
[yyk
]->yyposn
;
1408 if (yyforceEval
|| yystackp
->yysplitPoint
== NULL
)
1413 YY_REDUCE_PRINT ((yystackp
, yyk
, yyrule
]b4_user_args
[));
1414 YYCHK (yydoAction (yystackp
, yyk
, yyrule
, &yysval
,
1415 &yyloc
]b4_user_args
[));
1416 YY_SYMBOL_PRINT ("-> $$ =", yyr1
[yyrule
], &yysval
, &yyloc
);
1417 yyglrShift (yystackp
, yyk
,
1418 yyLRgotoState (yystackp
->yytops
.yystates
[yyk
]->yylrState
,
1419 yylhsNonterm (yyrule
)),
1420 yyposn
, &yysval
, &yyloc
);
1426 yyGLRState
* yys
, *yys0
= yystackp
->yytops
.yystates
[yyk
];
1427 yyStateNum yynewLRState
;
1429 for (yys
= yystackp
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1435 yyupdateSplit (yystackp
, yys
);
1436 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1438 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
1439 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1440 for (yyi
= 0; yyi
< yystackp
->yytops
.yysize
; yyi
+= 1)
1441 if (yyi
!= yyk
&& yystackp
->yytops
.yystates
[yyi
] != NULL
)
1443 yyGLRState
* yyp
, *yysplit
= yystackp
->yysplitPoint
;
1444 yyp
= yystackp
->yytops
.yystates
[yyi
];
1445 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1447 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1449 yyaddDeferredAction (yystackp
, yyk
, yyp
, yys0
, yyrule
);
1450 yymarkStackDeleted (yystackp
, yyk
);
1451 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1452 (unsigned long int) yyk
,
1453 (unsigned long int) yyi
));
1459 yystackp
->yytops
.yystates
[yyk
] = yys
;
1460 yyglrShiftDefer (yystackp
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
);
1466 yysplitStack (yyGLRStack
* yystackp
, size_t yyk
)
1468 if (yystackp
->yysplitPoint
== NULL
)
1470 YYASSERT (yyk
== 0);
1471 yystackp
->yysplitPoint
= yystackp
->yytops
.yystates
[yyk
];
1473 if (yystackp
->yytops
.yysize
>= yystackp
->yytops
.yycapacity
)
1475 yyGLRState
** yynewStates
;
1476 yybool
* yynewLookaheadNeeds
;
1480 if (yystackp
->yytops
.yycapacity
1481 > (YYSIZEMAX
/ (2 * sizeof yynewStates
[0])))
1482 yyMemoryExhausted (yystackp
);
1483 yystackp
->yytops
.yycapacity
*= 2;
1486 (yyGLRState
**) YYREALLOC (yystackp
->yytops
.yystates
,
1487 (yystackp
->yytops
.yycapacity
1488 * sizeof yynewStates
[0]));
1489 if (yynewStates
== NULL
)
1490 yyMemoryExhausted (yystackp
);
1491 yystackp
->yytops
.yystates
= yynewStates
;
1493 yynewLookaheadNeeds
=
1494 (yybool
*) YYREALLOC (yystackp
->yytops
.yylookaheadNeeds
,
1495 (yystackp
->yytops
.yycapacity
1496 * sizeof yynewLookaheadNeeds
[0]));
1497 if (yynewLookaheadNeeds
== NULL
)
1498 yyMemoryExhausted (yystackp
);
1499 yystackp
->yytops
.yylookaheadNeeds
= yynewLookaheadNeeds
;
1501 yystackp
->yytops
.yystates
[yystackp
->yytops
.yysize
]
1502 = yystackp
->yytops
.yystates
[yyk
];
1503 yystackp
->yytops
.yylookaheadNeeds
[yystackp
->yytops
.yysize
]
1504 = yystackp
->yytops
.yylookaheadNeeds
[yyk
];
1505 yystackp
->yytops
.yysize
+= 1;
1506 return yystackp
->yytops
.yysize
-1;
1509 /** True iff Y0 and Y1 represent identical options at the top level.
1510 * That is, they represent the same rule applied to RHS symbols
1511 * that produce the same terminal symbols. */
1513 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1515 if (yyy0
->yyrule
== yyy1
->yyrule
)
1517 yyGLRState
*yys0
, *yys1
;
1519 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1520 yyn
= yyrhsLength (yyy0
->yyrule
);
1522 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1523 if (yys0
->yyposn
!= yys1
->yyposn
)
1531 /** Assuming identicalOptions (Y0,Y1), destructively merge the
1532 * alternative semantic values for the RHS-symbols of Y1 and Y0. */
1534 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
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)
1545 else if (yys0
->yyresolved
)
1547 yys1
->yyresolved
= yytrue
;
1548 yys1
->yysemantics
.yysval
= yys0
->yysemantics
.yysval
;
1550 else if (yys1
->yyresolved
)
1552 yys0
->yyresolved
= yytrue
;
1553 yys0
->yysemantics
.yysval
= yys1
->yysemantics
.yysval
;
1557 yySemanticOption
** yyz0p
;
1558 yySemanticOption
* yyz1
;
1559 yyz0p
= &yys0
->yysemantics
.yyfirstVal
;
1560 yyz1
= yys1
->yysemantics
.yyfirstVal
;
1561 while (YYID (yytrue
))
1563 if (yyz1
== *yyz0p
|| yyz1
== NULL
)
1565 else if (*yyz0p
== NULL
)
1570 else if (*yyz0p
< yyz1
)
1572 yySemanticOption
* yyz
= *yyz0p
;
1574 yyz1
= yyz1
->yynext
;
1575 (*yyz0p
)->yynext
= yyz
;
1577 yyz0p
= &(*yyz0p
)->yynext
;
1579 yys1
->yysemantics
.yyfirstVal
= yys0
->yysemantics
.yyfirstVal
;
1584 /** Y0 and Y1 represent two possible actions to take in a given
1585 * parsing state; return 0 if no combination is possible,
1586 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1588 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1590 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1591 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1595 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1600 if (p0
== 0 || p1
== 0)
1609 static YYRESULTTAG
yyresolveValue (yyGLRState
* yys
,
1610 yyGLRStack
* yystackp
]b4_user_formals
[);
1613 /** Resolve the previous N states starting at and including state S. If result
1614 * != yyok, some states may have been left unresolved possibly with empty
1615 * semantic option chains. Regardless of whether result = yyok, each state
1616 * has been left with consistent data so that yydestroyGLRState can be invoked
1619 yyresolveStates (yyGLRState
* yys
, int yyn
,
1620 yyGLRStack
* yystackp
]b4_user_formals
[)
1624 YYASSERT (yys
->yypred
);
1625 YYCHK (yyresolveStates (yys
->yypred
, yyn
-1, yystackp
]b4_user_args
[));
1626 if (! yys
->yyresolved
)
1627 YYCHK (yyresolveValue (yys
, yystackp
]b4_user_args
[));
1632 /** Resolve the states for the RHS of OPT, perform its user action, and return
1633 * the semantic value and location. Regardless of whether result = yyok, all
1634 * RHS states have been destroyed (assuming the user action destroys all RHS
1635 * semantic values if invoked). */
1637 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystackp
,
1638 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1640 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1643 YYSTYPE yylval_current
;
1644 YYLTYPE yylloc_current
;
1647 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1648 yyflag
= yyresolveStates (yyopt
->yystate
, yynrhs
, yystackp
]b4_user_args
[);
1652 for (yys
= yyopt
->yystate
; yynrhs
> 0; yys
= yys
->yypred
, yynrhs
-= 1)
1653 yydestroyGLRState ("Cleanup: popping", yys
]b4_user_args
[);
1657 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;]b4_locations_if([[
1659 /* Set default location. */
1660 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
- 1].yystate
.yyloc
= yyopt
->yystate
->yyloc
;]])[
1661 yychar_current
= yychar
;
1662 yylval_current
= yylval
;
1663 yylloc_current
= yylloc
;
1664 yychar
= yyopt
->yyrawchar
;
1665 yylval
= yyopt
->yyval
;
1666 yylloc
= yyopt
->yyloc
;
1667 yyflag
= yyuserAction (yyopt
->yyrule
, yynrhs
,
1668 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1669 yyvalp
, yylocp
, yystackp
]b4_user_args
[);
1670 yychar
= yychar_current
;
1671 yylval
= yylval_current
;
1672 yylloc
= yylloc_current
;
1678 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1680 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1683 yyGLRState
* yystates
[1 + YYMAXRHS
];
1684 yyGLRState yyleftmost_state
;
1686 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1687 yystates
[yyi
] = yys
;
1690 yyleftmost_state
.yyposn
= 0;
1691 yystates
[0] = &yyleftmost_state
;
1696 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1697 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1698 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1701 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1702 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1703 yyx
->yyrule
- 1, (unsigned long int) (yys
->yyposn
+ 1),
1704 (unsigned long int) yyx
->yystate
->yyposn
);
1705 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1707 if (yystates
[yyi
]->yyresolved
)
1709 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1710 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1711 yytokenName (yystos
[yystates
[yyi
-1]->yylrState
]));
1713 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1714 yytokenName (yystos
[yystates
[yyi
-1]->yylrState
]),
1715 (unsigned long int) (yystates
[yyi
-1]->yyposn
+ 1),
1716 (unsigned long int) yystates
[yyi
]->yyposn
);
1719 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1724 /*ARGSUSED*/ static YYRESULTTAG
1725 yyreportAmbiguity (yySemanticOption
* yyx0
,
1726 yySemanticOption
* yyx1
]b4_pure_formals
[)
1732 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1733 YYFPRINTF (stderr
, "Option 1,\n");
1734 yyreportTree (yyx0
, 2);
1735 YYFPRINTF (stderr
, "\nOption 2,\n");
1736 yyreportTree (yyx1
, 2);
1737 YYFPRINTF (stderr
, "\n");
1740 yyerror (]b4_yyerror_args
[YY_("syntax is ambiguous"));
1744 /** Starting at and including state S1, resolve the location for each of the
1745 * previous N1 states that is unresolved. The first semantic option of a state
1746 * is always chosen. */
1748 yyresolveLocations (yyGLRState
* yys1
, int yyn1
,
1749 yyGLRStack
*yystackp
]b4_user_formals
[)
1753 yyresolveLocations (yys1
->yypred
, yyn1
- 1, yystackp
]b4_user_args
[);
1754 if (!yys1
->yyresolved
)
1756 yySemanticOption
*yyoption
;
1757 yyGLRStackItem yyrhsloc
[1 + YYMAXRHS
];
1760 YYSTYPE yylval_current
;
1761 YYLTYPE yylloc_current
;
1762 yyoption
= yys1
->yysemantics
.yyfirstVal
;
1763 YYASSERT (yyoption
!= NULL
);
1764 yynrhs
= yyrhsLength (yyoption
->yyrule
);
1769 yyresolveLocations (yyoption
->yystate
, yynrhs
,
1770 yystackp
]b4_user_args
[);
1771 for (yys
= yyoption
->yystate
, yyn
= yynrhs
;
1773 yys
= yys
->yypred
, yyn
-= 1)
1774 yyrhsloc
[yyn
].yystate
.yyloc
= yys
->yyloc
;
1778 /* Both yyresolveAction and yyresolveLocations traverse the GSS
1779 in reverse rightmost order. It is only necessary to invoke
1780 yyresolveLocations on a subforest for which yyresolveAction
1781 would have been invoked next had an ambiguity not been
1782 detected. Thus the location of the previous state (but not
1783 necessarily the previous state itself) is guaranteed to be
1784 resolved already. */
1785 yyGLRState
*yyprevious
= yyoption
->yystate
;
1786 yyrhsloc
[0].yystate
.yyloc
= yyprevious
->yyloc
;
1788 yychar_current
= yychar
;
1789 yylval_current
= yylval
;
1790 yylloc_current
= yylloc
;
1791 yychar
= yyoption
->yyrawchar
;
1792 yylval
= yyoption
->yyval
;
1793 yylloc
= yyoption
->yyloc
;
1794 YYLLOC_DEFAULT ((yys1
->yyloc
), yyrhsloc
, yynrhs
);
1795 yychar
= yychar_current
;
1796 yylval
= yylval_current
;
1797 yylloc
= yylloc_current
;
1802 /** Resolve the ambiguity represented in state S, perform the indicated
1803 * actions, and set the semantic value of S. If result != yyok, the chain of
1804 * semantic options in S has been cleared instead or it has been left
1805 * unmodified except that redundant options may have been removed. Regardless
1806 * of whether result = yyok, S has been left with consistent data so that
1807 * yydestroyGLRState can be invoked if necessary. */
1809 yyresolveValue (yyGLRState
* yys
, yyGLRStack
* yystackp
]b4_user_formals
[)
1811 yySemanticOption
* yyoptionList
= yys
->yysemantics
.yyfirstVal
;
1812 yySemanticOption
* yybest
;
1813 yySemanticOption
** yypp
;
1817 YYLTYPE
*yylocp
= &yys
->yyloc
;
1819 yybest
= yyoptionList
;
1821 for (yypp
= &yyoptionList
->yynext
; *yypp
!= NULL
; )
1823 yySemanticOption
* yyp
= *yypp
;
1825 if (yyidenticalOptions (yybest
, yyp
))
1827 yymergeOptionSets (yybest
, yyp
);
1828 *yypp
= yyp
->yynext
;
1832 switch (yypreference (yybest
, yyp
))
1835 yyresolveLocations (yys
, 1, yystackp
]b4_user_args
[);
1836 return yyreportAmbiguity (yybest
, yyp
]b4_pure_args
[);
1848 /* This cannot happen so it is not worth a YYASSERT (yyfalse),
1849 but some compilers complain if the default case is
1853 yypp
= &yyp
->yynext
;
1859 yySemanticOption
* yyp
;
1860 int yyprec
= yydprec
[yybest
->yyrule
];
1861 yyflag
= yyresolveAction (yybest
, yystackp
, &yysval
,
1862 yylocp
]b4_user_args
[);
1864 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1866 if (yyprec
== yydprec
[yyp
->yyrule
])
1868 YYSTYPE yysval_other
;
1870 yyflag
= yyresolveAction (yyp
, yystackp
, &yysval_other
,
1871 &yydummy
]b4_user_args
[);
1874 yydestruct ("Cleanup: discarding incompletely merged value for",
1875 yystos
[yys
->yylrState
],
1876 &yysval
]b4_locations_if([, yylocp
])[]b4_user_args
[);
1879 yyuserMerge (yymerger
[yyp
->yyrule
], &yysval
, &yysval_other
);
1884 yyflag
= yyresolveAction (yybest
, yystackp
, &yysval
, yylocp
]b4_user_args
[);
1888 yys
->yyresolved
= yytrue
;
1889 yys
->yysemantics
.yysval
= yysval
;
1892 yys
->yysemantics
.yyfirstVal
= NULL
;
1897 yyresolveStack (yyGLRStack
* yystackp
]b4_user_formals
[)
1899 if (yystackp
->yysplitPoint
!= NULL
)
1904 for (yyn
= 0, yys
= yystackp
->yytops
.yystates
[0];
1905 yys
!= yystackp
->yysplitPoint
;
1906 yys
= yys
->yypred
, yyn
+= 1)
1908 YYCHK (yyresolveStates (yystackp
->yytops
.yystates
[0], yyn
, yystackp
1915 yycompressStack (yyGLRStack
* yystackp
)
1917 yyGLRState
* yyp
, *yyq
, *yyr
;
1919 if (yystackp
->yytops
.yysize
!= 1 || yystackp
->yysplitPoint
== NULL
)
1922 for (yyp
= yystackp
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1923 yyp
!= yystackp
->yysplitPoint
;
1924 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1927 yystackp
->yyspaceLeft
+= yystackp
->yynextFree
- yystackp
->yyitems
;
1928 yystackp
->yynextFree
= ((yyGLRStackItem
*) yystackp
->yysplitPoint
) + 1;
1929 yystackp
->yyspaceLeft
-= yystackp
->yynextFree
- yystackp
->yyitems
;
1930 yystackp
->yysplitPoint
= NULL
;
1931 yystackp
->yylastDeleted
= NULL
;
1935 yystackp
->yynextFree
->yystate
= *yyr
;
1937 yystackp
->yynextFree
->yystate
.yypred
= &yystackp
->yynextFree
[-1].yystate
;
1938 yystackp
->yytops
.yystates
[0] = &yystackp
->yynextFree
->yystate
;
1939 yystackp
->yynextFree
+= 1;
1940 yystackp
->yyspaceLeft
-= 1;
1945 yyprocessOneStack (yyGLRStack
* yystackp
, size_t yyk
,
1946 size_t yyposn
]b4_pure_formals
[)
1949 const short int* yyconflicts
;
1952 while (yystackp
->yytops
.yystates
[yyk
] != NULL
)
1954 yyStateNum yystate
= yystackp
->yytops
.yystates
[yyk
]->yylrState
;
1955 YYDPRINTF ((stderr
, "Stack %lu Entering state %d\n",
1956 (unsigned long int) yyk
, yystate
));
1958 YYASSERT (yystate
!= YYFINAL
);
1960 if (yyisDefaultedState (yystate
))
1962 yyrule
= yydefaultAction (yystate
);
1965 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
1966 (unsigned long int) yyk
));
1967 yymarkStackDeleted (yystackp
, yyk
);
1970 YYCHK (yyglrReduce (yystackp
, yyk
, yyrule
, yyfalse
]b4_user_args
[));
1975 yystackp
->yytops
.yylookaheadNeeds
[yyk
] = yytrue
;
1976 if (yychar
== YYEMPTY
)
1978 YYDPRINTF ((stderr
, "Reading a token: "));
1982 if (yychar
<= YYEOF
)
1984 yychar
= yytoken
= YYEOF
;
1985 YYDPRINTF ((stderr
, "Now at end of input.\n"));
1989 yytoken
= YYTRANSLATE (yychar
);
1990 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
1993 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1995 while (*yyconflicts
!= 0)
1997 size_t yynewStack
= yysplitStack (yystackp
, yyk
);
1998 YYDPRINTF ((stderr
, "Splitting off stack %lu from %lu.\n",
1999 (unsigned long int) yynewStack
,
2000 (unsigned long int) yyk
));
2001 YYCHK (yyglrReduce (yystackp
, yynewStack
,
2002 *yyconflicts
, yyfalse
]b4_user_args
[));
2003 YYCHK (yyprocessOneStack (yystackp
, yynewStack
,
2004 yyposn
]b4_pure_args
[));
2008 if (yyisShiftAction (yyaction
))
2010 else if (yyisErrorAction (yyaction
))
2012 YYDPRINTF ((stderr
, "Stack %lu dies.\n",
2013 (unsigned long int) yyk
));
2014 yymarkStackDeleted (yystackp
, yyk
);
2018 YYCHK (yyglrReduce (yystackp
, yyk
, -yyaction
,
2019 yyfalse
]b4_user_args
[));
2025 /*ARGSUSED*/ static void
2026 yyreportSyntaxError (yyGLRStack
* yystackp
]b4_user_formals
[)
2028 if (yystackp
->yyerrState
== 0)
2032 yyn
= yypact
[yystackp
->yytops
.yystates
[0]->yylrState
];
2033 if (YYPACT_NINF
< yyn
&& yyn
<= YYLAST
)
2035 yySymbol yytoken
= YYTRANSLATE (yychar
);
2036 size_t yysize0
= yytnamerr (NULL
, yytokenName (yytoken
));
2037 size_t yysize
= yysize0
;
2039 yybool yysize_overflow
= yyfalse
;
2041 enum { YYERROR_VERBOSE_ARGS_MAXIMUM
= 5 };
2042 /* Internationalized format string. */
2043 const char *yyformat
= 0;
2044 /* Arguments of yyformat. */
2045 char const *yyarg
[YYERROR_VERBOSE_ARGS_MAXIMUM
];
2047 /* Start YYX at -YYN if negative to avoid negative indexes in
2048 YYCHECK. In other words, skip the first -YYN actions for this
2049 state because they are default actions. */
2050 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
2052 /* Stay within bounds of both yycheck and yytname. */
2053 int yychecklim
= YYLAST
- yyn
+ 1;
2054 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
2056 /* Number of reported tokens (one for the "unexpected", one per
2061 yyarg
[yycount
++] = yytokenName (yytoken
);
2063 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
2064 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
2065 && !yytable_value_is_error (yytable
[yyx
+ yyn
]))
2067 if (yycount
== YYERROR_VERBOSE_ARGS_MAXIMUM
)
2073 yyarg
[yycount
++] = yytokenName (yyx
);
2074 yysize1
= yysize
+ yytnamerr (NULL
, yytokenName (yyx
));
2075 yysize_overflow
|= yysize1
< yysize
;
2081 #define YYCASE_(N, S) \
2085 YYCASE_(1, YY_("syntax error, unexpected %s"));
2086 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
2087 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
2088 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
2089 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
2093 yysize1
= yysize
+ strlen (yyformat
);
2094 yysize_overflow
|= yysize1
< yysize
;
2097 if (!yysize_overflow
)
2098 yymsg
= (char *) YYMALLOC (yysize
);
2104 while ((*yyp
= *yyformat
))
2106 if (*yyp
== '%' && yyformat
[1] == 's' && yyi
< yycount
)
2108 yyp
+= yytnamerr (yyp
, yyarg
[yyi
++]);
2117 yyerror (]b4_lyyerror_args
[yymsg
);
2122 yyerror (]b4_lyyerror_args
[YY_("syntax error"));
2123 yyMemoryExhausted (yystackp
);
2127 #endif /* YYERROR_VERBOSE */
2128 yyerror (]b4_lyyerror_args
[YY_("syntax error"));
2133 /* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP,
2134 yylval, and yylloc are the syntactic category, semantic value, and location
2135 of the lookahead. */
2136 /*ARGSUSED*/ static void
2137 yyrecoverSyntaxError (yyGLRStack
* yystackp
]b4_user_formals
[)
2142 if (yystackp
->yyerrState
== 3)
2143 /* We just shifted the error token and (perhaps) took some
2144 reductions. Skip tokens until we can proceed. */
2145 while (YYID (yytrue
))
2148 if (yychar
== YYEOF
)
2149 yyFail (yystackp
][]b4_lpure_args
[, NULL
);
2150 if (yychar
!= YYEMPTY
)
2151 {]b4_locations_if([[
2152 /* We throw away the lookahead, but the error range
2153 of the shifted error token must take it into account. */
2154 yyGLRState
*yys
= yystackp
->yytops
.yystates
[0];
2155 yyGLRStackItem yyerror_range
[3];
2156 yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;
2157 yyerror_range
[2].yystate
.yyloc
= yylloc
;
2158 YYLLOC_DEFAULT ((yys
->yyloc
), yyerror_range
, 2);]])[
2159 yytoken
= YYTRANSLATE (yychar
);
2160 yydestruct ("Error: discarding",
2161 yytoken
, &yylval
]b4_locations_if([, &yylloc
])[]b4_user_args
[);
2163 YYDPRINTF ((stderr
, "Reading a token: "));
2165 if (yychar
<= YYEOF
)
2167 yychar
= yytoken
= YYEOF
;
2168 YYDPRINTF ((stderr
, "Now at end of input.\n"));
2172 yytoken
= YYTRANSLATE (yychar
);
2173 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
2175 yyj
= yypact
[yystackp
->yytops
.yystates
[0]->yylrState
];
2176 if (yypact_value_is_default (yyj
))
2179 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != yytoken
)
2181 if (yydefact
[yystackp
->yytops
.yystates
[0]->yylrState
] != 0)
2184 else if (! yytable_value_is_error (yytable
[yyj
]))
2188 /* Reduce to one stack. */
2189 for (yyk
= 0; yyk
< yystackp
->yytops
.yysize
; yyk
+= 1)
2190 if (yystackp
->yytops
.yystates
[yyk
] != NULL
)
2192 if (yyk
>= yystackp
->yytops
.yysize
)
2193 yyFail (yystackp
][]b4_lpure_args
[, NULL
);
2194 for (yyk
+= 1; yyk
< yystackp
->yytops
.yysize
; yyk
+= 1)
2195 yymarkStackDeleted (yystackp
, yyk
);
2196 yyremoveDeletes (yystackp
);
2197 yycompressStack (yystackp
);
2199 /* Now pop stack until we find a state that shifts the error token. */
2200 yystackp
->yyerrState
= 3;
2201 while (yystackp
->yytops
.yystates
[0] != NULL
)
2203 yyGLRState
*yys
= yystackp
->yytops
.yystates
[0];
2204 yyj
= yypact
[yys
->yylrState
];
2205 if (! yypact_value_is_default (yyj
))
2208 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
2209 && yyisShiftAction (yytable
[yyj
]))
2211 /* Shift the error token having adjusted its location. */
2212 YYLTYPE yyerrloc
;]b4_locations_if([[
2213 yystackp
->yyerror_range
[2].yystate
.yyloc
= yylloc
;
2214 YYLLOC_DEFAULT (yyerrloc
, (yystackp
->yyerror_range
), 2);]])[
2215 YY_SYMBOL_PRINT ("Shifting", yystos
[yytable
[yyj
]],
2216 &yylval
, &yyerrloc
);
2217 yyglrShift (yystackp
, 0, yytable
[yyj
],
2218 yys
->yyposn
, &yylval
, &yyerrloc
);
2219 yys
= yystackp
->yytops
.yystates
[0];
2223 ]b4_locations_if([[ yystackp
->yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]])[
2224 if (yys
->yypred
!= NULL
)
2225 yydestroyGLRState ("Error: popping", yys
]b4_user_args
[);
2226 yystackp
->yytops
.yystates
[0] = yys
->yypred
;
2227 yystackp
->yynextFree
-= 1;
2228 yystackp
->yyspaceLeft
+= 1;
2230 if (yystackp
->yytops
.yystates
[0] == NULL
)
2231 yyFail (yystackp
][]b4_lpure_args
[, NULL
);
2234 #define YYCHK1(YYE) \
2244 goto yyuser_error; \
2255 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
2259 yyGLRStack
* const yystackp
= &yystack
;
2262 YYDPRINTF ((stderr
, "Starting parse\n"));
2265 yylval
= yyval_default
;
2267 #if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
2268 yylloc
.first_line
= yylloc
.last_line
= ]b4_location_initial_line
[;
2269 yylloc
.first_column
= yylloc
.last_column
= ]b4_location_initial_column
[;
2272 m4_ifdef([b4_initial_action
], [
2273 m4_pushdef([b4_at_dollar
], [yylloc
])dnl
2274 m4_pushdef([b4_dollar_dollar
], [yylval
])dnl
2275 /* User initialization code. */
2276 b4_user_initial_action
2277 m4_popdef([b4_dollar_dollar
])dnl
2278 m4_popdef([b4_at_dollar
])])dnl
2280 if (! yyinitGLRStack (yystackp
, YYINITDEPTH
))
2281 goto yyexhaustedlab
;
2282 switch (YYSETJMP (yystack
.yyexception_buffer
))
2285 case 1: goto yyabortlab
;
2286 case 2: goto yyexhaustedlab
;
2287 default: goto yybuglab
;
2289 yyglrShift (&yystack
, 0, 0, 0, &yylval
, &yylloc
);
2292 while (YYID (yytrue
))
2294 /* For efficiency, we have two loops, the first of which is
2295 specialized to deterministic operation (single stack, no
2296 potential ambiguity). */
2298 while (YYID (yytrue
))
2302 const short int* yyconflicts
;
2304 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
2305 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
2306 if (yystate
== YYFINAL
)
2308 if (yyisDefaultedState (yystate
))
2310 yyrule
= yydefaultAction (yystate
);
2313 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2314 yyreportSyntaxError (&yystack
]b4_user_args
[);
2317 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_user_args
[));
2322 if (yychar
== YYEMPTY
)
2324 YYDPRINTF ((stderr
, "Reading a token: "));
2328 if (yychar
<= YYEOF
)
2330 yychar
= yytoken
= YYEOF
;
2331 YYDPRINTF ((stderr
, "Now at end of input.\n"));
2335 yytoken
= YYTRANSLATE (yychar
);
2336 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
2339 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
2340 if (*yyconflicts
!= 0)
2342 if (yyisShiftAction (yyaction
))
2344 YY_SYMBOL_PRINT ("Shifting", yytoken
, &yylval
, &yylloc
);
2347 yyglrShift (&yystack
, 0, yyaction
, yyposn
, &yylval
, &yylloc
);
2348 if (0 < yystack
.yyerrState
)
2349 yystack
.yyerrState
-= 1;
2351 else if (yyisErrorAction (yyaction
))
2353 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2354 yyreportSyntaxError (&yystack
]b4_user_args
[);
2358 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_user_args
[));
2362 while (YYID (yytrue
))
2364 yySymbol yytoken_to_shift
;
2367 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2368 yystackp
->yytops
.yylookaheadNeeds
[yys
] = yychar
!= YYEMPTY
;
2370 /* yyprocessOneStack returns one of three things:
2372 - An error flag. If the caller is yyprocessOneStack, it
2373 immediately returns as well. When the caller is finally
2374 yyparse, it jumps to an error label via YYCHK1.
2376 - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
2377 (&yystack, yys), which sets the top state of yys to NULL. Thus,
2378 yyparse's following invocation of yyremoveDeletes will remove
2381 - yyok, when ready to shift a token.
2383 Except in the first case, yyparse will invoke yyremoveDeletes and
2384 then shift the next token onto all remaining stacks. This
2385 synchronization of the shift (that is, after all preceding
2386 reductions on all stacks) helps prevent double destructor calls
2387 on yylval in the event of memory exhaustion. */
2389 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2390 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
]b4_lpure_args
[));
2391 yyremoveDeletes (&yystack
);
2392 if (yystack
.yytops
.yysize
== 0)
2394 yyundeleteLastStack (&yystack
);
2395 if (yystack
.yytops
.yysize
== 0)
2396 yyFail (&yystack
][]b4_lpure_args
[, YY_("syntax error"));
2397 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
2398 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
2399 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yylloc
;]])[
2400 yyreportSyntaxError (&yystack
]b4_user_args
[);
2404 /* If any yyglrShift call fails, it will fail after shifting. Thus,
2405 a copy of yylval will already be on stack 0 in the event of a
2406 failure in the following loop. Thus, yychar is set to YYEMPTY
2407 before the loop to make sure the user destructor for yylval isn't
2409 yytoken_to_shift
= YYTRANSLATE (yychar
);
2412 for (yys
= 0; yys
< yystack
.yytops
.yysize
; yys
+= 1)
2415 const short int* yyconflicts
;
2416 yyStateNum yystate
= yystack
.yytops
.yystates
[yys
]->yylrState
;
2417 yygetLRActions (yystate
, yytoken_to_shift
, &yyaction
,
2419 /* Note that yyconflicts were handled by yyprocessOneStack. */
2420 YYDPRINTF ((stderr
, "On stack %lu, ", (unsigned long int) yys
));
2421 YY_SYMBOL_PRINT ("shifting", yytoken_to_shift
, &yylval
, &yylloc
);
2422 yyglrShift (&yystack
, yys
, yyaction
, yyposn
,
2424 YYDPRINTF ((stderr
, "Stack %lu now in state #%d\n",
2425 (unsigned long int) yys
,
2426 yystack
.yytops
.yystates
[yys
]->yylrState
));
2429 if (yystack
.yytops
.yysize
== 1)
2431 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
2432 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
2433 yycompressStack (&yystack
);
2439 yyrecoverSyntaxError (&yystack
]b4_user_args
[);
2440 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
2456 yyerror (]b4_lyyerror_args
[YY_("memory exhausted"));
2461 if (yychar
!= YYEMPTY
)
2462 yydestruct ("Cleanup: discarding lookahead",
2463 YYTRANSLATE (yychar
),
2464 &yylval
]b4_locations_if([, &yylloc
])[]b4_user_args
[);
2466 /* If the stack is well-formed, pop the stack until it is empty,
2467 destroying its entries as we go. But free the stack regardless
2468 of whether it is well-formed. */
2469 if (yystack
.yyitems
)
2471 yyGLRState
** yystates
= yystack
.yytops
.yystates
;
2474 size_t yysize
= yystack
.yytops
.yysize
;
2476 for (yyk
= 0; yyk
< yysize
; yyk
+= 1)
2479 while (yystates
[yyk
])
2481 yyGLRState
*yys
= yystates
[yyk
];
2482 ]b4_locations_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]]
2483 )[ if (yys
->yypred
!= NULL
)
2484 yydestroyGLRState ("Cleanup: popping", yys
]b4_user_args
[);
2485 yystates
[yyk
] = yys
->yypred
;
2486 yystack
.yynextFree
-= 1;
2487 yystack
.yyspaceLeft
+= 1;
2492 yyfreeGLRStack (&yystack
);
2495 /* Make sure YYID is used. */
2496 return YYID (yyresult
);
2499 /* DEBUGGING ONLY */
2501 static void yypstack (yyGLRStack
* yystackp
, size_t yyk
)
2502 __attribute__ ((__unused__
));
2503 static void yypdumpstack (yyGLRStack
* yystackp
) __attribute__ ((__unused__
));
2506 yy_yypstack (yyGLRState
* yys
)
2510 yy_yypstack (yys
->yypred
);
2511 YYFPRINTF (stderr
, " -> ");
2513 YYFPRINTF (stderr
, "%d@@%lu", yys
->yylrState
,
2514 (unsigned long int) yys
->yyposn
);
2518 yypstates (yyGLRState
* yyst
)
2521 YYFPRINTF (stderr
, "<null>");
2524 YYFPRINTF (stderr
, "\n");
2528 yypstack (yyGLRStack
* yystackp
, size_t yyk
)
2530 yypstates (yystackp
->yytops
.yystates
[yyk
]);
2533 #define YYINDEX(YYX) \
2534 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
2538 yypdumpstack (yyGLRStack
* yystackp
)
2540 yyGLRStackItem
* yyp
;
2542 for (yyp
= yystackp
->yyitems
; yyp
< yystackp
->yynextFree
; yyp
+= 1)
2544 YYFPRINTF (stderr
, "%3lu. ",
2545 (unsigned long int) (yyp
- yystackp
->yyitems
));
2546 if (*(yybool
*) yyp
)
2548 YYFPRINTF (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
2549 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
2550 (unsigned long int) yyp
->yystate
.yyposn
,
2551 (long int) YYINDEX (yyp
->yystate
.yypred
));
2552 if (! yyp
->yystate
.yyresolved
)
2553 YYFPRINTF (stderr
, ", firstVal: %ld",
2554 (long int) YYINDEX (yyp
->yystate
2555 .yysemantics
.yyfirstVal
));
2559 YYFPRINTF (stderr
, "Option. rule: %d, state: %ld, next: %ld",
2560 yyp
->yyoption
.yyrule
- 1,
2561 (long int) YYINDEX (yyp
->yyoption
.yystate
),
2562 (long int) YYINDEX (yyp
->yyoption
.yynext
));
2564 YYFPRINTF (stderr
, "\n");
2566 YYFPRINTF (stderr
, "Tops:");
2567 for (yyi
= 0; yyi
< yystackp
->yytops
.yysize
; yyi
+= 1)
2568 YYFPRINTF (stderr
, "%lu: %ld; ", (unsigned long int) yyi
,
2569 (long int) YYINDEX (yystackp
->yytops
.yystates
[yyi
]));
2570 YYFPRINTF (stderr
, "\n");
2575 dnl glr
.cc produces its own header
.
2577 m4_if(b4_skeleton
, ["glr.c"],
2579 [@
output(b4_spec_defines_file@
)@
2580 b4_copyright([Skeleton interface
for Bison GLR parsers in C
],
2581 [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009])
2583 b4_shared_declarations
2586 [[extern YYSTYPE
]b4_prefix
[lval
;]])
2588 b4_locations_if([b4_pure_if([],
2589 [extern YYLTYPE
]b4_prefix
[lloc
;])