X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/d6645148013be7c2abb641fcebe68d48af1a3739..b3d9b5ba1828b78a8a1e6ee3b04030247a892cb4:/data/glr.c diff --git a/data/glr.c b/data/glr.c index 0a4b8999..8da20487 100644 --- a/data/glr.c +++ b/data/glr.c @@ -67,7 +67,7 @@ m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])]) # b4_lyyerror_args # ---------------- -# Same as above, but on the look-ahead, hence &yylloc instead of yylocp. +# Same as above, but on the lookahead, hence &yylloc instead of yylocp. m4_define([b4_lyyerror_args], [b4_pure_if([b4_locations_if([&yylloc, ])])dnl m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])]) @@ -82,7 +82,7 @@ m4_define([b4_pure_args], # b4_lpure_args # ------------- -# Same as above, but on the look-ahead, hence &yylloc instead of yylocp. +# Same as above, but on the lookahead, hence &yylloc instead of yylocp. m4_define([b4_lpure_args], [b4_pure_if([b4_locations_if([, &yylloc])])[]b4_user_args]) @@ -159,24 +159,26 @@ m4_if(b4_prefix, [yy], [], #define yychar b4_prefix[]char #define yydebug b4_prefix[]debug #define yynerrs b4_prefix[]nerrs -#define yylloc b4_prefix[]lloc]) +#define yylloc b4_prefix[]lloc])[ + +/* Copy the first part of user declarations. */ +]b4_pre_prologue dnl # b4_shared_declarations dnl # ---------------------- dnl # Declaration that might either go into the header (if --defines) dnl # or open coded in the parser body. m4_define([b4_shared_declarations], -[b4_token_enums(b4_tokens)[ +[m4_ifdef([b4_start_header], +[[/* Copy the %start-header blocks. */ +]b4_start_header])[]dnl -/* Copy the first part of user declarations. */ -]b4_pre_prologue[ +b4_token_enums(b4_tokens) -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +[#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED ]m4_ifdef([b4_stype], -[typedef union m4_bregexp(b4_stype, [^{], [YYSTYPE ]) -b4_stype -/* Line __line__ of glr.c. */ -b4_syncline([@oline@], [@ofile@]) +[typedef union b4_union_name +b4_user_stype YYSTYPE;], [typedef int YYSTYPE;])[ # define YYSTYPE_IS_DECLARED 1 @@ -198,10 +200,14 @@ typedef struct YYLTYPE # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif -]]) + +]m4_ifdef([b4_end_header], +[[/* Copy the %end-header blocks. */ +]b4_end_header])[]dnl +]) b4_defines_if([#include @output_header_name@], - [b4_shared_declarations])[ + [b4_shared_declarations])[ /* Enabling traces. */ #ifndef YYDEBUG @@ -229,11 +235,8 @@ b4_defines_if([#include @output_header_name@], static YYSTYPE yyval_default; /* Copy the second part of user declarations. */ -]b4_post_prologue[ +]b4_user_post_prologue[ -]/* Line __line__ of glr.c. */ -b4_syncline([@oline@], [@ofile@]) -[ #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -906,7 +909,7 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, # undef YYERROR # define YYERROR return yyerrok, yyerr # undef YYRECOVERING -# define YYRECOVERING (yystackp->yyerrState != 0) +# define YYRECOVERING() (yystackp->yyerrState != 0) # undef yyclearin # define yyclearin (yychar = YYEMPTY) # undef YYFILL @@ -926,9 +929,7 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, ]])[ switch (yyn) { - ]b4_actions -/* Line __line__ of glr.c. */ -b4_syncline([@oline@], [@ofile@])[ + ]b4_user_actions[ default: break; } @@ -1741,7 +1742,7 @@ yyreportTree (yySemanticOption* yyx, int yyindent) int yynrhs = yyrhsLength (yyx->yyrule); int yyi; yyGLRState* yys; - yyGLRState* yystates[YYMAXRHS]; + yyGLRState* yystates[1 + YYMAXRHS]; yyGLRState yyleftmost_state; for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred) @@ -1757,11 +1758,11 @@ yyreportTree (yySemanticOption* yyx, int yyindent) if (yyx->yystate->yyposn < yys->yyposn + 1) YYFPRINTF (stderr, "%*s%s -> <Rule %d, empty>\n", yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)), - yyx->yyrule); + yyx->yyrule - 1); else YYFPRINTF (stderr, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n", yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)), - yyx->yyrule, (unsigned long int) (yys->yyposn + 1), + yyx->yyrule - 1, (unsigned long int) (yys->yyposn + 1), (unsigned long int) yyx->yystate->yyposn); for (yyi = 1; yyi <= yynrhs; yyi += 1) { @@ -1836,8 +1837,14 @@ yyresolveLocations (yyGLRState* yys1, int yyn1, } else { + /* Both yyresolveAction and yyresolveLocations traverse the GSS + in reverse rightmost order. It is only necessary to invoke + yyresolveLocations on a subforest for which yyresolveAction + would have been invoked next had an ambiguity not been + detected. Thus the location of the previous state (but not + necessarily the previous state itself) is guaranteed to be + resolved already. */ yyGLRState *yyprevious = yyoption->yystate; - YYASSERT (yyprevious->yyresolved); yyrhsloc[0].yystate.yyloc = yyprevious->yyloc; } yychar_current = yychar; @@ -2172,7 +2179,7 @@ yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[) /* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP, yylval, and yylloc are the syntactic category, semantic value, and location - of the look-ahead. */ + of the lookahead. */ /*ARGSUSED*/ static void yyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[) { @@ -2296,19 +2303,17 @@ yyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[) yylval = yyval_default; ]b4_locations_if([ #if YYLTYPE_IS_TRIVIAL - yylloc.first_line = yylloc.last_line = 1; - yylloc.first_column = yylloc.last_column = 0; + yylloc.first_line = yylloc.last_line = ]b4_location_initial_line[; + yylloc.first_column = yylloc.last_column = ]b4_location_initial_column[; #endif ]) m4_ifdef([b4_initial_action], [ m4_pushdef([b4_at_dollar], [yylloc])dnl m4_pushdef([b4_dollar_dollar], [yylval])dnl /* User initialization code. */ - b4_initial_action + b4_user_initial_action m4_popdef([b4_dollar_dollar])dnl -m4_popdef([b4_at_dollar])dnl -/* Line __line__ of glr.c. */ -b4_syncline([@oline@], [@ofile@])])dnl +m4_popdef([b4_at_dollar])])dnl [ if (! yyinitGLRStack (yystackp, YYINITDEPTH)) goto yyexhaustedlab; @@ -2517,7 +2522,8 @@ b4_syncline([@oline@], [@ofile@])])dnl yyfreeGLRStack (&yystack); } - return yyresult; + /* Make sure YYID is used. */ + return YYID (yyresult); } /* DEBUGGING ONLY */ @@ -2578,7 +2584,7 @@ yypdumpstack (yyGLRStack* yystackp) else { fprintf (stderr, "Option. rule: %d, state: %ld, next: %ld", - yyp->yyoption.yyrule, + yyp->yyoption.yyrule - 1, (long int) YYINDEX (yyp->yyoption.yystate), (long int) YYINDEX (yyp->yyoption.yynext)); }