bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03-traces-alike.patch


From: Akim Demaille
Subject: 03-traces-alike.patch
Date: Sat, 16 Nov 2002 13:31:27 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        Augment the similarity between GLR and LALR traces.
        
        * data/yacc.c (yy_stack_print, YY_STACK_PRINT, yy_reduce_print)
        (YY_REDUCE_PRINT): New.
        (yyparse): Use them.
        * data/glr.c (yy_reduce_print): Use YYFPRINTF, no need for
        YYDPRINT here.
        (yyglrReduce, yyrecoverParseError, yyparse): Don't report the
        state reached after the reduction/recovery, since...
        (yyparse, yyprocessOneStack): Report the state we are entering in.
        
        
Index: data/yacc.c
--- data/yacc.c Sat, 16 Nov 2002 13:08:33 +0100 akim
+++ data/yacc.c Sat, 16 Nov 2002 13:24:21 +0100 akim
@@ -547,6 +547,50 @@ m4_define([b4_rhs_location],
     }                                                          \
 } while (0)
 
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (cinluded).                                                   |
+`------------------------------------------------------------------*/
+
+]b4_c_function_def([yy_stack_print], [static void],
+                   [[short *bottom], [bottom]],
+                   [[short *top],    [top]])[
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (/* Nothing. */; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+]b4_c_function_def([yy_reduce_print], [static void],
+                   [[int yyrule], [yyrule]])[
+{
+  int yyi;
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d), ",
+             yyrule - 1, yyrline[yyrule]);
+  /* Print the symbols being reduced, and their result.  */
+  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (Rule);            \
+} while (0)
+
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
 int yydebug;
@@ -554,8 +598,11 @@ m4_define([b4_rhs_location],
 # define YYDPRINTF(Args)
 # define YYDSYMPRINT(Args)
 # define YYDSYMPRINTF(Title, Token, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
 
+
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
 #ifndef        YYINITDEPTH
 # define YYINITDEPTH ]b4_stack_depth_init[
@@ -936,23 +983,7 @@ yyreduce:
 ]b4_location_if(
 [  /* Default location. */
   YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);])[
-
-#if YYDEBUG
-  /* We have to keep this `#if YYDEBUG', since we use variables which
-     are defined only if `YYDEBUG' is set.  */
-  if (yydebug)
-    {
-      int yyi;
-
-      YYFPRINTF (stderr, "Reducing by rule %d (line %d), ",
-                yyn - 1, yyrline[yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (yyi = yyprhs[yyn]; 0 <= yyrhs[yyi]; yyi++)
-       YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
-      YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
+  YY_REDUCE_PRINT (yyn);
   switch (yyn)
     ]{
       b4_actions
@@ -965,16 +996,7 @@ yyreduce:
   yyssp -= yylen;
 ]b4_location_if([  yylsp -= yylen;])[
 
-#if YYDEBUG
-  if (yydebug)
-    {
-      short *yyssp1 = yyss - 1;
-      YYFPRINTF (stderr, "state stack now");
-      while (yyssp1 != yyssp)
-       YYFPRINTF (stderr, " %d", *++yyssp1);
-      YYFPRINTF (stderr, "\n");
-    }
-#endif
+  YY_STACK_PRINT (yyss, yyssp);
 
   *++yyvsp = yyval;
 ]b4_location_if([  *++yylsp = yyloc;])[
@@ -1111,17 +1133,7 @@ yyerrlab1:
       yyvsp--;
       yystate = *--yyssp;
 ]b4_location_if([      yylsp--;])[
-
-#if YYDEBUG
-      if (yydebug)
-       {
-         short *yyssp1 = yyss - 1;
-         YYFPRINTF (stderr, "Error: state stack now");
-         while (yyssp1 != yyssp)
-           YYFPRINTF (stderr, " %d", *++yyssp1);
-         YYFPRINTF (stderr, "\n");
-       }
-#endif
+      YY_STACK_PRINT (yyss, yyssp);
     }
 
   if (yyn == YYFINAL)
Index: data/glr.c
--- data/glr.c Sat, 16 Nov 2002 09:33:15 +0100 akim
+++ data/glr.c Sat, 16 Nov 2002 13:21:53 +0100 akim
@@ -1106,8 +1106,8 @@ m4_define([b4_rhs_location],
 yy_reduce_print (size_t yyk, yyRuleNum yyrule)
 {
   int yyi;
-  YYDPRINTF ((stderr, "Reducing stack %d by rule %d (line %d), ",
-             yyk, yyrule - 1, yyrline[yyrule]));
+  YYFPRINTF (stderr, "Reducing stack %d by rule %d (line %d), ",
+            yyk, yyrule - 1, yyrline[yyrule]);
   /* Print the symbols being reduced, and their result.  */
   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
     YYFPRINTF (stderr, "%s ", yytokenName (yyrhs[yyi]));
@@ -1143,8 +1143,6 @@ m4_define([b4_rhs_location],
                  yyLRgotoState (yystack->yytops.yystates[yyk]->yylrState,
                                 yylhsNonterm (yyrule)),
                  yyposn, yysval, &yyloc]b4_user_args[);
-      YYDPRINTF ((stderr, "Stack %d entering state %d\n",
-                 yyk, yystack->yytops.yystates[yyk]->yylrState));
     }
   else
     {
@@ -1512,6 +1510,7 @@ m4_define([b4_rhs_location],
   while (yystack->yytops.yystates[yyk] != NULL)
     {
       yyStateNum yystate = yystack->yytops.yystates[yyk]->yylrState;
+      YYDPRINTF ((stderr, "Stack %d Entering state %d\n", yyk, yystate));
 
       assert (yystate != YYFINAL);
       if (yyisDefaultedState (yystate))
@@ -1711,8 +1710,6 @@ m4_define([b4_rhs_location],
              YYDPRINTF ((stderr, "Shifting error token, "));
              yyglrShift (yystack, 0, yytable[yyj],
                          yys->yyposn, *yylvalp, yyllocp]b4_user_args[);
-             YYDPRINTF ((stderr, "Entering state %d\n",
-                         yystack->yytops.yystates[0]->yylrState));
              break;
            }
        }
@@ -1783,7 +1780,6 @@ m4_define([b4_rhs_location],
       /* For efficiency, we have two loops, the first of which is
         specialized to deterministic operation (single stack, no
         potential ambiguity).  */
-
       /* Standard mode */
       while (yytrue)
        {
@@ -1792,6 +1788,7 @@ m4_define([b4_rhs_location],
          const short* yyconflicts;
 
          yyStateNum yystate = yystack.yytops.yystates[0]->yylrState;
+          YYDPRINTF ((stderr, "Entering state %d\n", yystate));
          if (yystate == YYFINAL)
            goto yyDone;
          if (yyisDefaultedState (yystate))
@@ -1827,8 +1824,6 @@ m4_define([b4_rhs_location],
                              yylval, yyllocp]b4_user_args[);
                  if (0 < yystack.yyerrState)
                    yystack.yyerrState -= 1;
-                 YYDPRINTF ((stderr, "Entering state %d\n",
-                             yystack.yytops.yystates[0]->yylrState));
                }
              else if (yyisErrorAction (yyaction))
                {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]