mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
Have more complete shift traces.
* data/yacc.c, data/lalr1.c, data/glr.c: Use YY_SYMBOL_PRINT to report Shifts instead of ad hoc YYDPRINTF invocations, including for the error token. * data/lalr1.cc (symprint_): Output the location. * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): In C++, don't output the location within the %printer. Activate GLR tests, at least to make sure they compile properly. They still don't pass though. * tests/calc.at: Adjust expect verbose output, since now "Entering state..." is on a different line than the "Shifting" message.
This commit is contained in:
15
ChangeLog
15
ChangeLog
@@ -1,3 +1,18 @@
|
||||
2004-09-16 Akim Demaille <akim@epita.fr>
|
||||
|
||||
Have more complete shift traces.
|
||||
|
||||
* data/yacc.c, data/lalr1.c, data/glr.c: Use YY_SYMBOL_PRINT
|
||||
to report Shifts instead of ad hoc YYDPRINTF invocations,
|
||||
including for the error token.
|
||||
* data/lalr1.cc (symprint_): Output the location.
|
||||
* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): In C++, don't
|
||||
output the location within the %printer.
|
||||
Activate GLR tests, at least to make sure they compile properly.
|
||||
They still don't pass though.
|
||||
* tests/calc.at: Adjust expect verbose output, since now "Entering
|
||||
state..." is on a different line than the "Shifting" message.
|
||||
|
||||
2004-09-08 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Move the
|
||||
|
||||
12
data/glr.c
12
data/glr.c
@@ -1578,11 +1578,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;
|
||||
}
|
||||
@@ -1750,7 +1750,8 @@ 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;
|
||||
@@ -1856,8 +1857,7 @@ yyrecoverSyntaxError (yyGLRStack* yystack,
|
||||
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;
|
||||
|
||||
@@ -400,7 +400,8 @@ yy::]b4_parser_class_name[::symprint_ (int yytype,
|
||||
(void) yylocationp;
|
||||
|
||||
cdebug_ << (yytype < ntokens_ ? "token" : "nterm")
|
||||
<< ' ' << name_[yytype] << " (";
|
||||
<< ' ' << name_[yytype] << " ("
|
||||
<< *yylocationp << ": ";
|
||||
switch (yytype)
|
||||
{
|
||||
]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
|
||||
@@ -419,8 +420,6 @@ yy::]b4_parser_class_name[::destruct_ (const char *yymsg,
|
||||
(void) yyvaluep;
|
||||
(void) yylocationp;
|
||||
|
||||
if (!yymsg)
|
||||
yymsg = "Deleting";
|
||||
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
|
||||
|
||||
switch (yytype)
|
||||
@@ -520,10 +519,7 @@ yybackup:
|
||||
goto yyacceptlab;
|
||||
|
||||
/* Shift the look-ahead token. */
|
||||
#if YYDEBUG
|
||||
YYCDEBUG << "Shifting token " << looka_
|
||||
<< " (" << name_[ilooka_] << "), ";
|
||||
#endif
|
||||
YY_SYMBOL_PRINT ("Shifting", ilooka_, &value, &location);
|
||||
|
||||
/* Discard the token being shifted unless it is eof. */
|
||||
if (looka_ != eof_)
|
||||
@@ -697,8 +693,6 @@ yyerrlab1:
|
||||
if (n_ == final_)
|
||||
goto yyacceptlab;
|
||||
|
||||
YYCDEBUG << "Shifting error token, ";
|
||||
|
||||
{
|
||||
Location errloc;
|
||||
errloc.begin = error_start_;
|
||||
@@ -707,6 +701,10 @@ yyerrlab1:
|
||||
location_stack_.push (errloc);
|
||||
}
|
||||
|
||||
/* Shift the error token. */
|
||||
YY_SYMBOL_PRINT ("Shifting", stos_[n_],
|
||||
&semantic_stack_[0], &location_stack_[0]);
|
||||
|
||||
state_ = n_;
|
||||
goto yynewstate;
|
||||
|
||||
|
||||
@@ -946,7 +946,7 @@ yybackup:
|
||||
YYACCEPT;
|
||||
|
||||
/* Shift the look-ahead token. */
|
||||
YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
|
||||
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
|
||||
|
||||
/* Discard the token being shifted unless it is eof. */
|
||||
if (yychar != YYEOF)
|
||||
@@ -1185,12 +1185,13 @@ yyerrlab1:
|
||||
if (yyn == YYFINAL)
|
||||
YYACCEPT;
|
||||
|
||||
YYDPRINTF ((stderr, "Shifting error token, "));
|
||||
|
||||
*++yyvsp = yylval;
|
||||
]b4_location_if([ YYLLOC_DEFAULT (yyloc, yylsp, yylerrsp - yylsp);
|
||||
*++yylsp = yyloc;])[
|
||||
|
||||
/* Shift the error token. */
|
||||
YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
|
||||
|
||||
yystate = yyn;
|
||||
goto yynewstate;
|
||||
|
||||
|
||||
@@ -196,7 +196,7 @@ m4_ifval([$6], [%union
|
||||
|
||||
%printer
|
||||
{
|
||||
]AT_LALR1_CC_IF([cdebug_ << @$ << ": " << $$;],
|
||||
]AT_LALR1_CC_IF([cdebug_ << $$;],
|
||||
[fprintf (yyoutput, "%d@%d-%d", $$, RANGE (@$))])[;
|
||||
}
|
||||
input line thing 'x' 'y'
|
||||
@@ -471,7 +471,5 @@ AT_CHECK_PRINTER_AND_DESTRUCTOR([])
|
||||
AT_CHECK_PRINTER_AND_DESTRUCTOR([], [with union])
|
||||
AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"])
|
||||
AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"], [with union])
|
||||
|
||||
# FIXME. These test cases fail.
|
||||
#AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser])
|
||||
#AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [with union])
|
||||
AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser])
|
||||
AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [with union])
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Simple calculator. -*- Autotest -*-
|
||||
# Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2000, 2001, 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
|
||||
@@ -463,21 +463,21 @@ _AT_CHECK_CALC([$1],
|
||||
|
||||
2^2^3 = 256
|
||||
(2^2)^3 = 64],
|
||||
[486])
|
||||
[570])
|
||||
|
||||
# Some syntax errors.
|
||||
_AT_CHECK_CALC_ERROR([$1], [1], [0 0], [12],
|
||||
_AT_CHECK_CALC_ERROR([$1], [1], [0 0], [13],
|
||||
[1.2: syntax error, unexpected "number"])
|
||||
_AT_CHECK_CALC_ERROR([$1], [1], [1//2], [16],
|
||||
_AT_CHECK_CALC_ERROR([$1], [1], [1//2], [18],
|
||||
[1.2: syntax error, unexpected '/', expecting "number" or '-' or '(' or '!'])
|
||||
_AT_CHECK_CALC_ERROR([$1], [1], [error], [5],
|
||||
[1.0: syntax error, unexpected $undefined])
|
||||
_AT_CHECK_CALC_ERROR([$1], [1], [1 = 2 = 3], [23],
|
||||
_AT_CHECK_CALC_ERROR([$1], [1], [1 = 2 = 3], [26],
|
||||
[1.6: syntax error, unexpected '='])
|
||||
_AT_CHECK_CALC_ERROR([$1], [1],
|
||||
[
|
||||
+1],
|
||||
[15],
|
||||
[16],
|
||||
[2.0: syntax error, unexpected '+'])
|
||||
# Exercise error messages with EOF: work on an empty file.
|
||||
_AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [5],
|
||||
@@ -501,7 +501,7 @@ _AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [5],
|
||||
#
|
||||
_AT_CHECK_CALC_ERROR([$1], [0],
|
||||
[() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1],
|
||||
[156],
|
||||
[188],
|
||||
[1.1: syntax error, unexpected ')', expecting "number" or '-' or '(' or '!'
|
||||
1.17: syntax error, unexpected ')', expecting "number" or '-' or '(' or '!'
|
||||
1.22: syntax error, unexpected '*', expecting "number" or '-' or '(' or '!'
|
||||
@@ -510,10 +510,10 @@ calc: error: 4444 != 1])
|
||||
|
||||
# The same, but this time exercising explicitly triggered syntax errors.
|
||||
# POSIX says the look-ahead causing the error should not be discarded.
|
||||
_AT_CHECK_CALC_ERROR([$1], [0], [(!) + (0 0) = 1], [62],
|
||||
_AT_CHECK_CALC_ERROR([$1], [0], [(!) + (0 0) = 1], [75],
|
||||
[1.9: syntax error, unexpected "number"
|
||||
calc: error: 2222 != 1])
|
||||
_AT_CHECK_CALC_ERROR([$1], [0], [(- *) + (0 0) = 1], [70],
|
||||
_AT_CHECK_CALC_ERROR([$1], [0], [(- *) + (0 0) = 1], [85],
|
||||
[1.3: syntax error, unexpected '*', expecting "number" or '-' or '(' or '!'
|
||||
1.11: syntax error, unexpected "number"
|
||||
calc: error: 2222 != 1])
|
||||
|
||||
Reference in New Issue
Block a user