X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/67a25fed4cf5d7c93f6909f6a2a9fe23104eb0df..603f1cfdc56691b331b6ef337a8c3633e7a125b3:/tests/calc.at?ds=sidebyside diff --git a/tests/calc.at b/tests/calc.at index a6192142..26dcf860 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -1,4 +1,4 @@ -# Checking the output filenames. -*- Autotest -*- +# Simple calculator. -*- Autotest -*- # Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -45,21 +45,27 @@ AT_DATA_GRAMMAR([calc.y], # include # include #endif +#if HAVE_UNISTD_H +# include +#else +# undef alarm +# define alarm(seconds) /* empty */ +#endif #include extern void perror (const char *s); /* Exercise pre-prologue dependency to %union. */ -typedef int value; +typedef int semantic_value; -static value global_result = 0; +static semantic_value global_result = 0; static int global_count = 0; %} /* Exercise %union. */ %union { - value ival; + semantic_value ival; }; %{ @@ -69,7 +75,7 @@ static int power (int base, int exponent); - %location & %pure & %glr - %location & %pure & %yacc & %parse-param. */ static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ]) - AT_PARAM_IF([value *result, int *count, ]) + AT_PARAM_IF([semantic_value *result, int *count, ]) const char *s );])[ static int yylex (]AT_LEX_FORMALS[); @@ -117,6 +123,7 @@ exp: | '(' exp ')' { $$ = $2; } | '(' error ')' { $$ = 1111; } | '!' { YYERROR; } +| '-' error { YYERROR; } ; %% /* The input. */ @@ -139,15 +146,15 @@ yy::Parser::error_ () } int -yyparse (void) +yyparse (AT_PARAM_IF([semantic_value *result, int *count])) { - yy::Parser parser (!!YYDEBUG[]AT_LOCATION_IF([, yy::Location::Location ()])); + yy::Parser parser (!!YYDEBUG[]AT_LOCATION_IF([, yy::Location::Location ()])AT_PARAM_IF([, result, count])); return parser.parse (); } ], [static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ]) - AT_PARAM_IF([value *result, int *count, ]) + AT_PARAM_IF([semantic_value *result, int *count, ]) const char *s) { AT_PARAM_IF([(void) result; (void) count;]) @@ -299,10 +306,11 @@ power (int base, int exponent) int main (int argc, const char **argv) { - value result = 0; + semantic_value result = 0; int count = 0; int status; + alarm (10); if (argc == 2) yyin = fopen (argv[1], "r"); else @@ -423,14 +431,17 @@ AT_CHECK([cat stderr], 0, [expout]) ]) -# AT_CHECK_CALC([BISON-OPTIONS]) +# AT_CHECK_CALC([BISON-OPTIONS [, EXPECTED-TO-FAIL]]) # ------------------------------ # Start a testing chunk which compiles `calc' grammar with # BISON-OPTIONS, and performs several tests over the parser. +# However, if EXPECTED-TO-FAIL is nonempty, this test is expected to fail. m4_define([AT_CHECK_CALC], [# We use integers to avoid dependencies upon the precision of doubles. AT_SETUP([Calculator $1]) +m4_ifval([$2], [AT_CHECK([exit 77])]) + AT_BISON_OPTION_PUSHDEFS([$1]) AT_DATA_CALC_Y([$1]) @@ -503,9 +514,13 @@ 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], [64], +_AT_CHECK_CALC_ERROR([$1], [0], [(!) + (0 0) = 1], [62], [1.9: syntax error, unexpected "number" calc: error: 2222 != 1]) +_AT_CHECK_CALC_ERROR([$1], [0], [(- *) + (0 0) = 1], [70], +[1.3: syntax error, unexpected '*', expecting "number" or '-' or '(' or '!' +1.11: syntax error, unexpected "number" +calc: error: 2222 != 1]) AT_BISON_OPTION_POPDEFS AT_CLEANUP @@ -536,6 +551,7 @@ AT_CHECK_CALC_LALR([%verbose]) AT_CHECK_CALC_LALR([%yacc]) AT_CHECK_CALC_LALR([%error-verbose]) +AT_CHECK_CALC_LALR([%pure-parser %locations]) AT_CHECK_CALC_LALR([%error-verbose %locations]) AT_CHECK_CALC_LALR([%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc]) @@ -545,7 +561,7 @@ AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %name-prefix="calc AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc]) -AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value *result} %parse-param {int *count}]) +AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) # ----------------------- # @@ -571,6 +587,7 @@ AT_CHECK_CALC_GLR([%verbose]) AT_CHECK_CALC_GLR([%yacc]) AT_CHECK_CALC_GLR([%error-verbose]) +AT_CHECK_CALC_GLR([%pure-parser %locations]) AT_CHECK_CALC_GLR([%error-verbose %locations]) AT_CHECK_CALC_GLR([%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc]) @@ -580,7 +597,7 @@ AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %name-prefix="calc" AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc]) -AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value *result} %parse-param {int *count}]) +AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) # ----------------------------- # @@ -592,7 +609,7 @@ AT_BANNER([[Simple LALR1 C++ Calculator.]]) # AT_CHECK_CALC_LALR1_CC([BISON-OPTIONS]) # --------------------------------------- # Start a testing chunk which compiles `calc' grammar with -# BISON-OPTIONS and %glr-parser, and performs several tests over the parser. +# the C++ skeleton, and performs several tests over the parser. m4_define([AT_CHECK_CALC_LALR1_CC], [AT_CHECK_CALC([%skeleton "lalr1.cc"] $@)]) @@ -607,6 +624,7 @@ AT_CHECK_CALC_LALR1_CC([%defines]) # AT_CHECK_CALC_LALR1_CC([%yacc]) # AT_CHECK_CALC_LALR1_CC([%error-verbose]) +# AT_CHECK_CALC_LALR1_CC([%pure-parser %locations]) # AT_CHECK_CALC_LALR1_CC([%error-verbose %locations]) AT_CHECK_CALC_LALR1_CC([%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc]) @@ -616,4 +634,4 @@ AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %locations %defines %name-prefix=" AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc]) -# AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value *result} %parse-param {int *count}]) +AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])