From 5504898e82be0ce888fff5a28a48530fa156625f Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 26 May 2002 18:38:41 +0000 Subject: [PATCH 1/1] * 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. --- ChangeLog | 9 +++++++++ NEWS | 3 +++ data/bison.simple | 37 +++++++++++++++++++++++++++++++++---- tests/calc.at | 12 ++++++------ tests/regression.at | 7 ++++++- 5 files changed, 57 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5bc854ad..f074e59c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2002-05-26 Akim Demaille + + * 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 * doc/bison.texinfo (Debugging): Split into... diff --git a/NEWS b/NEWS index c13dc759..0d083b56 100644 --- a/NEWS +++ b/NEWS @@ -26,6 +26,9 @@ Changes in version 1.49b: and has long been required by POSIX. For more details, please see . +* Traces + Popped tokens and nonterminals are now reported. + * Large grammars Large grammars are now supported (large token numbers, large grammar size (= sum of the LHS and RHS lengths), large LALR tables). diff --git a/data/bison.simple b/data/bison.simple index 7a491feb..b595946a 100644 --- a/data/bison.simple +++ b/data/bison.simple @@ -362,7 +362,7 @@ static const b4_uint_type(b4_rline_max) yyrline[[]] = }; #endif -#if (YYDEBUG) || YYERROR_VERBOSE +#if YYDEBUG || YYERROR_VERBOSE /* YYTNME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[[]] = @@ -389,9 +389,9 @@ static const b4_uint_type(b4_r2_max) yyr2[[]] = b4_r2 }; -/* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE - doesn't specify something else to do. Zero means the default is an - error. */ +/* YYDEFACT[[STATE-NAME]] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ static const short yydefact[[]] = { b4_defact @@ -429,6 +429,14 @@ static const short yycheck[[]] = 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__) # define YYSIZE_T __SIZE_TYPE__ @@ -1137,6 +1145,27 @@ yyerrlab1: /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) 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--; yystate = *--yyssp; #if YYLSP_NEEDED diff --git a/tests/calc.at b/tests/calc.at index 2cc0757f..4ea26354 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -1,5 +1,5 @@ # 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 # 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]) # 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"]) -_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 '(']) _AT_CHECK_CALC_ERROR([$1], [error], [4], [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 '=']) _AT_CHECK_CALC_ERROR([$1], [ +1], - [13], + [14], [2.1-2.2: parse error, unexpected '+']) # Exercise error messages with EOF: work on an empty file. _AT_CHECK_CALC_ERROR([$1], @@ -430,7 +430,7 @@ _AT_CHECK_CALC_ERROR([$1], # associated to `error'. _AT_CHECK_CALC_ERROR([$1], [(1 ++ 2) + (0 0) = 1], - [76], + [82], [1.5-1.6: parse error, unexpected '+', expecting "number" or '-' or '(' 1.15-1.16: parse error, unexpected "number" calc: error: 0 != 1]) diff --git a/tests/regression.at b/tests/regression.at index 6d73aaaf..d1d819e6 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -1,5 +1,5 @@ # 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 # 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 }; +static const unsigned char yystos[] = +{ + 0, 3, 8, 9, 10, 4, 0, 6, 11, 5, + 8, 8 +}; ]]) AT_CLEANUP -- 2.45.2