* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Adjust
authorAkim Demaille <akim@epita.fr>
Thu, 2 Sep 2004 13:04:11 +0000 (13:04 +0000)
committerAkim Demaille <akim@epita.fr>
Thu, 2 Sep 2004 13:04:11 +0000 (13:04 +0000)
%printer calls to use cdebug_ when using lalr1.cc.
* data/lalr1.cc (b4_yysymprint_generate): New.

ChangeLog
data/lalr1.cc
tests/actions.at

index 5553867..131c2eb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2004-09-02  Akim Demaille  <akim@epita.fr>
+
+       * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Adjust
+       %printer calls to use cdebug_ when using lalr1.cc.
+
+       * data/lalr1.cc (b4_yysymprint_generate): New.
+
 2004-08-30  Florian Krohm  <florian@edamail.fishkill.ibm.com>
 
        * data/glr.c: Guard the declarations of yypstack and yypdumpstack
index 200f42d..b07cb19 100644 (file)
@@ -114,6 +114,35 @@ m4_define([b4_cc_var_decls],
 m4_define([b4_cc_var_decl],
          [    $1;])
 
+
+# b4_yysymprint_generate(FUNCTION-DECLARATOR)
+# -------------------------------------------
+# Generate the "symprint_" member function.
+m4_define([b4_yysymprint_generate],
+[[/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+]void
+yy::b4_parser_class_name::symprint_ (int yytype, const SemanticType *yyvaluep, const LocationType *yylocationp)[
+{
+  /* Pacify ``unused variable'' warnings.  */
+  (void) yyvaluep;
+  (void) yylocationp;
+
+  cdebug_ << (yytype < ntokens_ ? "token" : "nterm")
+         << ' ' << name_[yytype] << " (";
+  switch (yytype)
+    {
+]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
+[      default:
+        break;
+    }
+  cdebug_ << ')';
+}
+]])
+
+
 # b4_cxx_destruct_def(IGNORED-ARGUMENTS)
 # --------------------------------------
 # Declare the destruct_ method.
@@ -122,6 +151,7 @@ m4_define([b4_cxx_destruct_def],
 yy::b4_parser_class_name::destruct_ (int yytype, SemanticType *yyvaluep, LocationType *yylocationp)[]dnl
 ])
 
+
 # We do want M4 expansion after # for CPP macros.
 m4_changecom()
 m4_divert(0)dnl
@@ -245,6 +275,12 @@ namespace yy
     virtual void error_ ();
     virtual void print_ ();
     virtual void report_syntax_error_ ();
+#if YYDEBUG
+    virtual void symprint_ (int yytype,
+                           const SemanticType *yyvaluep,
+                           const LocationType *yylocationp);
+#endif /* ! YYDEBUG */
+
 
     /* Stacks.  */
     StateStack    state_stack_;
@@ -363,6 +399,9 @@ do {                                        \
 #define YYABORT                goto yyabortlab
 #define YYERROR                goto yyerrorlab
 
+#if YYDEBUG
+]b4_yysymprint_generate([b4_cxx_symprint_def])[
+#endif /* ! YYDEBUG */
 ]b4_yydestruct_generate([b4_cxx_destruct_def])[
 
 int
@@ -421,15 +460,14 @@ yy::]b4_parser_class_name[::parse ()
 #if YYDEBUG
       if (debug_)
        {
-         YYCDEBUG << "Next token is " << looka_
-                << " (" << name_[ilooka_];
-         print_ ();
-         YYCDEBUG << ')' << std::endl;
+         cdebug_ << "Next token is ";
+         symprint_ (ilooka_, &value, &location);
+          cdebug_ << std::endl;
        }
 #endif
     }
 
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
+  /* If the proper action on seeing token ILOOKA_ is to reduce or to
      detect an error, take that action.  */
   n_ += ilooka_;
   if (n_ < 0 || last_ < n_ || check_[n_] != ilooka_)
@@ -565,8 +603,17 @@ b4_syncline([@oline@], [@ofile@])[
                  location_stack_.pop ();
                 if (state_stack_.height () == 1)
                   YYABORT;
-//              YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
-                 destruct_ (stos_[state_stack_[0]],
+#if YYDEBUG
+                 if (debug_)
+                   {
+                     cdebug_ << "Error: popping ";
+                     symprint_ (stos_[state_stack_[0]],
+                                &semantic_stack_[0],
+                               &location_stack_[0]);
+                     cdebug_ << std::endl;
+                   }
+#endif // YYDEBUG
+                destruct_ (stos_[state_stack_[0]],
                             &semantic_stack_[0],
                             &location_stack_[0]);
               }
@@ -574,8 +621,12 @@ b4_syncline([@oline@], [@ofile@])[
       else
         {
 #if YYDEBUG
-          YYCDEBUG << "Discarding token " << looka_
-                  << " (" << name_[ilooka_] << ")." << std::endl;
+          if (debug_)
+            {
+              cdebug_ << "Error: discarding ";
+              symprint_ (ilooka_, &value, &location);
+              cdebug_ << std::endl;
+            }
 #endif
           destruct_ (ilooka_, &value, &location);
           looka_ = empty_;
@@ -633,22 +684,9 @@ yyerrlab1:
 #if YYDEBUG
       if (debug_)
        {
-         if (stos_[state_] < ntokens_)
-           {
-             YYCDEBUG << "Error: popping token "
-                    << token_number_[stos_[state_]]
-                    << " (" << name_[stos_[state_]];
-# ifdef YYPRINT
-             YYPRINT (stderr, token_number_[stos_[state_]],
-                      semantic_stack_.top ());
-# endif
-             YYCDEBUG << ')' << std::endl;
-           }
-         else
-           {
-             YYCDEBUG << "Error: popping nonterminal ("
-                    << name_[stos_[state_]] << ')' << std::endl;
-           }
+          cdebug_ << "Error: popping ";
+          symprint_ (stos_[state_], &semantic_stack_[0], &location_stack_[0]);
+          cdebug_ << std::endl;
        }
 #endif
       destruct_ (stos_[state_], &semantic_stack_[0], &location_stack_[0]);
@@ -819,7 +857,7 @@ yy::]b4_parser_class_name[::r2_[] =
 
 #if YYDEBUG || YYERROR_VERBOSE
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+   First, the terminals, then, starting at NTOKENS_, nonterminals. */
 const char*
 const yy::]b4_parser_class_name[::name_[] =
 {
index 1e8d62f..e8124e9 100644 (file)
@@ -342,8 +342,12 @@ m4_ifval([$6], , [#define YYSTYPE int])])
 
 ]m4_ifval([$6], [%type <ival> 'x' ';' thing line input])[
 
-%printer { fprintf (yyoutput, "%d@%d-%d", $$, RANGE (@$)); }
-   input line thing 'x'
+%printer
+  {
+    ]AT_LALR1_CC_IF([cdebug_ << @$ << ": " << $$;],
+                    [fprintf (yyoutput, "%d@%d-%d", $$, RANGE (@$))])[;
+  }
+  input line thing 'x'
 
 %destructor
   { printf ("Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }