X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/473013144def14af635adc1c47d3718d41ced23e..f508a6a0d6ec0ea5563cf11e44a89f28a012bc10:/tests/calc.at diff --git a/tests/calc.at b/tests/calc.at index 26dcf860..15d9b77a 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -1,5 +1,7 @@ # Simple calculator. -*- Autotest -*- -# Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 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 @@ -41,10 +43,8 @@ AT_DATA_GRAMMAR([calc.y], %{ #include -#if STDC_HEADERS -# include -# include -#endif +#include +#include #if HAVE_UNISTD_H # include #else @@ -53,8 +53,6 @@ AT_DATA_GRAMMAR([calc.y], #endif #include -extern void perror (const char *s); - /* Exercise pre-prologue dependency to %union. */ typedef int semantic_value; @@ -70,7 +68,7 @@ static int global_count = 0; %{ static int power (int base, int exponent); -]AT_LALR1_CC_IF([typedef yy::Location YYLTYPE;], +]AT_LALR1_CC_IF([typedef yy::location YYLTYPE;], [/* yyerror receives the location if: - %location & %pure & %glr - %location & %pure & %yacc & %parse-param. */ @@ -130,25 +128,19 @@ exp: static FILE *yyin; ]AT_LALR1_CC_IF( -[/* Currently, print_ is required in C++. */ -void -yy::Parser::print_ () -{ -AT_LOCATION_IF([ - std::cerr << location;]) -} - -/* A C++ error reporting function. */ +[/* A C++ error reporting function. */ void -yy::Parser::error_ () +yy::parser::error (const location& l, const std::string& m) { - std::cerr << AT_LOCATION_IF([location << ": " << ])message << std::endl; + (void) l; + std::cerr << AT_LOCATION_IF([l << ": " << ])m << std::endl; } int yyparse (AT_PARAM_IF([semantic_value *result, int *count])) { - yy::Parser parser (!!YYDEBUG[]AT_LOCATION_IF([, yy::Location::Location ()])AT_PARAM_IF([, result, count])); + yy::parser parser[]AT_PARAM_IF([ (result, count)]); + parser.set_debug_level (!!YYDEBUG); return parser.parse (); } ], @@ -310,7 +302,11 @@ main (int argc, const char **argv) int count = 0; int status; - alarm (10); + /* This used to be alarm (10), but that isn't enough time for + a July 1995 vintage DEC Alphastation 200 4/100 system, + according to Nelson H. F. Beebe. 100 seconds is enough. */ + alarm (100); + if (argc == 2) yyin = fopen (argv[1], "r"); else @@ -446,11 +442,11 @@ AT_BISON_OPTION_PUSHDEFS([$1]) AT_DATA_CALC_Y([$1]) -# Specify the output files to avoid problems on different file systems. -AT_CHECK([bison -o calc.c calc.y]) - -AT_LALR1_CC_IF([AT_COMPILE_CXX([calc])], - [AT_COMPILE([calc])]) +AT_LALR1_CC_IF( + [AT_CHECK([bison -o calc.cc calc.y]) + AT_COMPILE_CXX([calc])], + [AT_CHECK([bison -o calc.c calc.y]) + AT_COMPILE([calc])]) # Test the priorities. _AT_CHECK_CALC([$1], @@ -467,24 +463,24 @@ _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], [11], +_AT_CHECK_CALC_ERROR([$1], [1], [0 0], [13], [1.2: syntax error, unexpected "number"]) -_AT_CHECK_CALC_ERROR([$1], [1], [1//2], [15], +_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], [4], +_AT_CHECK_CALC_ERROR([$1], [1], [error], [5], [1.0: syntax error, unexpected $undefined]) -_AT_CHECK_CALC_ERROR([$1], [1], [1 = 2 = 3], [22], +_AT_CHECK_CALC_ERROR([$1], [1], [1 = 2 = 3], [26], [1.6: syntax error, unexpected '=']) _AT_CHECK_CALC_ERROR([$1], [1], [ +1], - [14], + [16], [2.0: syntax error, unexpected '+']) # Exercise error messages with EOF: work on an empty file. -_AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [4], +_AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [5], [1.0: syntax error, unexpected "end of input"]) # Exercise the error token: without it, we die at the first error, @@ -498,14 +494,14 @@ _AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [4], # # - test the action associated to `error' # -# - check the lookahead that triggers an error is not discarded -# when we enter error recovery. Below, the lookahead causing the +# - check the look-ahead that triggers an error is not discarded +# when we enter error recovery. Below, the look-ahead causing the # first error is ")", which is needed to recover from the error and # produce the "0" that triggers the "0 != 1" error. # _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 '!' @@ -513,11 +509,11 @@ _AT_CHECK_CALC_ERROR([$1], [0], calc: error: 4444 != 1]) # The same, but this time exercising explicitly triggered syntax errors. -# POSIX says the lookahead causing the error should not be discarded. -_AT_CHECK_CALC_ERROR([$1], [0], [(!) + (0 0) = 1], [62], +# POSIX says the look-ahead causing the error should not be discarded. +_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])