bison-patches
[Top][All Lists]
Advanced

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

[PATCH 5/6] lr0: more debug traces


From: Akim Demaille
Subject: [PATCH 5/6] lr0: more debug traces
Date: Sun, 9 Jun 2019 11:13:11 +0200

* src/lr0.c (kernel_check): New.
(new_itemsets, save_reductions): Add traces.
---
 src/lr0.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/src/lr0.c b/src/lr0.c
index 8d6a824b..58df9d7d 100644
--- a/src/lr0.c
+++ b/src/lr0.c
@@ -158,6 +158,14 @@ kernel_print (FILE *out)
       }
 }
 
+/* Make sure the kernel is in sane state. */
+static void
+kernel_check (void)
+{
+  for (symbol_number i = 0; i < nsyms - 1; ++i)
+    assert (kernel_base[i] + kernel_size[i] <= kernel_base[i + 1]);
+}
+
 static void
 allocate_storage (void)
 {
@@ -209,9 +217,21 @@ new_itemsets (state *s)
 
   bitset_zero (shift_symbol);
 
+  if (trace_flag & trace_automaton)
+    {
+      fprintf (stderr, "initial kernel:\n");
+      kernel_print (stderr);
+    }
+
   for (size_t i = 0; i < nitemset; ++i)
     if (item_number_is_symbol_number (ritem[itemset[i]]))
       {
+        if (trace_flag & trace_automaton)
+          {
+            fputs ("working on: ", stderr);
+            item_print (ritem + itemset[i], NULL, stderr);
+            fputc ('\n', stderr);
+          }
         symbol_number sym = item_number_as_symbol_number (ritem[itemset[i]]);
         bitset_set (shift_symbol, sym);
         kernel_base[sym][kernel_size[sym]] = itemset[i] + 1;
@@ -220,9 +240,11 @@ new_itemsets (state *s)
 
   if (trace_flag & trace_automaton)
     {
+      fprintf (stderr, "final kernel:\n");
       kernel_print (stderr);
       fprintf (stderr, "new_itemsets: end: state = %d\n\n", s->number);
     }
+  kernel_check ();
 }
 
 
@@ -309,6 +331,17 @@ save_reductions (state *s)
         }
     }
 
+  if (trace_flag & trace_automaton)
+    {
+      fprintf (stderr, "reduction[%d] = {\n", s->number);
+      for (int i = 0; i < count; ++i)
+        {
+          rule_print (redset[i], NULL, stderr);
+          fputc ('\n', stderr);
+        }
+      fputs ("}\n", stderr);
+    }
+
   /* Make a reductions structure and copy the data into it.  */
   state_reductions_set (s, count, redset);
 }
-- 
2.21.0




reply via email to

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