]> git.saurik.com Git - bison.git/commitdiff
Have more complete shift traces.
authorAkim Demaille <akim@epita.fr>
Thu, 16 Sep 2004 14:14:27 +0000 (14:14 +0000)
committerAkim Demaille <akim@epita.fr>
Thu, 16 Sep 2004 14:14:27 +0000 (14:14 +0000)
* 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.

ChangeLog
data/glr.c
data/lalr1.cc
data/yacc.c
tests/actions.at
tests/calc.at

index 4c54cbd07124b135a721598416d0d0426b9e0cac..75df12e65210eeb9034c768d4d5b7d60b418c3d3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2004-09-16  Akim Demaille  <akim@epita.fr>
+
+       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.
+
 2004-09-08  Akim Demaille  <akim@epita.fr>
 
        * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Move the
index 49916b06ee92379b260ab26c6594d9e497d184fc..b594a83bf33c55d4dd119bbb38757c02fd316ec9 100644 (file)
@@ -1578,11 +1578,11 @@ yyprocessOneStack (yyGLRStack* yystack, int yyk,
 
          if (yyisShiftAction (yyaction))
            {
-             YYDPRINTF ((stderr, "Shifting token %s on stack %d, ",
-                         yytokenName (*yytokenp), yyk));
+             YYDPRINTF ((stderr, "On stack %d, ", yyk));
+             YY_SYMBOL_PRINT ("shifting", yytokenp, yylvalp, yyllocp);
              yyglrShift (yystack, yyk, yyaction, yyposn+1,
                          *yylvalp, yyllocp]b4_user_args[);
-             YYDPRINTF ((stderr, "which is now in state #%d\n",
+             YYDPRINTF ((stderr, ", now in state #%d\n",
                          yystack->yytops.yystates[yyk]->yylrState));
              break;
            }
@@ -1750,7 +1750,8 @@ yyrecoverSyntaxError (yyGLRStack* yystack,
          if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR
              && yyisShiftAction (yytable[yyj]))
            {
-             YYDPRINTF ((stderr, "Shifting error token, "));
+             YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]],
+                              yylvalp, yyllocp);
              yyglrShift (yystack, 0, yytable[yyj],
                          yys->yyposn, *yylvalp, yyllocp]b4_user_args[);
              break;
@@ -1856,8 +1857,7 @@ yyrecoverSyntaxError (yyGLRStack* yystack,
                break;
              if (yyisShiftAction (yyaction))
                {
-                 YYDPRINTF ((stderr, "Shifting token %s, ",
-                             yytokenName (yytoken)));
+                 YY_SYMBOL_PRINT ("Shifting", yytoken, yylvalp, yyllocp);
                  if (yytoken != YYEOF)
                    yytoken = YYEMPTY;
                  yyposn += 1;
index cd3cbb847abcacd2edcf995a6b0afa03b23ebeb1..f246d0b8cf5d58b80601e543e63e884f5b286d0c 100644 (file)
@@ -400,7 +400,8 @@ yy::]b4_parser_class_name[::symprint_ (int yytype,
   (void) yylocationp;
 
   cdebug_ << (yytype < ntokens_ ? "token" : "nterm")
-         << ' ' << name_[yytype] << " (";
+         << ' ' << name_[yytype] << " ("
+          << *yylocationp << ": ";
   switch (yytype)
     {
 ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
@@ -419,8 +420,6 @@ yy::]b4_parser_class_name[::destruct_ (const char *yymsg,
   (void) yyvaluep;
   (void) yylocationp;
 
-  if (!yymsg)
-    yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
   switch (yytype)
@@ -520,10 +519,7 @@ yybackup:
     goto yyacceptlab;
 
   /* Shift the look-ahead token.  */
-#if YYDEBUG
-  YYCDEBUG << "Shifting token " << looka_
-           << " (" << name_[ilooka_] << "), ";
-#endif
+  YY_SYMBOL_PRINT ("Shifting", ilooka_, &value, &location);
 
   /* Discard the token being shifted unless it is eof.  */
   if (looka_ != eof_)
@@ -697,8 +693,6 @@ yyerrlab1:
   if (n_ == final_)
     goto yyacceptlab;
 
-  YYCDEBUG << "Shifting error token, ";
-
   {
     Location errloc;
     errloc.begin = error_start_;
@@ -707,6 +701,10 @@ yyerrlab1:
     location_stack_.push (errloc);
   }
 
+  /* Shift the error token. */
+  YY_SYMBOL_PRINT ("Shifting", stos_[n_],
+                  &semantic_stack_[0], &location_stack_[0]);
+
   state_ = n_;
   goto yynewstate;
 
index 42c7261680a01c7de2c36b63c0d87ceab8e24fcd..cf6c43297ba489259031831bb684af1da6ceb210 100644 (file)
@@ -946,7 +946,7 @@ yybackup:
     YYACCEPT;
 
   /* Shift the look-ahead token.  */
-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
   /* Discard the token being shifted unless it is eof.  */
   if (yychar != YYEOF)
@@ -1185,12 +1185,13 @@ yyerrlab1:
   if (yyn == YYFINAL)
     YYACCEPT;
 
-  YYDPRINTF ((stderr, "Shifting error token, "));
-
   *++yyvsp = yylval;
 ]b4_location_if([  YYLLOC_DEFAULT (yyloc, yylsp, yylerrsp - yylsp);
   *++yylsp = yyloc;])[
 
+  /* Shift the error token. */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
   yystate = yyn;
   goto yynewstate;
 
index 933478c6277a00be40ba28fd26879a0d190310b1..6de55cf902d4f634e6f5b81d03f590cc25d2b81c 100644 (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])
index 71d35f072adc7abfabfcd02426ad3933e03bece8..b7808aceae169a6e2b57270e0f2c2a0531628f52 100644 (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])