* src/lalr.c (lookaheads_print): New.
authorAkim Demaille <akim@epita.fr>
Sat, 29 Dec 2001 14:16:16 +0000 (14:16 +0000)
committerAkim Demaille <akim@epita.fr>
Sat, 29 Dec 2001 14:16:16 +0000 (14:16 +0000)
(lalr): Call it when --trace-flag.
* tests/sets.at (Nullable): Adjust: when tracing, the lookaheads
are dumped.

ChangeLog
src/lalr.c
tests/sets.at

index e16dafb..e335f05 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2001-12-29  Akim Demaille  <akim@epita.fr>
 
+       * src/lalr.c (lookaheads_print): New.
+       (lalr): Call it when --trace-flag.
+       * tests/sets.at (Nullable): Adjust: when tracing, the lookaheads
+       are dumped.
+
+       
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
        * src/derives.c (print_derives): Be sure to use `>= 0', not `> 0',
        when walking through ritem, even via rule->rhs.
        * src/reduce.c (dump_grammar, useful_production, reduce_output)
index 660088c..36a8607 100644 (file)
@@ -24,6 +24,7 @@
    tokens they accept.  */
 
 #include "system.h"
+#include "reader.h"
 #include "types.h"
 #include "LR0.h"
 #include "gram.h"
@@ -546,6 +547,31 @@ initialize_lookaheads (void)
     }
 }
 
+
+/*---------------------------------------.
+| Output the lookaheads for each state.  |
+`---------------------------------------*/
+
+static void
+lookaheads_print (FILE *out)
+{
+  int i, j, k;
+  fprintf (out, "Lookaheads: BEGIN\n");
+  for (i = 0; i < nstates; ++i)
+    {
+      fprintf (out, "State %d: %d lookaheads\n",
+              i, state_table[i]->nlookaheads);
+
+      for (j = 0; j < state_table[i]->nlookaheads; ++j)
+       for (k = 0; k < ntokens; ++k)
+         if (BITISSET (LA (state_table[i]->lookaheadsp + j), j))
+           fprintf (out, "   on %d (%s) -> rule %d\n",
+                    k, tags[k],
+                    -LAruleno[state_table[i]->lookaheadsp + j] - 1);
+    }
+  fprintf (out, "Lookaheads: END\n");
+}
+
 void
 lalr (void)
 {
@@ -558,4 +584,7 @@ lalr (void)
   build_relations ();
   compute_FOLLOWS ();
   compute_lookaheads ();
+
+  if (trace_flag)
+    lookaheads_print (stderr);
 }
index 61bfd62..f1c16dc 100644 (file)
@@ -157,6 +157,12 @@ transpose: input
 transpose: output
   0:
 
+Lookaheads: BEGIN
+State 0: 0 lookaheads
+State 1: 0 lookaheads
+State 2: 0 lookaheads
+State 3: 0 lookaheads
+Lookaheads: END
 ]])
 
 AT_CLEANUP