X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/f1886bb2808a471b18e1416e0f821d08850d116e..f6abc26e38ad488fa7ce59e22efcc2130bea310f:/data/glr.c diff --git a/data/glr.c b/data/glr.c index 77a35afc..c10bb2d2 100644 --- a/data/glr.c +++ b/data/glr.c @@ -28,9 +28,15 @@ m4_include([c.m4]) m4_define_default([b4_stack_depth_max], [10000]) m4_define_default([b4_stack_depth_init], [200]) -# Location type. -m4_define_default([b4_location_type], [yyltype]) + +## ------------------------ ## +## Pure/impure interfaces. ## +## ------------------------ ## + + +# b4_lex_param +# ------------ # Accumule in b4_lex_param all the yylex arguments. # Yes, this is quite ugly... m4_define([b4_lex_param], @@ -38,13 +44,56 @@ m4_dquote(b4_pure_if([[[[YYSTYPE *]], [[yylvalp]]][]dnl b4_location_if([, [[YYLTYPE *], [yyllocp]]])])dnl m4_ifdef([b4_lex_param], [, ]b4_lex_param))) -# Yes, this is quite ugly... - m4_define_default([b4_parse_param]) -m4_ifdef([b4_parse_param], -[m4_define([b4_parse_param], - b4_parse_param)]) + +# b4_user_formals +# --------------- +m4_define([b4_user_formals], +[m4_ifset([b4_parse_param], [, b4_c_ansi_formals(b4_parse_param)])]) + + +# b4_yyerror_args +# --------------- +# Arguments passed to yyerror: user args plus yylloc. +m4_define([b4_yyerror_args], +[b4_pure_if([b4_location_if([yylocp, ])])dnl +m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])]) + + +# b4_lyyerror_args +# ---------------- +# Same as above, but on the lookahead, hence yyllocp instead of yylocp. +m4_define([b4_lyyerror_args], +[b4_pure_if([b4_location_if([yyllocp, ])])dnl +m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])]) + + +# b4_pure_args +# ------------ +# Arguments needed by yyerror: user args plus yylloc. +m4_define([b4_pure_args], +[b4_pure_if([b4_location_if([, yylocp])])[]b4_user_args]) +# b4_pure_formals +# --------------- +# Arguments passed to yyerror: user formals plus yyllocp. +m4_define([b4_pure_formals], +[b4_pure_if([b4_location_if([, YYLTYPE *yylocp])])[]b4_user_formals]) + + +# b4_lpure_args +# ------------- +# Same as above, but on the lookahead, hence yyllocp instead of yylocp. +m4_define([b4_lpure_args], +[b4_pure_if([b4_location_if([, yyllocp])])[]b4_user_args]) + + +# b4_lpure_formals +# ---------------- +# Same as above, but on the lookahead, hence yyllocp instead of yylocp. +m4_define([b4_lpure_formals], +[b4_pure_if([b4_location_if([YYLTYPE *yyllocp])])[]b4_user_formals]) + ## ----------------- ## ## Semantic Values. ## @@ -63,7 +112,7 @@ m4_define([b4_lhs_value], # Expansion of $NUM, where the current rule has RULE-LENGTH # symbols on RHS. m4_define([b4_rhs_value], -[yyvsp@<:@m4_eval([$2 - $1])@:>@.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3])]) +[yyvsp@{m4_eval([$2 - $1])@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3])]) @@ -83,58 +132,25 @@ m4_define([b4_lhs_location], # Expansion of @NUM, where the current rule has RULE-LENGTH symbols # on RHS. m4_define([b4_rhs_location], -[yyvsp@<:@m4_eval([$2 - $1])@:>@.yystate.yyloc]) - - - -## ------------------- ## -## Output file names. ## -## ------------------- ## - -m4_define_default([b4_input_suffix], [.y]) - -m4_define_default([b4_output_parser_suffix], -[m4_translit(b4_input_suffix, [yY], [cC])]) - -m4_define_default([b4_output_parser_name], -[b4_output_prefix[]b4_output_infix[]b4_output_parser_suffix[]]) - - -m4_define_default([b4_output_header_suffix], -[m4_translit(b4_input_suffix, [yY], [hH])]) - -m4_define_default([b4_output_header_name], -[b4_output_prefix[]b4_output_infix[]b4_output_header_suffix[]]) - -m4_define_default([b4_header_guard], - [m4_bpatsubst(m4_toupper([BISON_]b4_output_header_name), - [[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]], [_])]) +[yyvsp@{m4_eval([$2 - $1])@}.yystate.yyloc]) +# We do want M4 expansion after # for CPP macros. +m4_changecom() m4_divert(0)dnl -#output "b4_output_parser_name" +@output @output_parser_name@ b4_copyright([Skeleton parser for GLR parsing with Bison], [2002]) [ /* This is the parser code for GLR (Generalized LR) parser. */ -/* FIXME: minimize these */ -#include -#include -#include #include #include #include +#include +#include -/* Identify Bison output. */ -#define YYBISON 1 - -/* Pure parsers. */ -#define YYPURE ]b4_pure[ - -/* Using locations. */ -#define YYLSP_NEEDED ]b4_locations_flag[ - -]m4_if(b4_prefix[], [yy], [], +]b4_identification +m4_if(b4_prefix[], [yy], [], [/* If NAME_PREFIX is specified substitute the variables and functions names. */ #define yyparse b4_prefix[]parse @@ -164,32 +180,32 @@ b4_pre_prologue[ # define YYERROR_VERBOSE ]b4_error_verbose[ #endif -#ifndef YYSTYPE +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) ]m4_ifdef([b4_stype], -[#line b4_stype_line "b4_filename" -typedef union b4_stype yystype; -/* Line __line__ of __file__. */ -#line __oline__ "__ofile__"], -[typedef int yystype;])[ -# define YYSTYPE yystype +[b4_syncline([b4_stype_line], [b4_filename]) +typedef union m4_bregexp(b4_stype, [^{], [YYSTYPE ])b4_stype YYSTYPE; +/* Line __line__ of glr.c. */ +b4_syncline([@oline@], [@ofile@])], +[typedef int YYSTYPE;])[ +# define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif -#ifndef YYLTYPE -typedef struct yyltype +#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED) +typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; -} yyltype; -# define YYLTYPE ]b4_location_type[ +} YYLTYPE; +# define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif /* Default (constant) values used for initialization for null - right-hand sides. Unlike the standard bison.simple template, - here we set the default values of the $$ and $@ to zeroed-out + right-hand sides. Unlike the standard yacc.c template, + here we set the default values of $$ and $@@ to zeroed-out values. Since the default value of these quantities is undefined, this behavior is technically correct. */ static YYSTYPE yyval_default; @@ -198,8 +214,8 @@ static YYLTYPE yyloc_default; /* Copy the second part of user declarations. */ ]b4_post_prologue[ -]/* Line __line__ of __file__. */ -#line __oline__ "__ofile__" +]/* Line __line__ of glr.c. */ +b4_syncline([@oline@], [@ofile@]) [ #if ! defined (__cplusplus) typedef char bool; @@ -223,10 +239,6 @@ static YYLTYPE yyloc_default; # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) #endif -#if ! defined (__GNUC__) -# define inline -#endif - /* YYFINAL -- State number of the termination state. */ #define YYFINAL ]b4_final_state_number[ /* YYLAST -- Last index in YYTABLE. */ @@ -247,8 +259,9 @@ static YYLTYPE yyloc_default; #define YYUNDEFTOK ]b4_undef_token_number[ #define YYMAXUTOK ]b4_user_token_number_max[ -#define YYTRANSLATE(YYX) \ - ((unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) +#define YYTRANSLATE(YYX) \ + ((YYX <= 0) ? YYEOF : \ + (unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const ]b4_int_type_for([b4_translate])[ yytranslate[] = @@ -343,7 +356,7 @@ static const ]b4_int_type_for([b4_pgoto])[ yypgoto[] = /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, parse error. */ + If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF ]b4_table_ninf[ static const ]b4_int_type_for([b4_table])[ yytable[] = { @@ -374,18 +387,18 @@ static const ]b4_int_type_for([b4_check])[ yycheck[] = ]b4_check[ }; +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const ]b4_int_type_for([b4_stos])[ yystos[] = +{ + ]b4_stos[ +}; + /* Prevent warning if -Wmissing-prototypes. */ -]b4_c_ansi_function_decl([yyparse], [int], b4_parse_param) +]b4_c_ansi_function_decl([yyparse], [int], b4_parse_param)[ -m4_ifset([b4_parse_param], -[#define YY_USER_FORMALS , b4_c_ansi_formals(b4_parse_param) -#define YY_USER_ARGS , b4_c_args(b4_parse_param)], -[#define YY_USER_FORMALS -#define YY_USER_ARGS]) - - -[/* Error token number */ +/* Error token number */ #define YYTERROR 1 /* YYLLOC_DEFAULT -- Compute the default location (before the actions @@ -437,12 +450,37 @@ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) + +]b4_yysymprint_generate([b4_c_ansi_function_def])[ + +# define YYDSYMPRINT(Args) \ +do { \ + if (yydebug) \ + yysymprint Args; \ +} while (0) + +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value]b4_location_if([, Location])[); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; + #else /* !YYDEBUG */ + /* Avoid empty `if' bodies. */ -# define YYDPRINTF(Args) {} +# define YYDPRINTF(Args) +# define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) + #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ @@ -472,8 +510,9 @@ int yydebug; properly redirected to new data. */ #define YYHEADROOM 2 -#if ! defined (YYSTACKEXPANDABLE) \ - && (! defined (__cplusplus) || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)) +#if (! defined (YYSTACKEXPANDABLE) \ + && (! defined (__cplusplus) \ + || (]b4_location_if([YYLTYPE_IS_TRIVIAL && ])[YYSTYPE_IS_TRIVIAL))) #define YYSTACKEXPANDABLE 1 #else #define YYSTACKEXPANDABLE 0 @@ -546,20 +585,20 @@ struct yyGLRStack { }; static void yyinitGLRStack (yyGLRStack* yystack, size_t yysize); -static void yyexpandGLRStack (yyGLRStack* yystack); +static void yyexpandGLRStack (yyGLRStack* yystack]b4_pure_formals[); static void yyfreeGLRStack (yyGLRStack* yystack); static void -yyFail (yyGLRStack* yystack, const char* yyformat, ...) +yyFail (yyGLRStack* yystack]b4_pure_formals[, const char* yyformat, ...) { + yystack->yyerrflag = 1; if (yyformat != NULL) { char yymsg[256]; va_list yyap; va_start (yyap, yyformat); - yystack->yyerrflag = 1; vsprintf (yymsg, yyformat, yyap); - yyerror (yymsg); + yyerror (]b4_yyerror_args[yymsg); } longjmp (yystack->yyexception_buffer, 1); } @@ -577,12 +616,12 @@ yytokenName (yySymbol yytoken) /** Perform user action for rule number YYN, with RHS length YYRHSLEN, * and top stack item YYVSP. YYLVALP points to place to put semantic * value ($$), and yylocp points to place for location information - * (@$). Returns yyok for normal return, yyaccept for YYACCEPT, + * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT, * yyerr for YYERROR, yyabort for YYABORT. */ static YYRESULTTAG yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, YYSTYPE* yyvalp, YYLTYPE* yylocp, yyGLRStack* yystack - YY_USER_FORMALS) + ]b4_user_formals[) { /* Avoid `unused' warnings in there are no $n. */ (void) yystack; @@ -597,8 +636,6 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, *yyvalp = yyvsp[1-yyrhslen].yystate.yysemantics.yysval; *yylocp = yyvsp[1-yyrhslen].yystate.yyloc; } -# undef yyval -# define yyval (*yyvalp) # undef yyerrok # define yyerrok (yystack->yyerrState = 0) # undef YYACCEPT @@ -614,7 +651,7 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, # undef YYBACKUP # define YYBACKUP(Token, Value) \ do { \ - yyerror ("syntax error: cannot back up"); \ + yyerror (]b4_yyerror_args["syntax error: cannot back up"); \ YYERROR; \ } while (0) @@ -625,7 +662,6 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, } return yyok; -# undef yyval # undef yyerrok # undef YYABORT # undef YYACCEPT @@ -633,8 +669,8 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, # undef YYBACKUP # undef yyclearin # undef YYRECOVERING -/* Line __line__ of __file__. */ -#line __oline__ "__ofile__" +/* Line __line__ of glr.c. */ +b4_syncline([@oline@], [@ofile@]) } @@ -642,7 +678,7 @@ static YYSTYPE yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1) { YYSTYPE yyval = *yy0; - /* `Use' the arguments. */ + /* `Use' the arguments. */ (void) yy0; (void) yy1; @@ -653,7 +689,9 @@ yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1) return yyval; } [ - /* Bison grammar-table manipulation */ + /* Bison grammar-table manipulation. */ + +]b4_yydestruct_generate([b4_c_ansi_function_def])[ /** Number of symbols composing the right hand side of rule #RULE. */ static inline int @@ -669,12 +707,17 @@ yylhsNonterm (yyRuleNum yyrule) return yyr1[yyrule]; } +#define yyis_pact_ninf(yystate) \ + ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1, + 0, + ((yystate) == YYPACT_NINF))[ + /** True iff LR state STATE has only a default reduction (regardless * of token). */ static inline bool yyisDefaultedState (yyStateNum yystate) { - return yypact[yystate] == YYPACT_NINF; + return yyis_pact_ninf (yypact[yystate]); } /** The default reduction for STATE, assuming it has one. */ @@ -684,6 +727,11 @@ yydefaultAction (yyStateNum yystate) return yydefact[yystate]; } +#define yyis_table_ninf(yytable_value) \ + ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1, + 0, + ((yytable_value) == YYTABLE_NINF))[ + /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN. * Result R means * R < 0: Reduce on rule -R. @@ -702,7 +750,7 @@ yygetLRActions (yyStateNum yystate, int yytoken, *yyaction = -yydefact[yystate]; *yyconflicts = yyconfl; } - else if (yytable[yyindex] != YYTABLE_NINF) + else if (! yyis_table_ninf (yytable[yyindex])) { *yyaction = yytable[yyindex]; *yyconflicts = yyconfl + yyconflp[yyindex]; @@ -739,17 +787,9 @@ yyisErrorAction (int yyaction) /* GLRStates */ -/** True iff the semantic value of the edge leading to STATE is - * resolved. */ -static inline bool -yyhasResolvedValue (yyGLRState* yystate) -{ - return yystate->yyresolved; -} - static void yyaddDeferredAction (yyGLRStack* yystack, yyGLRState* yystate, - yyGLRState* rhs, yyRuleNum yyrule) + yyGLRState* rhs, yyRuleNum yyrule]b4_pure_formals[) { yySemanticOption* yynewItem; yynewItem = &yystack->yynextFree->yyoption; @@ -761,7 +801,7 @@ yyaddDeferredAction (yyGLRStack* yystack, yyGLRState* yystate, yynewItem->yynext = yystate->yysemantics.yyfirstVal; yystate->yysemantics.yyfirstVal = yynewItem; if (yystack->yyspaceLeft < YYHEADROOM) - yyexpandGLRStack (yystack); + yyexpandGLRStack (yystack]b4_pure_args[); } /* GLRStacks */ @@ -806,7 +846,7 @@ yyinitGLRStack (yyGLRStack* yystack, size_t yysize) allocation, so that we can avoid having external pointers exist across an allocation. */ static void -yyexpandGLRStack (yyGLRStack* yystack) +yyexpandGLRStack (yyGLRStack* yystack]b4_pure_formals[) { #if YYSTACKEXPANDABLE yyGLRStack yynewStack; @@ -815,7 +855,7 @@ yyexpandGLRStack (yyGLRStack* yystack) size_t yyn; yysize = yystack->yynextFree - yystack->yyitems; if (YYMAXDEPTH <= yysize) - yyFail (yystack, "parsing stack overflow (%d items)", yysize); + yyFail (yystack][]b4_pure_args[, "parser stack overflow"); yynewSize = 2*yysize; if (YYMAXDEPTH < yynewSize) yynewSize = YYMAXDEPTH; @@ -862,8 +902,7 @@ yyexpandGLRStack (yyGLRStack* yystack) #else - yyFail (yystack, "parsing stack overflow (%d items)", yysize); - + yyFail (yystack][]b4_lpure_args[, "parser stack overflow"); #endif } @@ -917,14 +956,18 @@ yyremoveDeletes (yyGLRStack* yystack) if (yystack->yytops.yystates[yyi] == NULL) { if (yyi == yyj) - YYDPRINTF ((stderr, "Removing dead stacks.\n")); + { + YYDPRINTF ((stderr, "Removing dead stacks.\n")); + } yystack->yytops.yysize -= 1; } else { yystack->yytops.yystates[yyj] = yystack->yytops.yystates[yyi]; if (yyj != yyi) - YYDPRINTF ((stderr, "Rename stack %d -> %d.\n", yyi, yyj)); + { + YYDPRINTF ((stderr, "Rename stack %d -> %d.\n", yyi, yyj)); + } yyj += 1; } yyi += 1; @@ -935,7 +978,7 @@ yyremoveDeletes (yyGLRStack* yystack) * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */ static inline void yyglrShift (yyGLRStack* yystack, int yyk, yyStateNum yylrState, size_t yyposn, - YYSTYPE yysval, YYLTYPE* yylocp) + YYSTYPE yysval, YYLTYPE* yylocp]b4_user_formals[) { yyGLRStackItem* yynewItem; @@ -951,7 +994,7 @@ yyglrShift (yyGLRStack* yystack, int yyk, yyStateNum yylrState, size_t yyposn, yynewItem->yystate.yysemantics.yysval = yysval; yynewItem->yystate.yyloc = *yylocp; if (yystack->yyspaceLeft < YYHEADROOM) - yyexpandGLRStack (yystack); + yyexpandGLRStack (yystack]b4_pure_args[); } /** Shift to a new state on stack #K of STACK, to a new state @@ -959,7 +1002,7 @@ yyglrShift (yyGLRStack* yystack, int yyk, yyStateNum yylrState, size_t yyposn, * the (unresolved) semantic value of RHS under the action for RULE. */ static inline void yyglrShiftDefer (yyGLRStack* yystack, int yyk, yyStateNum yylrState, - size_t yyposn, yyGLRState* rhs, yyRuleNum yyrule) + size_t yyposn, yyGLRState* rhs, yyRuleNum yyrule]b4_pure_formals[) { yyGLRStackItem* yynewItem; @@ -973,7 +1016,7 @@ yyglrShiftDefer (yyGLRStack* yystack, int yyk, yyStateNum yylrState, yystack->yytops.yystates[yyk] = &yynewItem->yystate; yystack->yynextFree += 1; yystack->yyspaceLeft -= 1; - yyaddDeferredAction (yystack, &yynewItem->yystate, rhs, yyrule); + yyaddDeferredAction (yystack, &yynewItem->yystate, rhs, yyrule]b4_pure_args[); } /** Pop the symbols consumed by reduction #RULE from the top of stack @@ -982,9 +1025,9 @@ yyglrShiftDefer (yyGLRStack* yystack, int yyk, yyStateNum yylrState, * have been previously resolved. Set *VALP to the resulting value, * and *LOCP to the computed location (if any). Return value is as * for userAction. */ -static inline int +static inline YYRESULTTAG yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule, - YYSTYPE* yyvalp, YYLTYPE* yylocp YY_USER_FORMALS) + YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[) { int yynrhs = yyrhsLength (yyrule); @@ -992,7 +1035,8 @@ yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule, { /* Standard special case: single stack. */ yyGLRStackItem* rhs = (yyGLRStackItem*) yystack->yytops.yystates[yyk]; - assert (yyk == 0); + if (yyk != 0) + abort (); yystack->yynextFree -= yynrhs; yystack->yyspaceLeft += yynrhs; yystack->yytops.yystates[0] = & yystack->yynextFree[-1].yystate; @@ -1007,7 +1051,7 @@ yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule, *yylocp = rhs[1-yynrhs].yystate.yyloc; } return yyuserAction (yyrule, yynrhs, rhs, - yyvalp, yylocp, yystack YY_USER_ARGS); + yyvalp, yylocp, yystack]b4_user_args[); } else { @@ -1017,7 +1061,8 @@ yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule, for (yyi = yynrhs-1, yys = yystack->yytops.yystates[yyk]; 0 <= yyi; yyi -= 1, yys = yys->yypred) { - assert (yys->yypred != NULL); + if (! yys->yypred) + abort (); yyrhsVals[yyi].yystate.yyresolved = yytrue; yyrhsVals[yyi].yystate.yysemantics.yysval = yys->yysemantics.yysval; yyrhsVals[yyi].yystate.yyloc = yys->yyloc; @@ -1035,7 +1080,7 @@ yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule, *yylocp = yyrhsVals[0].yystate.yyloc; } return yyuserAction (yyrule, yynrhs, yyrhsVals + (yynrhs-1), - yyvalp, yylocp, yystack YY_USER_ARGS); + yyvalp, yylocp, yystack]b4_user_args[); } } @@ -1056,12 +1101,13 @@ static inline void yy_reduce_print (size_t yyk, yyRuleNum yyrule) { int yyi; - YYDPRINTF ((stderr, "Reducing stack %d by rule %d (line %d),", - yyk, yyrule - 1, yyrline[yyrule])); + unsigned int yylineno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack %d by rule %d (line %u), ", + yyk, yyrule - 1, yylineno); /* Print the symbols being reduced, and their result. */ for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) YYFPRINTF (stderr, "%s ", yytokenName (yyrhs[yyi])); - YYFPRINTF (stderr, " -> %s\n", yytokenName (yyr1[yyrule])); + YYFPRINTF (stderr, "-> %s\n", yytokenName (yyr1[yyrule])); } #endif @@ -1078,7 +1124,7 @@ yy_reduce_print (size_t yyk, yyRuleNum yyrule) */ static inline YYRESULTTAG yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule, - bool yyforceEval YY_USER_FORMALS) + bool yyforceEval]b4_pure_formals[) { size_t yyposn = yystack->yytops.yystates[yyk]->yyposn; @@ -1088,13 +1134,11 @@ yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule, YYLTYPE yyloc; YY_REDUCE_PRINT (yyk, yyrule); - YYCHK (yydoAction (yystack, yyk, yyrule, &yysval, &yyloc YY_USER_ARGS)); + YYCHK (yydoAction (yystack, yyk, yyrule, &yysval, &yyloc]b4_user_args[)); yyglrShift (yystack, yyk, yyLRgotoState (yystack->yytops.yystates[yyk]->yylrState, yylhsNonterm (yyrule)), - yyposn, yysval, &yyloc); - YYDPRINTF ((stderr, "Stack %d entering state %d\n", - yyk, yystack->yytops.yystates[yyk]->yylrState)); + yyposn, yysval, &yyloc]b4_user_args[); } else { @@ -1107,7 +1151,8 @@ yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule, 0 < yyn; yyn -= 1) { yys = yys->yypred; - assert (yys != NULL); + if (! yys) + abort (); } yyupdateSplit (yystack, yys); yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule)); @@ -1124,19 +1169,19 @@ yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule, { if (yyp->yylrState == yynewLRState && yyp->yypred == yys) { - yyaddDeferredAction (yystack, yyp, yys0, yyrule); + yyaddDeferredAction (yystack, yyp, yys0, yyrule]b4_pure_args[); yymarkStackDeleted (yystack, yyk); YYDPRINTF ((stderr, "Merging stack %d into stack %d.\n", yyk, yyi)); - return 0; + return yyok; } yyp = yyp->yypred; } } yystack->yytops.yystates[yyk] = yys; - yyglrShiftDefer (yystack, yyk, yynewLRState, yyposn, yys0, yyrule); + yyglrShiftDefer (yystack, yyk, yynewLRState, yyposn, yys0, yyrule]b4_pure_args[); } - return 0; + return yyok; } static int @@ -1144,7 +1189,8 @@ yysplitStack (yyGLRStack* yystack, int yyk) { if (yystack->yysplitPoint == NULL) { - assert (yyk == 0); + if (yyk != 0) + abort (); yystack->yysplitPoint = yystack->yytops.yystates[yyk]; } if (yystack->yytops.yysize >= yystack->yytops.yycapacity) @@ -1202,7 +1248,7 @@ yymergeOptionSets (yySemanticOption* yyy0, yySemanticOption* yyy1) yySemanticOption* yyz; for (yyz = yys0->yysemantics.yyfirstVal; yyz->yynext != NULL; yyz = yyz->yynext) - ; + continue; yyz->yynext = yys1->yysemantics.yyfirstVal; } } @@ -1234,23 +1280,24 @@ yypreference (yySemanticOption* y0, yySemanticOption* y1) static YYRESULTTAG yyresolveValue (yySemanticOption* yyoptionList, yyGLRStack* yystack, YYSTYPE* yyvalp, - YYLTYPE* yylocp YY_USER_FORMALS); + YYLTYPE* yylocp]b4_user_formals[); static YYRESULTTAG -yyresolveStates (yyGLRState* yys, int yyn, yyGLRStack* yystack YY_USER_FORMALS) +yyresolveStates (yyGLRState* yys, int yyn, yyGLRStack* yystack]b4_user_formals[) { YYRESULTTAG yyflag; if (0 < yyn) { - assert (yys->yypred != NULL); - yyflag = yyresolveStates (yys->yypred, yyn-1, yystack YY_USER_ARGS); + if (! yys->yypred) + abort (); + yyflag = yyresolveStates (yys->yypred, yyn-1, yystack]b4_user_args[); if (yyflag != yyok) return yyflag; if (! yys->yyresolved) { yyflag = yyresolveValue (yys->yysemantics.yyfirstVal, yystack, &yys->yysemantics.yysval, &yys->yyloc - YY_USER_ARGS); + ]b4_user_args[); if (yyflag != yyok) return yyflag; yys->yyresolved = yytrue; @@ -1261,38 +1308,28 @@ yyresolveStates (yyGLRState* yys, int yyn, yyGLRStack* yystack YY_USER_FORMALS) static YYRESULTTAG yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystack, - YYSTYPE* yyvalp, YYLTYPE* yylocp YY_USER_FORMALS) + YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[) { yyGLRStackItem yyrhsVals[YYMAXRHS]; int yynrhs, yyi; yyGLRState* yys; yynrhs = yyrhsLength (yyopt->yyrule); - YYCHK (yyresolveStates (yyopt->yystate, yynrhs, yystack YY_USER_ARGS)); + YYCHK (yyresolveStates (yyopt->yystate, yynrhs, yystack]b4_user_args[)); for (yyi = yynrhs-1, yys = yyopt->yystate; 0 <= yyi; yyi -= 1, yys = yys->yypred) { - assert (yys->yypred != NULL); + if (! yys->yypred) + abort (); yyrhsVals[yyi].yystate.yyresolved = yytrue; yyrhsVals[yyi].yystate.yysemantics.yysval = yys->yysemantics.yysval; yyrhsVals[yyi].yystate.yyloc = yys->yyloc; } return yyuserAction (yyopt->yyrule, yynrhs, yyrhsVals + (yynrhs-1), - yyvalp, yylocp, yystack YY_USER_ARGS); + yyvalp, yylocp, yystack]b4_user_args[); } #if YYDEBUG -static yyGLRState YYLEFTMOST_STATE = - { - 0, 0, -1, NULL, 0, { NULL }, - /* yyloc. */ - { -#if YYLTYPE_IS_TRIVIAL -]b4_location_if([ 0, 0, 0, 0])[ -#endif - } - }; - static void yyreportTree (yySemanticOption* yyx, int yyindent) { @@ -1300,11 +1337,15 @@ yyreportTree (yySemanticOption* yyx, int yyindent) int yyi; yyGLRState* yys; yyGLRState* yystates[YYMAXRHS]; + yyGLRState yyleftmost_state; for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred) yystates[yyi] = yys; if (yys == NULL) - yystates[0] = &YYLEFTMOST_STATE; + { + yyleftmost_state.yyposn = 0; + yystates[0] = &yyleftmost_state; + } else yystates[0] = yys; @@ -1336,7 +1377,7 @@ yyreportTree (yySemanticOption* yyx, int yyindent) static void yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1, - yyGLRStack* yystack) + yyGLRStack* yystack]b4_pure_formals[) { /* `Unused' warnings. */ (void) yyx0; @@ -1350,7 +1391,7 @@ yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1, yyreportTree (yyx1, 2); YYFPRINTF (stderr, "\n"); #endif - yyFail (yystack, "ambiguity detected"); + yyFail (yystack][]b4_pure_args[, "ambiguity detected"); } @@ -1358,7 +1399,7 @@ yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1, * actions, and return the result. */ static YYRESULTTAG yyresolveValue (yySemanticOption* yyoptionList, yyGLRStack* yystack, - YYSTYPE* yyvalp, YYLTYPE* yylocp YY_USER_FORMALS) + YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[) { yySemanticOption* yybest; yySemanticOption* yyp; @@ -1374,7 +1415,7 @@ yyresolveValue (yySemanticOption* yyoptionList, yyGLRStack* yystack, switch (yypreference (yybest, yyp)) { case 0: - yyreportAmbiguity (yybest, yyp, yystack); + yyreportAmbiguity (yybest, yyp, yystack]b4_pure_args[); break; case 1: yymerge = 1; @@ -1391,25 +1432,25 @@ yyresolveValue (yySemanticOption* yyoptionList, yyGLRStack* yystack, if (yymerge) { int yyprec = yydprec[yybest->yyrule]; - YYCHK (yyresolveAction (yybest, yystack, yyvalp, yylocp YY_USER_ARGS)); + YYCHK (yyresolveAction (yybest, yystack, yyvalp, yylocp]b4_user_args[)); for (yyp = yybest->yynext; yyp != NULL; yyp = yyp->yynext) { if (yyprec == yydprec[yyp->yyrule]) { YYSTYPE yyval1; YYLTYPE yydummy; - YYCHK (yyresolveAction (yyp, yystack, &yyval1, &yydummy YY_USER_ARGS)); + YYCHK (yyresolveAction (yyp, yystack, &yyval1, &yydummy]b4_user_args[)); *yyvalp = yyuserMerge (yymerger[yyp->yyrule], yyvalp, &yyval1); } } return yyok; } else - return yyresolveAction (yybest, yystack, yyvalp, yylocp YY_USER_ARGS); + return yyresolveAction (yybest, yystack, yyvalp, yylocp]b4_user_args[); } static YYRESULTTAG -yyresolveStack (yyGLRStack* yystack YY_USER_FORMALS) +yyresolveStack (yyGLRStack* yystack]b4_user_formals[) { if (yystack->yysplitPoint != NULL) { @@ -1419,9 +1460,9 @@ yyresolveStack (yyGLRStack* yystack YY_USER_FORMALS) for (yyn = 0, yys = yystack->yytops.yystates[0]; yys != yystack->yysplitPoint; yys = yys->yypred, yyn += 1) - ; + continue; YYCHK (yyresolveStates (yystack->yytops.yystates[0], yyn, yystack - YY_USER_ARGS)); + ]b4_user_args[)); } return yyok; } @@ -1459,7 +1500,7 @@ yycompressStack (yyGLRStack* yystack) static YYRESULTTAG yyprocessOneStack (yyGLRStack* yystack, int yyk, size_t yyposn, YYSTYPE* yylvalp, YYLTYPE* yyllocp - YY_USER_FORMALS) + ]b4_user_formals[) { int yyaction; const short* yyconflicts; @@ -1469,8 +1510,10 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, while (yystack->yytops.yystates[yyk] != NULL) { yyStateNum yystate = yystack->yytops.yystates[yyk]->yylrState; + YYDPRINTF ((stderr, "Stack %d Entering state %d\n", yyk, yystate)); - assert (yystate != YYFINAL); + if (yystate == YYFINAL) + abort (); if (yyisDefaultedState (yystate)) { yyrule = yydefaultAction (yystate); @@ -1480,7 +1523,7 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, yymarkStackDeleted (yystack, yyk); return yyok; } - YYCHK (yyglrReduce (yystack, yyk, yyrule, yyfalse YY_USER_ARGS)); + YYCHK (yyglrReduce (yystack, yyk, yyrule, yyfalse]b4_lpure_args[)); } else { @@ -1488,9 +1531,8 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; - *yytokenp = YYTRANSLATE(yychar); - YYDPRINTF ((stderr, "Next token is %s\n", - yytokenName (*yytokenp))); + *yytokenp = YYTRANSLATE (yychar); + YYDSYMPRINTF ("Next token is", *yytokenp, yylvalp, yyllocp); } yygetLRActions (yystate, *yytokenp, &yyaction, &yyconflicts); @@ -1500,9 +1542,9 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, YYDPRINTF ((stderr, "Splitting off stack %d from %d.\n", yynewStack, yyk)); YYCHK (yyglrReduce (yystack, yynewStack, - *yyconflicts, yyfalse YY_USER_ARGS)); + *yyconflicts, yyfalse]b4_lpure_args[)); YYCHK (yyprocessOneStack (yystack, yynewStack, yyposn, - yylvalp, yyllocp YY_USER_ARGS)); + yylvalp, yyllocp]b4_user_args[)); yyconflicts += 1; } @@ -1510,7 +1552,8 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, { YYDPRINTF ((stderr, "Shifting token %s on stack %d, ", yytokenName (*yytokenp), yyk)); - yyglrShift (yystack, yyk, yyaction, yyposn+1, *yylvalp, yyllocp); + yyglrShift (yystack, yyk, yyaction, yyposn+1, + *yylvalp, yyllocp]b4_user_args[); YYDPRINTF ((stderr, "which is now in state #%d\n", yystack->yytops.yystates[yyk]->yylrState)); break; @@ -1522,14 +1565,15 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, break; } else - YYCHK (yyglrReduce (yystack, yyk, -yyaction, yyfalse YY_USER_ARGS)); + YYCHK (yyglrReduce (yystack, yyk, -yyaction, yyfalse]b4_lpure_args[)); } } return yyok; } static void -yyreportParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) +yyreportSyntaxError (yyGLRStack* yystack, + YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[) { /* `Unused' warnings. */ (void) yylvalp; @@ -1550,7 +1594,7 @@ yyreportParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) yycount = 0; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ - yysize = sizeof ("parse error, unexpected ") + yysize = sizeof ("syntax error, unexpected ") + strlen (yytokenName (*yytokenp)); yyprefix = ", expecting "; for (yyx = yyn < 0 ? -yyn : 0; yyx < yytname_size && yycount <= 5; @@ -1559,7 +1603,7 @@ yyreportParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) yysize += strlen (yytokenName (yyx)) + strlen (yyprefix), yycount += 1, yyprefix = " or "; yymsg = yyp = (char*) malloc (yysize); - sprintf (yyp, "parse error, unexpected %s", + sprintf (yyp, "syntax error, unexpected %s", yytokenName (*yytokenp)); yyp += strlen (yyp); if (yycount < 5) @@ -1573,12 +1617,12 @@ yyreportParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) yyprefix = " or "; } } - yyerror (yymsg); + yyerror (]b4_lyyerror_args[yymsg); free (yymsg); } else #endif - yyerror ("parse error"); + yyerror (]b4_lyyerror_args["syntax error"); yynerrs += 1; } } @@ -1587,7 +1631,8 @@ yyreportParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) YYLVALP, and YYLLOCP point to the syntactic category, semantic value, and location of the lookahead. */ static void -yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) +yyrecoverSyntaxError (yyGLRStack* yystack, + YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[) { yySymbol* const yytokenp = yystack->yytokenp; size_t yyk; @@ -1601,25 +1646,43 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) while (yytrue) { if (*yytokenp == YYEOF) - yyFail (yystack, NULL); + { + /* Now pop stack until we find a state that shifts the + error token. */ + while (yystack->yytops.yystates[0] != NULL) + { + yyGLRState *yys = yystack->yytops.yystates[0]; + YYDSYMPRINTF ("Error: popping", + yystos[yys->yylrState], + &yys->yysemantics.yysval, &yys->yyloc); + yydestruct (yystos[yys->yylrState], + &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[); + yystack->yytops.yystates[0] = yys->yypred; + yystack->yynextFree -= 1; + yystack->yyspaceLeft += 1; + } + yyFail (yystack][]b4_lpure_args[, NULL); + } if (*yytokenp != YYEMPTY) - YYDPRINTF ((stderr, "Discarding token %s\n", - yytokenName (*yytokenp))); + { + YYDSYMPRINTF ("Error: discarding", *yytokenp, yylvalp, yyllocp); + yydestruct (*yytokenp, yylvalp]b4_location_if([, yyllocp])[); + } YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; *yytokenp = YYTRANSLATE (yychar); - YYDPRINTF ((stderr, "Next token is %s\n", yytokenName (*yytokenp))); + YYDSYMPRINTF ("Next token is", *yytokenp, yylvalp, yyllocp); yyj = yypact[yystack->yytops.yystates[0]->yylrState]; - if (yyj == YYPACT_NINF) + if (yyis_pact_ninf (yyj)) /* Something's not right; we shouldn't be here. */ - yyFail (yystack, NULL); + yyFail (yystack][]b4_lpure_args[, NULL); yyj += *yytokenp; if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != *yytokenp) { if (yydefact[yystack->yytops.yystates[0]->yylrState] != 0) return; } - else if (yytable[yyj] != 0 && yytable[yyj] != YYTABLE_NINF) + else if (yytable[yyj] != 0 && ! yyis_table_ninf (yytable[yyj])) return; } @@ -1628,7 +1691,7 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) if (yystack->yytops.yystates[yyk] != NULL) break; if (yyk >= yystack->yytops.yysize) - yyFail (yystack, NULL); + yyFail (yystack][]b4_lpure_args[, NULL); for (yyk += 1; yyk < yystack->yytops.yysize; yyk += 1) yymarkStackDeleted (yystack, yyk); yyremoveDeletes (yystack); @@ -1637,20 +1700,31 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) /* Now pop stack until we find a state that shifts the error token. */ while (yystack->yytops.yystates[0] != NULL) { - yyj = yypact[yystack->yytops.yystates[0]->yylrState] + YYTERROR; - if (yyj != YYPACT_NINF + YYTERROR && yyj >= 0 && yyj <= YYLAST && - yycheck[yyj] == YYTERROR && yyisShiftAction (yytable[yyj])) + yyGLRState *yys = yystack->yytops.yystates[0]; + yyj = yypact[yys->yylrState]; + if (! yyis_pact_ninf (yyj)) { - yyglrShift (yystack, 0, yytable[yyj], - yystack->yytops.yystates[0]->yyposn, *yylvalp, yyllocp); - break; + yyj += YYTERROR; + if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR + && yyisShiftAction (yytable[yyj])) + { + YYDPRINTF ((stderr, "Shifting error token, ")); + yyglrShift (yystack, 0, yytable[yyj], + yys->yyposn, *yylvalp, yyllocp]b4_user_args[); + break; + } } - yystack->yytops.yystates[0] = yystack->yytops.yystates[0]->yypred; + YYDSYMPRINTF ("Error: popping", + yystos[yys->yylrState], + &yys->yysemantics.yysval, &yys->yyloc); + yydestruct (yystos[yys->yylrState], + &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[); + yystack->yytops.yystates[0] = yys->yypred; yystack->yynextFree -= 1; yystack->yyspaceLeft += 1; } if (yystack->yytops.yystates[0] == NULL) - yyFail (yystack, NULL); + yyFail (yystack][]b4_lpure_args[, NULL); } #define YYCHK1(YYE) \ @@ -1698,7 +1772,7 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) if (setjmp (yystack.yyexception_buffer) != 0) goto yyDone; - yyglrShift (&yystack, 0, 0, 0, yyval_default, &yyloc_default); + yyglrShift (&yystack, 0, 0, 0, yyval_default, &yyloc_default]b4_user_args[); yytoken = YYEMPTY; yyposn = 0; @@ -1707,7 +1781,6 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) /* For efficiency, we have two loops, the first of which is specialized to deterministic operation (single stack, no potential ambiguity). */ - /* Standard mode */ while (yytrue) { @@ -1716,6 +1789,7 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) const short* yyconflicts; yyStateNum yystate = yystack.yytops.yystates[0]->yylrState; + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) goto yyDone; if (yyisDefaultedState (yystate)) @@ -1723,10 +1797,10 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) yyrule = yydefaultAction (yystate); if (yyrule == 0) { - yyreportParseError (&yystack, yylvalp, yyllocp); + yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); goto yyuser_error; } - YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue YY_USER_ARGS)); + YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue]b4_lpure_args[)); } else { @@ -1735,8 +1809,7 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; yytoken = YYTRANSLATE (yychar); - YYDPRINTF ((stderr, "Next token is %s\n", - yytokenName (yytoken))); + YYDSYMPRINTF ("Next token is", yytoken, yylvalp, yyllocp); } yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts); if (*yyconflicts != 0) @@ -1748,19 +1821,18 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) if (yytoken != YYEOF) yytoken = YYEMPTY; yyposn += 1; - yyglrShift (&yystack, 0, yyaction, yyposn, yylval, yyllocp); + yyglrShift (&yystack, 0, yyaction, yyposn, + yylval, yyllocp]b4_user_args[); if (0 < yystack.yyerrState) yystack.yyerrState -= 1; - YYDPRINTF ((stderr, "Entering state %d\n", - yystack.yytops.yystates[0]->yylrState)); } else if (yyisErrorAction (yyaction)) { - yyreportParseError (&yystack, yylvalp, yyllocp); + yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); goto yyuser_error; } else - YYCHK1 (yyglrReduce (&yystack, 0, -yyaction, yytrue YY_USER_ARGS)); + YYCHK1 (yyglrReduce (&yystack, 0, -yyaction, yytrue]b4_lpure_args[)); } } @@ -1770,7 +1842,7 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) int yyn = yystack.yytops.yysize; for (yys = 0; yys < yyn; yys += 1) YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn, - yylvalp, yyllocp YY_USER_ARGS)); + yylvalp, yyllocp]b4_user_args[)); yytoken = YYEMPTY; yyposn += 1; yyremoveDeletes (&yystack); @@ -1778,15 +1850,15 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) { yyundeleteLastStack (&yystack); if (yystack.yytops.yysize == 0) - yyFail (&yystack, "parse error"); - YYCHK1 (yyresolveStack (&yystack YY_USER_ARGS)); + yyFail (&yystack][]b4_lpure_args[, "syntax error"); + YYCHK1 (yyresolveStack (&yystack]b4_user_args[)); YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); - yyreportParseError (&yystack, yylvalp, yyllocp); + yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); goto yyuser_error; } else if (yystack.yytops.yysize == 1) { - YYCHK1 (yyresolveStack (&yystack YY_USER_ARGS)); + YYCHK1 (yyresolveStack (&yystack]b4_user_args[)); YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); yycompressStack (&yystack); break; @@ -1794,7 +1866,7 @@ yyrecoverParseError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp) } continue; yyuser_error: - yyrecoverParseError (&yystack, yylvalp, yyllocp); + yyrecoverSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); yyposn = yystack.yytops.yystates[0]->yyposn; } yyDone: @@ -1816,7 +1888,7 @@ yy_yypstack (yyGLRState* yys) yy_yypstack (yys->yypred); fprintf (stderr, " -> "); } - fprintf (stderr, "%d@%lu", yys->yylrState, (unsigned long) yys->yyposn); + fprintf (stderr, "%d@@%lu", yys->yylrState, (unsigned long) yys->yyposn); } static void @@ -1876,40 +1948,39 @@ yypdumpstack (yyGLRStack* yystack) b4_epilogue m4_if(b4_defines_flag, 0, [], -[#output "b4_output_header_name" +[@output @output_header_name@ b4_copyright([Skeleton parser for GLR parsing with Bison], [2002]) -#ifndef b4_header_guard -# define b4_header_guard b4_token_defines(b4_tokens) -#ifndef YYSTYPE +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) m4_ifdef([b4_stype], -[#line b4_stype_line "b4_filename" -typedef union b4_stype yystype; -/* Line __line__ of __file__. */ -#line __oline__ "__ofile__"], -[typedef int yystype;]) -# define YYSTYPE yystype +[b4_syncline([b4_stype_line], [b4_filename]) +typedef union m4_bregexp(b4_stype, [^{], [YYSTYPE ])b4_stype YYSTYPE; +/* Line __line__ of glr.c. */ +b4_syncline([@oline@], [@ofile@])], +[typedef int YYSTYPE;]) +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 #endif b4_pure_if([], [extern YYSTYPE b4_prefix[]lval;]) b4_location_if( -[#ifndef YYLTYPE -typedef struct yyltype +[#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED) +typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; -} yyltype; -# define YYLTYPE yyltype +} YYLTYPE; +# define YYLTYPE_IS_DECLARED 1 +# define YYLTYPE_IS_TRIVIAL 1 #endif m4_if(b4_pure, [0], [extern YYLTYPE b4_prefix[]lloc;]) ]) -#endif /* not b4_header_guard */ ])