* tests/calc.at (AT_CHECK_CALC): Adjust: there are now additional

`Error:' lines.
* data/bison.simple (yystos) [YYDEBUG]: New.
(yyparse) [YYDEBUG]: Display the symbols which are popped during
error recovery.
* tests/regression.at (Web2c Actions): Adjust: yystos is output now.
This commit is contained in:
Akim Demaille
2002-05-26 18:38:41 +00:00
parent 4fd2214bc6
commit 5504898e82
5 changed files with 57 additions and 11 deletions

View File

@@ -1,3 +1,12 @@
2002-05-26 Akim Demaille <akim@epita.fr>
* tests/calc.at (AT_CHECK_CALC): Adjust: there are now additional
`Error:' lines.
* data/bison.simple (yystos) [YYDEBUG]: New.
(yyparse) [YYDEBUG]: Display the symbols which are popped during
error recovery.
* tests/regression.at (Web2c Actions): Adjust: yystos is output now.
2002-05-25 Akim Demaille <akim@epita.fr> 2002-05-25 Akim Demaille <akim@epita.fr>
* doc/bison.texinfo (Debugging): Split into... * doc/bison.texinfo (Debugging): Split into...

3
NEWS
View File

@@ -26,6 +26,9 @@ Changes in version 1.49b:
and has long been required by POSIX. For more details, please see and has long been required by POSIX. For more details, please see
<http://mail.gnu.org/pipermail/bug-bison/2002-May/001452.html>. <http://mail.gnu.org/pipermail/bug-bison/2002-May/001452.html>.
* Traces
Popped tokens and nonterminals are now reported.
* Large grammars * Large grammars
Large grammars are now supported (large token numbers, large grammar Large grammars are now supported (large token numbers, large grammar
size (= sum of the LHS and RHS lengths), large LALR tables). size (= sum of the LHS and RHS lengths), large LALR tables).

View File

@@ -362,7 +362,7 @@ static const b4_uint_type(b4_rline_max) yyrline[[]] =
}; };
#endif #endif
#if (YYDEBUG) || YYERROR_VERBOSE #if YYDEBUG || YYERROR_VERBOSE
/* YYTNME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM. /* YYTNME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[[]] = static const char *const yytname[[]] =
@@ -389,9 +389,9 @@ static const b4_uint_type(b4_r2_max) yyr2[[]] =
b4_r2 b4_r2
}; };
/* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE /* YYDEFACT[[STATE-NAME]] -- Default rule to reduce with in state
doesn't specify something else to do. Zero means the default is an STATE-NUM when YYTABLE doesn't specify something else to do. Zero
error. */ means the default is an error. */
static const short yydefact[[]] = static const short yydefact[[]] =
{ {
b4_defact b4_defact
@@ -429,6 +429,14 @@ static const short yycheck[[]] =
b4_check b4_check
}; };
#if YYDEBUG
/* YYSTOS[[STATE-NUM]] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const b4_uint_type(b4_stos_max) yystos[[]] =
{
b4_stos
};
#endif
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__
@@ -1137,6 +1145,27 @@ yyerrlab1:
/* Pop the current state because it cannot handle the error token. */ /* Pop the current state because it cannot handle the error token. */
if (yyssp == yyss) if (yyssp == yyss)
YYABORT; YYABORT;
#if YYDEBUG
if (yydebug)
{
if (yystos[yystate] < YYNTOKENS)
{
YYFPRINTF (stderr, "Error: popping token %d (%s",
yytoknum[yystos[yystate]], yytname[yystos[yystate]]);
# ifdef YYPRINT
YYPRINT (stderr, yytoknum[yystos[yystate]], *yyvsp);
# endif
YYFPRINTF (stderr, ")\n");
}
else
{
YYFPRINTF (stderr, "Error: popping nonterminal (%s)\n",
yytname[yystos[yystate]]);
}
}
#endif
yyvsp--; yyvsp--;
yystate = *--yyssp; yystate = *--yyssp;
#if YYLSP_NEEDED #if YYLSP_NEEDED

View File

@@ -1,5 +1,5 @@
# Checking the output filenames. -*- Autotest -*- # Checking the output filenames. -*- Autotest -*-
# Copyright 2000, 2001 Free Software Foundation, Inc. # Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@@ -406,18 +406,18 @@ _AT_CHECK_CALC([$1],
(2^2)^3 = 64], [486]) (2^2)^3 = 64], [486])
# Some parse errors. # Some parse errors.
_AT_CHECK_CALC_ERROR([$1], [0 0], [10], _AT_CHECK_CALC_ERROR([$1], [0 0], [11],
[1.3-1.4: parse error, unexpected "number"]) [1.3-1.4: parse error, unexpected "number"])
_AT_CHECK_CALC_ERROR([$1], [1//2], [13], _AT_CHECK_CALC_ERROR([$1], [1//2], [15],
[1.3-1.4: parse error, unexpected '/', expecting "number" or '-' or '(']) [1.3-1.4: parse error, unexpected '/', expecting "number" or '-' or '('])
_AT_CHECK_CALC_ERROR([$1], [error], [4], _AT_CHECK_CALC_ERROR([$1], [error], [4],
[1.1-1.2: parse error, unexpected $undefined., expecting "number" or '-' or '\n' or '(']) [1.1-1.2: parse error, unexpected $undefined., expecting "number" or '-' or '\n' or '('])
_AT_CHECK_CALC_ERROR([$1], [1 = 2 = 3], [19], _AT_CHECK_CALC_ERROR([$1], [1 = 2 = 3], [22],
[1.7-1.8: parse error, unexpected '=']) [1.7-1.8: parse error, unexpected '='])
_AT_CHECK_CALC_ERROR([$1], _AT_CHECK_CALC_ERROR([$1],
[ [
+1], +1],
[13], [14],
[2.1-2.2: parse error, unexpected '+']) [2.1-2.2: parse error, unexpected '+'])
# Exercise error messages with EOF: work on an empty file. # Exercise error messages with EOF: work on an empty file.
_AT_CHECK_CALC_ERROR([$1], _AT_CHECK_CALC_ERROR([$1],
@@ -430,7 +430,7 @@ _AT_CHECK_CALC_ERROR([$1],
# associated to `error'. # associated to `error'.
_AT_CHECK_CALC_ERROR([$1], _AT_CHECK_CALC_ERROR([$1],
[(1 ++ 2) + (0 0) = 1], [(1 ++ 2) + (0 0) = 1],
[76], [82],
[1.5-1.6: parse error, unexpected '+', expecting "number" or '-' or '(' [1.5-1.6: parse error, unexpected '+', expecting "number" or '-' or '('
1.15-1.16: parse error, unexpected "number" 1.15-1.16: parse error, unexpected "number"
calc: error: 0 != 1]) calc: error: 0 != 1])

View File

@@ -1,5 +1,5 @@
# Bison Regressions. -*- Autotest -*- # Bison Regressions. -*- Autotest -*-
# Copyright 2001, 2002 Free Software Foundation, Inc. # Copyright (C) 2001, 2002 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@@ -549,6 +549,11 @@ static const short yycheck[] =
{ {
7, 3, 9, 4, 0, -1, 6, 5 7, 3, 9, 4, 0, -1, 6, 5
}; };
static const unsigned char yystos[] =
{
0, 3, 8, 9, 10, 4, 0, 6, 11, 5,
8, 8
};
]]) ]])
AT_CLEANUP AT_CLEANUP