X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/08fc98e54496f7db44710f9c914664385119f9d1..f85a5e6f4b9867cf91ec6c93bdbbb8a3b4ba8e11:/data/glr.c diff --git a/data/glr.c b/data/glr.c index b821af17..0e569841 100644 --- a/data/glr.c +++ b/data/glr.c @@ -1,7 +1,7 @@ m4_divert(-1) -*- C -*- # GLR skeleton for Bison -# Copyright (C) 2002, 2003 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -60,7 +60,7 @@ 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. +# Same as above, but on the look-ahead, 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), ])]) @@ -82,14 +82,14 @@ m4_define([b4_pure_formals], # b4_lpure_args # ------------- -# Same as above, but on the lookahead, hence yyllocp instead of yylocp. +# Same as above, but on the look-ahead, 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. +# Same as above, but on the look-ahead, hence yyllocp instead of yylocp. m4_define([b4_lpure_formals], [b4_pure_if([b4_location_if([YYLTYPE *yyllocp])])[]b4_user_formals]) @@ -111,7 +111,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@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3])]) +[((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3])]) @@ -131,13 +131,13 @@ m4_define([b4_lhs_location], # Expansion of @NUM, where the current rule has RULE-LENGTH symbols # on RHS. m4_define([b4_rhs_location], -[yyvsp@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yyloc]) +[((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yyloc]) # We do want M4 expansion after # for CPP macros. m4_changecom() m4_divert(0)dnl @output @output_parser_name@ -b4_copyright([Skeleton parser for GLR parsing with Bison], [2002, 2003]) +b4_copyright([Skeleton parser for GLR parsing with Bison], [2002, 2003, 2004]) [ /* This is the parser code for GLR (Generalized LR) parser. */ @@ -158,7 +158,7 @@ m4_if(b4_prefix[], [yy], [], #define yychar b4_prefix[]char #define yydebug b4_prefix[]debug #define yynerrs b4_prefix[]nerrs -b4_location_if([#define yylloc b4_prefix[]lloc])]) +#define yylloc b4_prefix[]lloc]) b4_token_defines(b4_tokens) @@ -219,6 +219,16 @@ static YYLTYPE yyloc_default; ]/* Line __line__ of glr.c. */ b4_syncline([@oline@], [@ofile@]) [ +#ifndef YYFREE +# define YYFREE free +#endif +#ifndef YYMALLOC +# define YYMALLOC malloc +#endif +#ifndef YYREALLOC +# define YYREALLOC realloc +#endif + #ifdef __cplusplus typedef bool yybool; #else @@ -239,6 +249,10 @@ b4_syncline([@oline@], [@ofile@]) # endif #endif +#ifndef YYASSERT +# define YYASSERT(condition) ((void) ((condition) || (abort (), 0))) +#endif + #ifndef ATTRIBUTE_UNUSED # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) #endif @@ -268,7 +282,7 @@ b4_syncline([@oline@], [@ofile@]) #define YYTRANSLATE(YYX) \ ((YYX <= 0) ? YYEOF : \ - (unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const ]b4_int_type_for([b4_translate])[ yytranslate[] = @@ -380,9 +394,9 @@ static const ]b4_int_type_for([b4_conflict_list_heads])[ yyconflp[] = /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by 0, pointed into by YYCONFLP. */ ]dnl Do not use b4_int_type_for here, since there are places where -dnl pointers onto yyconfl are taken, which type is "short *". +dnl pointers onto yyconfl are taken, which type is "short int *". dnl We probably ought to introduce a type for confl. -[static const short yyconfl[] = +[static const short int yyconfl[] = { ]b4_conflicting_rules[ }; @@ -406,25 +420,37 @@ static const ]b4_int_type_for([b4_stos])[ yystos[] = /* Error token number */ #define YYTERROR 1 -/* YYLLOC_DEFAULT -- Compute the default location (before the actions - are run). */ +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. */ ]b4_location_if([[ #define YYRHSLOC(yyRhs,YYK) ((yyRhs)[YYK].yystate.yyloc) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \ - (yyCurrent).first_line = YYRHSLOC(yyRhs,1).first_line; \ - (yyCurrent).first_column = YYRHSLOC(yyRhs,1).first_column; \ - (yyCurrent).last_line = YYRHSLOC(yyRhs,YYN).last_line; \ - (yyCurrent).last_column = YYRHSLOC(yyRhs,YYN).last_column; + ((yyCurrent).first_line = YYRHSLOC(yyRhs, 1).first_line, \ + (yyCurrent).first_column = YYRHSLOC(yyRhs, 1).first_column, \ + (yyCurrent).last_line = YYRHSLOC(yyRhs, YYN).last_line, \ + (yyCurrent).last_column = YYRHSLOC(yyRhs, YYN).last_column) + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) #endif ]],[ #ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) +# define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) ((void) 0) #endif ])[ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif + /* YYLEX -- calling `yylex' with the right arguments. */ #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[ @@ -465,19 +491,13 @@ do { \ ]b4_yysymprint_generate([b4_c_ansi_function_def])[ -# define YYDSYMPRINT(Args) \ -do { \ - if (yydebug) \ - yysymprint Args; \ -} while (0) - -# define YYDSYMPRINTF(Title, Token, Value, Location) \ +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yysymprint (stderr, \ - Token, Value]b4_location_if([, Location])[); \ + Type, Value]b4_location_if([, Location])[); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) @@ -488,10 +508,8 @@ int yydebug; #else /* !YYDEBUG */ - /* Avoid empty `if' bodies. */ # define YYDPRINTF(Args) -# define YYDSYMPRINT(Args) -# define YYDSYMPRINTF(Title, Token, Value, Location) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) #endif /* !YYDEBUG */ @@ -538,10 +556,10 @@ typedef int yyStateNum; typedef int yyRuleNum; /** Grammar symbol */ -typedef short yySymbol; +typedef short int yySymbol; /** Item references, as in LALR(1) machine */ -typedef short yyItemNum; +typedef short int yyItemNum; typedef struct yyGLRState yyGLRState; typedef struct yySemanticOption yySemanticOption; @@ -622,6 +640,9 @@ yyFail (yyGLRStack* yystack]b4_pure_formals[, const char* yyformat, ...) static inline const char* yytokenName (yySymbol yytoken) { + if (yytoken == YYEMPTY) + return ""; + return yytname[yytoken]; } #endif @@ -639,8 +660,7 @@ yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1) s = yyvsp[yylow0].yystate.yypred; for (i = yylow0-1; i >= yylow1; i -= 1) { - if (! s->yyresolved) - abort (); + YYASSERT (s->yyresolved); yyvsp[i].yystate.yyresolved = yytrue; yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval; yyvsp[i].yystate.yyloc = s->yyloc; @@ -700,7 +720,7 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, if (yyrhslen == 0) { *yyvalp = yyval_default; - *yylocp = yyloc_default; + *yylocp = yyvsp[0].yystate.yyloc; } else { @@ -727,10 +747,9 @@ b4_syncline([@oline@], [@ofile@]) } -static YYSTYPE +static void yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1) { - YYSTYPE yyval = *yy0; /* `Use' the arguments. */ (void) yy0; (void) yy1; @@ -739,7 +758,6 @@ yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1) { b4_mergers } - return yyval; } [ /* Bison grammar-table manipulation. */ @@ -795,7 +813,7 @@ yydefaultAction (yyStateNum yystate) */ static inline void yygetLRActions (yyStateNum yystate, int yytoken, - int* yyaction, const short** yyconflicts) + int* yyaction, const short int** yyconflicts) { int yyindex = yypact[yystate] + yytoken; if (yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken) @@ -865,13 +883,13 @@ yyinitStateSet (yyGLRStateSet* yyset) { yyset->yysize = 1; yyset->yycapacity = 16; - yyset->yystates = (yyGLRState**) malloc (16 * sizeof (yyset->yystates[0])); + yyset->yystates = (yyGLRState**) YYMALLOC (16 * sizeof yyset->yystates[0]); yyset->yystates[0] = NULL; } static void yyfreeStateSet (yyGLRStateSet* yyset) { - free (yyset->yystates); + YYFREE (yyset->yystates); } /** Initialize STACK to a single empty stack, with total maximum @@ -884,7 +902,7 @@ yyinitGLRStack (yyGLRStack* yystack, size_t yysize) yynerrs = 0; yystack->yyspaceLeft = yysize; yystack->yynextFree = yystack->yyitems = - (yyGLRStackItem*) malloc (yysize * sizeof (yystack->yynextFree[0])); + (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystack->yynextFree[0]); yystack->yysplitPoint = NULL; yystack->yylastDeleted = NULL; yyinitStateSet (&yystack->yytops); @@ -948,7 +966,7 @@ yyexpandGLRStack (yyGLRStack* yystack]b4_pure_formals[) yystack->yytops.yystates[yyn] = YYRELOC (yystack->yyitems, yynewStack.yyitems, yystack->yytops.yystates[yyn], yystate); - free (yystack->yyitems); + YYFREE (yystack->yyitems); yystack->yyitems = yynewStack.yyitems; yystack->yynextFree = yynewStack.yynextFree + yysize; yystack->yyspaceLeft = yynewStack.yyspaceLeft - yysize; @@ -962,7 +980,7 @@ yyexpandGLRStack (yyGLRStack* yystack]b4_pure_formals[) static void yyfreeGLRStack (yyGLRStack* yystack) { - free (yystack->yyitems); + YYFREE (yystack->yyitems); yyfreeStateSet (&yystack->yytops); } @@ -1089,8 +1107,7 @@ yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule, { /* Standard special case: single stack. */ yyGLRStackItem* rhs = (yyGLRStackItem*) yystack->yytops.yystates[yyk]; - if (yyk != 0) - abort (); + YYASSERT (yyk == 0); yystack->yynextFree -= yynrhs; yystack->yyspaceLeft += yynrhs; yystack->yytops.yystates[0] = & yystack->yynextFree[-1].yystate; @@ -1107,8 +1124,7 @@ yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule, for (yyi = 0; yyi < yynrhs; yyi += 1) { yys = yys->yypred; - if (yys == NULL) - abort (); + YYASSERT (yys); } yyupdateSplit (yystack, yys); yystack->yytops.yystates[yyk] = yys; @@ -1184,14 +1200,12 @@ yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule, 0 < yyn; yyn -= 1) { yys = yys->yypred; - if (yys == NULL) - abort (); + YYASSERT (yys); } yyupdateSplit (yystack, yys); yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule)); YYDPRINTF ((stderr, - "Reduced stack %lu by rule #%d; action deferred. " - "Now in state %d.\n", + "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n", (unsigned long int) yyk, yyrule - 1, yynewLRState)); for (yyi = 0; yyi < yystack->yytops.yysize; yyi += 1) if (yyi != yyk && yystack->yytops.yystates[yyi] != NULL) @@ -1223,17 +1237,16 @@ yysplitStack (yyGLRStack* yystack, int yyk) { if (yystack->yysplitPoint == NULL) { - if (yyk != 0) - abort (); + YYASSERT (yyk == 0); yystack->yysplitPoint = yystack->yytops.yystates[yyk]; } if (yystack->yytops.yysize >= yystack->yytops.yycapacity) { yystack->yytops.yycapacity *= 2; yystack->yytops.yystates = - (yyGLRState**) realloc (yystack->yytops.yystates, - yystack->yytops.yycapacity - * sizeof (yyGLRState*)); + (yyGLRState**) YYREALLOC (yystack->yytops.yystates, + (yystack->yytops.yycapacity + * sizeof yystack->yytops.yystates[0])); } yystack->yytops.yystates[yystack->yytops.yysize] = yystack->yytops.yystates[yyk]; @@ -1322,8 +1335,7 @@ yyresolveStates (yyGLRState* yys, int yyn, yyGLRStack* yystack]b4_user_formals[) YYRESULTTAG yyflag; if (0 < yyn) { - if (yys->yypred == NULL) - abort (); + YYASSERT (yys->yypred); yyflag = yyresolveStates (yys->yypred, yyn-1, yystack]b4_user_args[); if (yyflag != yyok) return yyflag; @@ -1468,7 +1480,7 @@ yyresolveValue (yySemanticOption* yyoptionList, yyGLRStack* yystack, YYSTYPE yyval1; YYLTYPE yydummy; YYCHK (yyresolveAction (yyp, yystack, &yyval1, &yydummy]b4_user_args[)); - *yyvalp = yyuserMerge (yymerger[yyp->yyrule], yyvalp, &yyval1); + yyuserMerge (yymerger[yyp->yyrule], yyvalp, &yyval1); } } return yyok; @@ -1531,7 +1543,7 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, ]b4_user_formals[) { int yyaction; - const short* yyconflicts; + const short int* yyconflicts; yyRuleNum yyrule; yySymbol* const yytokenp = yystack->yytokenp; @@ -1540,8 +1552,8 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, yyStateNum yystate = yystack->yytops.yystates[yyk]->yylrState; YYDPRINTF ((stderr, "Stack %d Entering state %d\n", yyk, yystate)); - if (yystate == YYFINAL) - abort (); + YYASSERT (yystate != YYFINAL); + if (yyisDefaultedState (yystate)) { yyrule = yydefaultAction (yystate); @@ -1560,7 +1572,7 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; *yytokenp = YYTRANSLATE (yychar); - YYDSYMPRINTF ("Next token is", *yytokenp, yylvalp, yyllocp); + YY_SYMBOL_PRINT ("Next token is", *yytokenp, yylvalp, yyllocp); } yygetLRActions (yystate, *yytokenp, &yyaction, &yyconflicts); @@ -1578,11 +1590,11 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk, if (yyisShiftAction (yyaction)) { - YYDPRINTF ((stderr, "Shifting token %s on stack %d, ", - yytokenName (*yytokenp), yyk)); + YYDPRINTF ((stderr, "On stack %d, ", yyk)); + YY_SYMBOL_PRINT ("shifting", *yytokenp, yylvalp, yyllocp); yyglrShift (yystack, yyk, yyaction, yyposn+1, *yylvalp, yyllocp]b4_user_args[); - YYDPRINTF ((stderr, "which is now in state #%d\n", + YYDPRINTF ((stderr, ", now in state #%d\n", yystack->yytops.yystates[yyk]->yylrState)); break; } @@ -1644,11 +1656,12 @@ yyreportSyntaxError (yyGLRStack* yystack, } yysize += (sizeof ("syntax error, unexpected ") + strlen (yytokenName (*yytokenp))); - yymsg = (char*) malloc (yysize); + yymsg = (char*) YYMALLOC (yysize); if (yymsg != 0) { char* yyp = yymsg; - sprintf (yyp, "syntax error, unexpected %s", + sprintf (yyp, "syntax error%s%s", + (*yytokenp == YYEMPTY ? "" : ", unexpected "), yytokenName (*yytokenp)); yyp += strlen (yyp); if (yycount < 5) @@ -1663,7 +1676,7 @@ yyreportSyntaxError (yyGLRStack* yystack, } } yyerror (]b4_lyyerror_args[yymsg); - free (yymsg); + YYFREE (yymsg); } else yyerror (]b4_lyyerror_args["syntax error; also virtual memory exhausted"); @@ -1677,7 +1690,7 @@ yyreportSyntaxError (yyGLRStack* yystack, /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP, YYLVALP, and YYLLOCP point to the syntactic category, semantic - value, and location of the lookahead. */ + value, and location of the look-ahead. */ static void yyrecoverSyntaxError (yyGLRStack* yystack, YYSTYPE* yylvalp, YYLTYPE* yyllocp]b4_user_formals[) @@ -1697,10 +1710,8 @@ yyrecoverSyntaxError (yyGLRStack* yystack, 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], + yydestruct ("Error: popping", + yystos[yys->yylrState], &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[); yystack->yytops.yystates[0] = yys->yypred; yystack->yynextFree -= 1; @@ -1709,14 +1720,12 @@ yyrecoverSyntaxError (yyGLRStack* yystack, yyFail (yystack][]b4_lpure_args[, NULL); } if (*yytokenp != YYEMPTY) - { - YYDSYMPRINTF ("Error: discarding", *yytokenp, yylvalp, yyllocp); - yydestruct (*yytokenp, yylvalp]b4_location_if([, yyllocp])[); - } + yydestruct ("Error: discarding", + *yytokenp, yylvalp]b4_location_if([, yyllocp])[); YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; *yytokenp = YYTRANSLATE (yychar); - YYDSYMPRINTF ("Next token is", *yytokenp, yylvalp, yyllocp); + YY_SYMBOL_PRINT ("Next token is", *yytokenp, yylvalp, yyllocp); yyj = yypact[yystack->yytops.yystates[0]->yylrState]; if (yyis_pact_ninf (yyj)) return; @@ -1753,16 +1762,15 @@ yyrecoverSyntaxError (yyGLRStack* yystack, if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR && yyisShiftAction (yytable[yyj])) { - YYDPRINTF ((stderr, "Shifting error token, ")); + YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]], + yylvalp, yyllocp); yyglrShift (yystack, 0, yytable[yyj], yys->yyposn, *yylvalp, yyllocp]b4_user_args[); break; } } - YYDSYMPRINTF ("Error: popping", - yystos[yys->yylrState], - &yys->yysemantics.yysval, &yys->yyloc); - yydestruct (yystos[yys->yylrState], + yydestruct ("Error: popping", + yystos[yys->yylrState], &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[); yystack->yytops.yystates[0] = yys->yypred; yystack->yynextFree -= 1; @@ -1817,7 +1825,24 @@ yyrecoverSyntaxError (yyGLRStack* yystack, if (setjmp (yystack.yyexception_buffer) != 0) goto yyDone; - yyglrShift (&yystack, 0, 0, 0, yyval_default, &yyloc_default]b4_user_args[); + yylval = yyval_default; +]b4_location_if([ +#if YYLTYPE_IS_TRIVIAL + yylloc.first_line = yylloc.last_line = 1; + yylloc.first_column = yylloc.last_column = 0; +#endif +]) +m4_ifdef([b4_initial_action], [ +m4_pushdef([b4_at_dollar], [yylval])dnl +m4_pushdef([b4_dollar_dollar], [yylloc])dnl + /* User initialization code. */ + b4_initial_action +m4_popdef([b4_dollar_dollar])dnl +m4_popdef([b4_at_dollar])dnl +/* Line __line__ of glr.c. */ +b4_syncline([@oline@], [@ofile@])])dnl +[ + yyglrShift (&yystack, 0, 0, 0, yylval, &yylloc]b4_user_args[); yytoken = YYEMPTY; yyposn = 0; @@ -1831,7 +1856,7 @@ yyrecoverSyntaxError (yyGLRStack* yystack, { yyRuleNum yyrule; int yyaction; - const short* yyconflicts; + const short int* yyconflicts; yyStateNum yystate = yystack.yytops.yystates[0]->yylrState; YYDPRINTF ((stderr, "Entering state %d\n", yystate)); @@ -1854,15 +1879,14 @@ yyrecoverSyntaxError (yyGLRStack* yystack, YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; yytoken = YYTRANSLATE (yychar); - YYDSYMPRINTF ("Next token is", yytoken, yylvalp, yyllocp); + YY_SYMBOL_PRINT ("Next token is", yytoken, yylvalp, yyllocp); } yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts); if (*yyconflicts != 0) break; if (yyisShiftAction (yyaction)) { - YYDPRINTF ((stderr, "Shifting token %s, ", - yytokenName (yytoken))); + YY_SYMBOL_PRINT ("Shifting", yytoken, yylvalp, yyllocp); if (yytoken != YYEOF) yytoken = YYEMPTY; yyposn += 1; @@ -1915,13 +1939,17 @@ yyrecoverSyntaxError (yyGLRStack* yystack, yyposn = yystack.yytops.yystates[0]->yyposn; } yyDone: - ; + /* On YYABORT, free the lookahead. */ + if (yystack.yyerrflag == 1 && yytoken != YYEMPTY) + yydestruct ("Error: discarding lookahead", + yytoken, yylvalp]b4_location_if([, yyllocp])[); yyfreeGLRStack (&yystack); return yystack.yyerrflag; } /* DEBUGGING ONLY */ +#ifdef YYDEBUG static void yypstack (yyGLRStack* yystack, int yyk) ATTRIBUTE_UNUSED; static void yypdumpstack (yyGLRStack* yystack) ATTRIBUTE_UNUSED; @@ -1933,7 +1961,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 int) yys->yyposn); } static void @@ -1963,38 +1991,39 @@ yypdumpstack (yyGLRStack* yystack) size_t yyi; for (yyp = yystack->yyitems; yyp < yystack->yynextFree; yyp += 1) { - fprintf (stderr, "%3lu. ", (unsigned long) (yyp - yystack->yyitems)); + fprintf (stderr, "%3lu. ", (unsigned long int) (yyp - yystack->yyitems)); if (*(yybool *) yyp) { fprintf (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld", yyp->yystate.yyresolved, yyp->yystate.yylrState, - (unsigned long) yyp->yystate.yyposn, - (long) YYINDEX (yyp->yystate.yypred)); + (unsigned long int) yyp->yystate.yyposn, + (long int) YYINDEX (yyp->yystate.yypred)); if (! yyp->yystate.yyresolved) fprintf (stderr, ", firstVal: %ld", - (long) YYINDEX (yyp->yystate.yysemantics.yyfirstVal)); + (long int) YYINDEX (yyp->yystate.yysemantics.yyfirstVal)); } else { fprintf (stderr, "Option. rule: %d, state: %ld, next: %ld", yyp->yyoption.yyrule, - (long) YYINDEX (yyp->yyoption.yystate), - (long) YYINDEX (yyp->yyoption.yynext)); + (long int) YYINDEX (yyp->yyoption.yystate), + (long int) YYINDEX (yyp->yyoption.yynext)); } fprintf (stderr, "\n"); } fprintf (stderr, "Tops:"); for (yyi = 0; yyi < yystack->yytops.yysize; yyi += 1) - fprintf (stderr, "%lu: %ld; ", (unsigned long) yyi, - (long) YYINDEX (yystack->yytops.yystates[yyi])); + fprintf (stderr, "%lu: %ld; ", (unsigned long int) yyi, + (long int) YYINDEX (yystack->yytops.yystates[yyi])); fprintf (stderr, "\n"); } +#endif ] b4_epilogue m4_if(b4_defines_flag, 0, [], [@output @output_header_name@ -b4_copyright([Skeleton parser for GLR parsing with Bison], [2002, 2003]) +b4_copyright([Skeleton parser for GLR parsing with Bison], [2002, 2003, 2004]) b4_token_defines(b4_tokens)