X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/9c1e26bd3b5ec47c159fd7eb5db7353380d1b4ac..f6abc26e38ad488fa7ce59e22efcc2130bea310f:/data/glr.c diff --git a/data/glr.c b/data/glr.c index 0bb05835..c10bb2d2 100644 --- a/data/glr.c +++ b/data/glr.c @@ -28,9 +28,6 @@ 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]) - ## ------------------------ ## @@ -146,7 +143,6 @@ b4_copyright([Skeleton parser for GLR parsing with Bison], [2002]) [ /* This is the parser code for GLR (Generalized LR) parser. */ -#include #include #include #include @@ -184,31 +180,31 @@ b4_pre_prologue[ # define YYERROR_VERBOSE ]b4_error_verbose[ #endif -#ifndef YYSTYPE +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) ]m4_ifdef([b4_stype], [b4_syncline([b4_stype_line], [b4_filename]) -typedef union b4_stype yystype; -/* Line __line__ of __file__. */ +typedef union m4_bregexp(b4_stype, [^{], [YYSTYPE ])b4_stype YYSTYPE; +/* Line __line__ of glr.c. */ b4_syncline([@oline@], [@ofile@])], -[typedef int yystype;])[ -# define YYSTYPE yystype +[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, + 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. */ @@ -218,7 +214,7 @@ static YYLTYPE yyloc_default; /* Copy the second part of user declarations. */ ]b4_post_prologue[ -]/* Line __line__ of __file__. */ +]/* Line __line__ of glr.c. */ b4_syncline([@oline@], [@ofile@]) [ #if ! defined (__cplusplus) @@ -360,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[] = { @@ -481,9 +477,9 @@ int yydebug; #else /* !YYDEBUG */ /* Avoid empty `if' bodies. */ -# define YYDPRINTF(Args) {} -# define YYDSYMPRINT(Args) {} -# define YYDSYMPRINTF(Title, Token, Value, Location) {} +# define YYDPRINTF(Args) +# define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) #endif /* !YYDEBUG */ @@ -514,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 @@ -594,12 +591,12 @@ static void yyfreeGLRStack (yyGLRStack* yystack); static void 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 (]b4_yyerror_args[yymsg); } @@ -672,7 +669,7 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, # undef YYBACKUP # undef yyclearin # undef YYRECOVERING -/* Line __line__ of __file__. */ +/* Line __line__ of glr.c. */ b4_syncline([@oline@], [@ofile@]) } @@ -730,10 +727,10 @@ yydefaultAction (yyStateNum yystate) return yydefact[yystate]; } -#define yyis_table_ninf(yyindex) \ +#define yyis_table_ninf(yytable_value) \ ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1, 0, - ((yyindex) == YYTABLE_NINF))[ + ((yytable_value) == YYTABLE_NINF))[ /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN. * Result R means @@ -753,7 +750,7 @@ yygetLRActions (yyStateNum yystate, int yytoken, *yyaction = -yydefact[yystate]; *yyconflicts = yyconfl; } - else if (! yyis_table_ninf (yyindex)) + else if (! yyis_table_ninf (yytable[yyindex])) { *yyaction = yytable[yyindex]; *yyconflicts = yyconfl + yyconflp[yyindex]; @@ -790,14 +787,6 @@ 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]b4_pure_formals[) @@ -866,8 +855,7 @@ yyexpandGLRStack (yyGLRStack* yystack]b4_pure_formals[) size_t yyn; yysize = yystack->yynextFree - yystack->yyitems; if (YYMAXDEPTH <= yysize) - yyFail (yystack][]b4_pure_args[, - "parsing stack overflow (%d items)", yysize); + yyFail (yystack][]b4_pure_args[, "parser stack overflow"); yynewSize = 2*yysize; if (YYMAXDEPTH < yynewSize) yynewSize = YYMAXDEPTH; @@ -914,8 +902,7 @@ yyexpandGLRStack (yyGLRStack* yystack]b4_pure_formals[) #else - yyFail (yystack][]b4_lpure_args[, - "parsing stack overflow (%d items)", yysize); + yyFail (yystack][]b4_lpure_args[, "parser stack overflow"); #endif } @@ -969,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; @@ -1044,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; @@ -1069,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; @@ -1108,8 +1101,9 @@ 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])); @@ -1145,8 +1139,6 @@ yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule, yyLRgotoState (yystack->yytops.yystates[yyk]->yylrState, yylhsNonterm (yyrule)), yyposn, yysval, &yyloc]b4_user_args[); - YYDPRINTF ((stderr, "Stack %d entering state %d\n", - yyk, yystack->yytops.yystates[yyk]->yylrState)); } else { @@ -1159,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)); @@ -1196,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) @@ -1254,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; } } @@ -1294,7 +1288,8 @@ yyresolveStates (yyGLRState* yys, int yyn, yyGLRStack* yystack]b4_user_formals[) YYRESULTTAG yyflag; if (0 < yyn) { - assert (yys->yypred != NULL); + if (! yys->yypred) + abort (); yyflag = yyresolveStates (yys->yypred, yyn-1, yystack]b4_user_args[); if (yyflag != yyok) return yyflag; @@ -1324,7 +1319,8 @@ yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystack, 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; @@ -1464,7 +1460,7 @@ yyresolveStack (yyGLRStack* yystack]b4_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 ]b4_user_args[)); } @@ -1514,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); @@ -1574,8 +1572,8 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, } static void -yyreportParseError (yyGLRStack* yystack, - YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[) +yyreportSyntaxError (yyGLRStack* yystack, + YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[) { /* `Unused' warnings. */ (void) yylvalp; @@ -1596,7 +1594,7 @@ yyreportParseError (yyGLRStack* yystack, 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; @@ -1605,7 +1603,8 @@ yyreportParseError (yyGLRStack* yystack, yysize += strlen (yytokenName (yyx)) + strlen (yyprefix), yycount += 1, yyprefix = " or "; yymsg = yyp = (char*) malloc (yysize); - sprintf (yyp, "parse error, unexpected %s", yytokenName (*yytokenp)); + sprintf (yyp, "syntax error, unexpected %s", + yytokenName (*yytokenp)); yyp += strlen (yyp); if (yycount < 5) { @@ -1623,7 +1622,7 @@ yyreportParseError (yyGLRStack* yystack, } else #endif - yyerror (]b4_lyyerror_args["parse error"); + yyerror (]b4_lyyerror_args["syntax error"); yynerrs += 1; } } @@ -1632,8 +1631,8 @@ yyreportParseError (yyGLRStack* yystack, YYLVALP, and YYLLOCP point to the syntactic category, semantic value, and location of the lookahead. */ static void -yyrecoverParseError (yyGLRStack* yystack, - YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[) +yyrecoverSyntaxError (yyGLRStack* yystack, + YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[) { yySymbol* const yytokenp = yystack->yytokenp; size_t yyk; @@ -1712,8 +1711,6 @@ yyrecoverParseError (yyGLRStack* yystack, YYDPRINTF ((stderr, "Shifting error token, ")); yyglrShift (yystack, 0, yytable[yyj], yys->yyposn, *yylvalp, yyllocp]b4_user_args[); - YYDPRINTF ((stderr, "Entering state %d\n", - yystack->yytops.yystates[0]->yylrState)); break; } } @@ -1784,7 +1781,6 @@ yyrecoverParseError (yyGLRStack* yystack, /* For efficiency, we have two loops, the first of which is specialized to deterministic operation (single stack, no potential ambiguity). */ - /* Standard mode */ while (yytrue) { @@ -1793,6 +1789,7 @@ yyrecoverParseError (yyGLRStack* yystack, 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)) @@ -1800,7 +1797,7 @@ yyrecoverParseError (yyGLRStack* yystack, yyrule = yydefaultAction (yystate); if (yyrule == 0) { - yyreportParseError (&yystack, yylvalp, yyllocp]b4_user_args[); + yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); goto yyuser_error; } YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue]b4_lpure_args[)); @@ -1828,12 +1825,10 @@ yyrecoverParseError (yyGLRStack* yystack, 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]b4_user_args[); + yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); goto yyuser_error; } else @@ -1855,10 +1850,10 @@ yyrecoverParseError (yyGLRStack* yystack, { yyundeleteLastStack (&yystack); if (yystack.yytops.yysize == 0) - yyFail (&yystack][]b4_lpure_args[, "parse error"); + yyFail (&yystack][]b4_lpure_args[, "syntax error"); YYCHK1 (yyresolveStack (&yystack]b4_user_args[)); YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); - yyreportParseError (&yystack, yylvalp, yyllocp]b4_user_args[); + yyreportSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); goto yyuser_error; } else if (yystack.yytops.yysize == 1) @@ -1871,7 +1866,7 @@ yyrecoverParseError (yyGLRStack* yystack, } continue; yyuser_error: - yyrecoverParseError (&yystack, yylvalp, yyllocp]b4_user_args[); + yyrecoverSyntaxError (&yystack, yylvalp, yyllocp]b4_user_args[); yyposn = yystack.yytops.yystates[0]->yyposn; } yyDone: @@ -1958,14 +1953,14 @@ b4_copyright([Skeleton parser for GLR parsing with Bison], [2002]) b4_token_defines(b4_tokens) -#ifndef YYSTYPE +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) m4_ifdef([b4_stype], [b4_syncline([b4_stype_line], [b4_filename]) -typedef union b4_stype yystype; -/* Line __line__ of __file__. */ +typedef union m4_bregexp(b4_stype, [^{], [YYSTYPE ])b4_stype YYSTYPE; +/* Line __line__ of glr.c. */ b4_syncline([@oline@], [@ofile@])], -[typedef int yystype;]) -# define YYSTYPE yystype +[typedef int YYSTYPE;]) +# define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif @@ -1973,15 +1968,16 @@ 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],