]> git.saurik.com Git - bison.git/commitdiff
* src/reduce.c (dump_grammar): Move to...
authorAkim Demaille <akim@epita.fr>
Mon, 22 Apr 2002 08:23:07 +0000 (08:23 +0000)
committerAkim Demaille <akim@epita.fr>
Mon, 22 Apr 2002 08:23:07 +0000 (08:23 +0000)
* src/gram.h, src/gram.c (grammar_dump): here.
Be sure to separate long item numbers.
Don't read the members of a rule's prec if its nil.

ChangeLog
src/gram.c
src/gram.h
src/reduce.c
src/reduce.h

index 7295212955e26e34ec1305af66cbfcbb508693db..47ab122146d7d3f8aebd3f0d6ac8d0aae0b59d72 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+       * src/reduce.c (dump_grammar): Move to...
+       * src/gram.h, src/gram.c (grammar_dump): here.
+       Be sure to separate long item numbers.
+       Don't read the members of a rule's prec if its nil.
+
 2002-04-22  Akim Demaille  <akim@epita.fr>
 
        * src/output.c (table_size, table_grow): New.
index 1120b89784052d47955509f7df7d3e5699b35277..e6fb7089b08aa0819e6446dd019836f5728ec1c7 100644 (file)
@@ -21,8 +21,9 @@
 
 #include "system.h"
 #include "quotearg.h"
-#include "gram.h"
 #include "symtab.h"
+#include "gram.h"
+#include "reduce.h"
 #include "reader.h"
 
 /* comments for these variables are in gram.h  */
@@ -102,3 +103,61 @@ ritem_longest_rhs (void)
 
   return max;
 }
+
+
+/*-------------------.
+| Dump the grammar.  |
+`-------------------*/
+
+void
+grammar_dump (FILE *out, const char *title)
+{
+  int i;
+  item_number_t *r;
+
+  fprintf (out, "%s\n\n", title);
+  fprintf (out,
+          "ntokens = %d, nvars = %d, nsyms = %d, nrules = %d, nritems = %d\n\n",
+          ntokens, nvars, nsyms, nrules, nritems);
+  fprintf (out, "Variables\n---------\n\n");
+  fprintf (out, "Value  Sprec  Sassoc  Tag\n");
+  for (i = ntokens; i < nsyms; i++)
+    fprintf (out, "%5d  %5d   %5d  %s\n",
+            i,
+            symbols[i]->prec, symbols[i]->assoc,
+            quotearg_style (escape_quoting_style, symbols[i]->tag));
+  fprintf (out, "\n\n");
+  fprintf (out, "Rules\n-----\n\n");
+  fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n");
+  for (i = 1; i < nrules + nuseless_productions + 1; i++)
+    {
+      int rhs_count = 0;
+      /* Find the last RHS index in ritems. */
+      for (r = rules[i].rhs; *r >= 0; ++r)
+       ++rhs_count;
+      fprintf (out, "%3d (%2d, %2d, %2d, %2d-%2d)   %2d ->",
+              i - 1,
+              rules[i].prec ? rules[i].prec->prec : 0,
+              rules[i].prec ? rules[i].prec->assoc : 0,
+              rules[i].useful,
+              rules[i].rhs - ritem,
+              rules[i].rhs - ritem + rhs_count - 1,
+              rules[i].lhs->number);
+      /* Dumped the RHS. */
+      for (r = rules[i].rhs; *r >= 0; r++)
+       fprintf (out, " %3d", *r);
+      fprintf (out, "  [%d]\n", -(*r) - 1);
+    }
+  fprintf (out, "\n\n");
+  fprintf (out, "Rules interpreted\n-----------------\n\n");
+  for (i = 1; i < nrules + nuseless_productions + 1; i++)
+    {
+      fprintf (out, "%-5d  %s :",
+              i, quotearg_style (escape_quoting_style, rules[i].lhs->tag));
+      for (r = rules[i].rhs; *r >= 0; r++)
+       fprintf (out, " %s",
+                quotearg_style (escape_quoting_style, symbols[*r]->tag));
+      fputc ('\n', out);
+    }
+  fprintf (out, "\n\n");
+}
index cf21e48f9fb25a09db6efe94858b41276aa31db8..f143b4ee50e6872c85ef8156d8a572a1900568fa 100644 (file)
@@ -186,4 +186,7 @@ void ritem_print PARAMS ((FILE *out));
 /* Return the size of the longest rule RHS.  */
 size_t ritem_longest_rhs PARAMS ((void));
 
+/* Dump the grammar. */
+void grammar_dump PARAMS ((FILE *out, const char *title));
+
 #endif /* !GRAM_H_ */
index c8a8fe710bdf6fb3b41b717e8007a72341664d14..61ad2b2e0657046058ae292827697f888a28ad96 100644 (file)
@@ -51,7 +51,7 @@ static bitset V;
 static bitset V1;
 
 static int nuseful_productions;
-static int nuseless_productions;
+int nuseless_productions;
 static int nuseful_nonterminals;
 int nuseless_nonterminals;
 \f
@@ -371,58 +371,7 @@ reduce_output (FILE *out)
     }
 }
 \f
-static void
-dump_grammar (FILE *out)
-{
-  int i;
-  item_number_t *r;
 
-  fprintf (out, "REDUCED GRAMMAR\n\n");
-  fprintf (out,
-          "ntokens = %d, nvars = %d, nsyms = %d, nrules = %d, nritems = %d\n\n",
-          ntokens, nvars, nsyms, nrules, nritems);
-  fprintf (out, "Variables\n---------\n\n");
-  fprintf (out, "Value  Sprec  Sassoc  Tag\n");
-  for (i = ntokens; i < nsyms; i++)
-    fprintf (out, "%5d  %5d   %5d  %s\n",
-            i,
-            symbols[i]->prec, symbols[i]->assoc,
-            quotearg_style (escape_quoting_style, symbols[i]->tag));
-  fprintf (out, "\n\n");
-  fprintf (out, "Rules\n-----\n\n");
-  fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n");
-  for (i = 1; i < nrules + nuseless_productions + 1; i++)
-    {
-      int rhs_count = 0;
-      /* Find the last RHS index in ritems. */
-      for (r = rules[i].rhs; *r >= 0; ++r)
-       ++rhs_count;
-      fprintf (out, "%3d (%2d, %2d, %2d, %2d-%2d)   %2d ->",
-              i - 1,
-              rules[i].prec->prec,
-              rules[i].prec->assoc,
-              rules[i].useful,
-              rules[i].rhs - ritem,
-              rules[i].rhs - ritem + rhs_count - 1,
-              rules[i].lhs->number);
-      /* Dumped the RHS. */
-      for (r = rules[i].rhs; *r >= 0; r++)
-       fprintf (out, "%3d", *r);
-      fprintf (out, "  [%d]\n", -(*r) - 1);
-    }
-  fprintf (out, "\n\n");
-  fprintf (out, "Rules interpreted\n-----------------\n\n");
-  for (i = 1; i < nrules + nuseless_productions + 1; i++)
-    {
-      fprintf (out, "%-5d  %s :",
-              i, quotearg_style (escape_quoting_style, rules[i].lhs->tag));
-      for (r = rules[i].rhs; *r >= 0; r++)
-       fprintf (out, " %s",
-                quotearg_style (escape_quoting_style, symbols[*r]->tag));
-      fputc ('\n', out);
-    }
-  fprintf (out, "\n\n");
-}
 
 
 
@@ -494,7 +443,7 @@ reduce_grammar (void)
 
   if (trace_flag)
     {
-      dump_grammar (stderr);
+      grammar_dump (stderr, "Reduced Grammar");
 
       fprintf (stderr, "reduced %s defines %d terminals, %d nonterminals\
 , and %d productions.\n",
index e43f29ce06f71098365ccfa312b743edf9293cf6..c7b3cae834ca2046460e2c6481c51b82946e98b5 100644 (file)
@@ -1,5 +1,5 @@
 /* Grammar reduction for Bison.
-   Copyright 2000, 2001  Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001, 2002  Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -26,4 +26,5 @@ void reduce_output PARAMS ((FILE *out));
 void reduce_free PARAMS ((void));
 
 extern int nuseless_nonterminals;
+extern int nuseless_productions;
 #endif /* !REDUCE_H_ */