X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/9138c575d80fea7f2ca5106b55932e3f25d7be92..62a9592d3d3149aae90533a685f9a8a35cd630f5:/data/glr.c diff --git a/data/glr.c b/data/glr.c index d01122a1..836df503 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,28 +159,31 @@ 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 +[#ifndef YYSTYPE ]m4_ifdef([b4_stype], -[typedef union m4_bregexp(b4_stype, [^{], [YYSTYPE ]) -b4_stype -/* Line __line__ of glr.c. */ -b4_syncline([@oline@], [@ofile@]) - YYSTYPE;], -[typedef int YYSTYPE;])[ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 +[[typedef union ]b4_union_name[ +]b4_user_stype[ + YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1]], +[m4_if(b4_tag_seen_flag, 0, +[[typedef int YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1]])])[ #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED @@ -198,10 +201,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 +236,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 #include #include @@ -906,7 +910,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 +930,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; } @@ -1836,8 +1838,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 +2180,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 +2304,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 +2523,8 @@ b4_syncline([@oline@], [@ofile@])])dnl yyfreeGLRStack (&yystack); } - return yyresult; + /* Make sure YYID is used. */ + return YYID (yyresult); } /* DEBUGGING ONLY */