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:
Akim Demaille
2004-09-16 14:14:27 +00:00
parent 9c66f418c4
commit 1576d44dce
6 changed files with 44 additions and 32 deletions

View File

@@ -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])

View File

@@ -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])