]> git.saurik.com Git - bison.git/blobdiff - tests/calc.at
* Makefile.maint: Merge from coreutils.
[bison.git] / tests / calc.at
index 217b8828a2ad1dad5539b3c6d7220fba431710c8..909b4a6c5c4a84992968caf61784dacc0fc1e0a7 100644 (file)
@@ -1,6 +1,6 @@
 # Simple calculator.                         -*- Autotest -*-
 
-# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software
+# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
 # Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
@@ -40,7 +40,7 @@ m4_define([_AT_DATA_CALC_Y],
 AT_DATA_GRAMMAR([calc.y],
 [[/* Infix notation calculator--calc */
 ]$4
-AT_LALR1_CC_IF(
+AT_SKEL_CC_IF(
 [%define "global_tokens_and_yystype"])[
 %{
 #include <stdio.h>
@@ -54,6 +54,7 @@ AT_LALR1_CC_IF(
 # define alarm(seconds) /* empty */
 #endif
 #include <ctype.h>
+#define USE(Var)
 
 /* Exercise pre-prologue dependency to %union.  */
 typedef int semantic_value;
@@ -70,8 +71,10 @@ static int global_count = 0;
 
 %{
 static int power (int base, int exponent);
-]AT_LALR1_CC_IF(
-[typedef yy::location YYLTYPE;
+]AT_SKEL_CC_IF(
+[#ifndef YYLTYPE
+# define YYLTYPE yy::location
+#endif
 #define first_line   begin.line
 #define first_column begin.column
 #define last_line    end.line
@@ -89,6 +92,17 @@ static int get_char (]AT_LEX_FORMALS[);
 static void unget_char (]AT_LEX_PRE_FORMALS[ int c);
 %}
 
+]AT_SKEL_CC_IF(
+[/* The lalr1.cc skeleton, for backward compatibility, defines
+   a constructor for position that initializes the filename.  The
+   glr.cc skeleton does not (and in fact cannot: location/position
+   are stored in a union, from which objects with constructors are
+   excluded in C++. */
+%initial-action {
+  @$.initialize (0);
+}
+])[
+
 /* Bison Declarations */
 %token CALC_EOF 0 "end of input"
 %token <ival> NUM "number"
@@ -109,7 +123,7 @@ input:
 
 line:
   '\n'
-| exp '\n'           { ]AT_PARAM_IF([*result = global_result = $1;])[ }
+| exp '\n'           { ]AT_PARAM_IF([*result = global_result = $1], [USE ($1)])[; }
 ;
 
 exp:
@@ -128,15 +142,15 @@ exp:
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
 | '(' error ')'      { $$ = 1111;           }
-| '!'                { YYERROR;             }
-| '-' error          { YYERROR;             }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input. */
+/* The input.  */
 static FILE *input;
 
-]AT_LALR1_CC_IF(
-[/* A C++ error reporting function. */
+]AT_SKEL_CC_IF(
+[/* A C++ error reporting function.  */
 void
 yy::parser::error (const location& l, const std::string& m)
 {
@@ -318,7 +332,7 @@ main (int argc, const char **argv)
       return 3;
     }
 
-]AT_LALR1_CC_IF([], [m4_bmatch([$4], [%debug],
+]AT_SKEL_CC_IF([], [m4_bmatch([$4], [%debug],
 [  yydebug = 1;])])[
   status = yyparse (]AT_PARAM_IF([&result, &count])[);
   if (global_result != result)
@@ -340,12 +354,14 @@ m4_define([AT_DATA_CALC_Y],
 
 
 
-# _AT_CHECK_CALC(BISON-OPTIONS, INPUT, [NUM-STDERR-LINES = 0])
-# ------------------------------------------------------------
+# _AT_CHECK_CALC(BISON-OPTIONS, INPUT, [NUM-STDERR-LINES])
+# --------------------------------------------------------
 # Run `calc' on INPUT and expect no STDOUT nor STDERR.
 #
 # If BISON-OPTIONS contains `%debug' but not `%glr-parser', then
+#
 # NUM-STDERR-LINES is the number of expected lines on stderr.
+# Currently this is ignored, though, since the output format is fluctuating.
 #
 # We don't count GLR's traces yet, since its traces are somewhat
 # different from LALR's.
@@ -354,17 +370,11 @@ m4_define([_AT_CHECK_CALC],
 [[$2
 ]])
 AT_PARSER_CHECK([./calc input], 0, [], [stderr])
-m4_bmatch([$1],
-  [%debug.*%glr\|%glr.*%debug],
-     [],
-  [%debug],
-     [AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0, [$3
-])])
 ])
 
 
 # _AT_CHECK_CALC_ERROR(BISON-OPTIONS, EXIT-STATUS, INPUT,
-#                      [NUM-DEBUG-LINES],
+#                      [NUM-STDERR-LINES],
 #                      [VERBOSE-AND-LOCATED-ERROR-MESSAGE])
 # ---------------------------------------------------------
 # Run `calc' on INPUT, and expect a `syntax error' message.
@@ -372,6 +382,9 @@ m4_bmatch([$1],
 # If INPUT starts with a slash, it is used as absolute input file name,
 # otherwise as contents.
 #
+# NUM-STDERR-LINES is the number of expected lines on stderr.
+# Currently this is ignored, though, since the output format is fluctuating.
+#
 # If BISON-OPTIONS contains `%location', then make sure the ERROR-LOCATION
 # is correctly output on stderr.
 #
@@ -388,12 +401,6 @@ m4_define([_AT_CHECK_CALC_ERROR],
 [[$3
 ]])
 AT_PARSER_CHECK([./calc input], $2, [], [stderr])])
-m4_bmatch([$1],
-  [%debug.*%glr\|%glr.*%debug],
-     [],
-  [%debug],
-     [AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0, [$4
-])])
 
 # Normalize the observed and expected error messages, depending upon the
 # options.
@@ -444,7 +451,7 @@ AT_BISON_OPTION_PUSHDEFS([$1])
 
 AT_DATA_CALC_Y([$1])
 
-AT_LALR1_CC_IF(
+AT_SKEL_CC_IF(
   [AT_CHECK([bison -o calc.cc calc.y])
    AT_COMPILE_CXX([calc])],
   [AT_CHECK([bison -o calc.c calc.y])
@@ -531,7 +538,7 @@ AT_CLEANUP
 # Simple LALR Calculator.  #
 # ------------------------ #
 
-AT_BANNER([[Simple LALR Calculator.]])
+AT_BANNER([[Simple LALR(1) Calculator.]])
 
 # AT_CHECK_CALC_LALR([BISON-OPTIONS])
 # -----------------------------------
@@ -602,34 +609,45 @@ AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-
 # Simple LALR1 C++ Calculator.  #
 # ----------------------------- #
 
-AT_BANNER([[Simple LALR1 C++ Calculator.]])
+AT_BANNER([[Simple LALR(1) C++ Calculator.]])
 
 # AT_CHECK_CALC_LALR1_CC([BISON-OPTIONS])
 # ---------------------------------------
 # Start a testing chunk which compiles `calc' grammar with
 # the C++ skeleton, and performs several tests over the parser.
 m4_define([AT_CHECK_CALC_LALR1_CC],
-[AT_CHECK_CALC([%skeleton "lalr1.cc"] $@)])
+[AT_CHECK_CALC([%skeleton "lalr1.cc" %defines %locations] $@)])
 
-# AT_CHECK_CALC_LALR1_CC()
+AT_CHECK_CALC_LALR1_CC([])
+AT_CHECK_CALC_LALR1_CC([%error-verbose %name-prefix="calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR1_CC([%defines %locations])
+AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %name-prefix="calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR1_CC([%defines])
-# AT_CHECK_CALC_LALR1_CC([%locations])
-# AT_CHECK_CALC_LALR1_CC([%name-prefix="calc"])
-# AT_CHECK_CALC_LALR1_CC([%verbose])
-# AT_CHECK_CALC_LALR1_CC([%yacc])
-# AT_CHECK_CALC_LALR1_CC([%error-verbose])
+AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc])
 
-# AT_CHECK_CALC_LALR1_CC([%pure-parser %locations])
-# AT_CHECK_CALC_LALR1_CC([%error-verbose %locations])
+AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+
+
+
+# --------------------------- #
+# Simple GLR C++ Calculator.  #
+# --------------------------- #
+
+AT_BANNER([[Simple GLR C++ Calculator.]])
+
+# AT_CHECK_CALC_GLR_CC([BISON-OPTIONS])
+# -------------------------------------
+# Start a testing chunk which compiles `calc' grammar with
+# the GLR C++ skeleton, and performs several tests over the parser.
+m4_define([AT_CHECK_CALC_GLR_CC],
+[AT_CHECK_CALC([%skeleton "glr.cc" %defines %locations] $@)])
 
-AT_CHECK_CALC_LALR1_CC([%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc])
+#AT_CHECK_CALC_GLR_CC([])
+#AT_CHECK_CALC_GLR_CC([%error-verbose %name-prefix="calc" %verbose %yacc])
 
-# AT_CHECK_CALC_LALR1_CC([%debug])
-AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
+# AT_CHECK_CALC_GLR_CC([%debug])
+#AT_CHECK_CALC_GLR_CC([%error-verbose %debug %name-prefix="calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc])
 
-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}])
+AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])