bison-patches
[Top][All Lists]
Advanced

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

20-fyi-eof-is-valid.patch


From: Akim Demaille
Subject: 20-fyi-eof-is-valid.patch
Date: Thu, 27 Dec 2001 19:02:25 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        Try to make the use of the eoftoken valid.  Given that its value
        is 0 which was also used as a sentinel in ritem, (i) make sure >= 0
        is used instead of > 0 where appropriate, (ii), depend upon nritems
        instead of the 0-sentinel.

        * src/gram.h, src/gram.c (nritems): New.
        Expected to be duplication of nitems, but for the time being...
        * src/reader.c (packgram): Assert nritems and nitems are equal.
        * src/LR0.c (allocate_itemsets, new_itemsets): Adjust.
        * src/closure.c (print_closure, print_fderives): Likewise.
        * src/gram.c (ritem_print): Likewise.
        * src/print.c (print_core, print_grammar): Likewise.
        * src/print_graph.c: Likewise.

Index: src/LR0.c
--- src/LR0.c Thu, 27 Dec 2001 11:15:14 +0100 akim
+++ src/LR0.c Thu, 27 Dec 2001 15:35:45 +0100 akim
@@ -68,8 +68,8 @@
   int count = 0;
   short *symbol_count = XCALLOC (short, nsyms + nuseless_nonterminals);

-  for (i = 0; ritem[i]; ++i)
-    if (ritem[i] > 0)
+  for (i = 0; i < nritems; ++i)
+    if (ritem[i] >= 0)
       {
        count++;
        symbol_count[ritem[i]]++;
@@ -152,7 +152,7 @@
   for (i = 0; i < nitemset; ++i)
     {
       int symbol = ritem[itemset[i]];
-      if (symbol > 0)
+      if (symbol >= 0)
        {
          if (!kernel_size[symbol])
            {
Index: src/closure.c
--- src/closure.c Tue, 11 Dec 2001 20:43:12 +0100 akim
+++ src/closure.c Thu, 27 Dec 2001 15:35:09 +0100 akim
@@ -60,7 +60,7 @@
     {
       short *rp;
       fprintf (stderr, "  %2d: .", array[i]);
-      for (rp = &ritem[array[i]]; *rp > 0; ++rp)
+      for (rp = &ritem[array[i]]; *rp >= 0; ++rp)
        fprintf (stderr, " %s", tags[*rp]);
       fprintf (stderr, "  (rule %d)\n", -*rp);
     }
@@ -101,7 +101,7 @@
          {
            short *rhsp;
            fprintf (stderr, "\t\t%d:", j);
-           for (rhsp = ritem + rule_table[j].rhs; *rhsp > 0; ++rhsp)
+           for (rhsp = ritem + rule_table[j].rhs; *rhsp >= 0; ++rhsp)
              fprintf (stderr, " %s", tags[*rhsp]);
            fputc ('\n', stderr);
          }
Index: src/gram.c
--- src/gram.c Tue, 04 Dec 2001 14:02:26 +0100 akim
+++ src/gram.c Thu, 27 Dec 2001 15:26:46 +0100 akim
@@ -32,6 +32,8 @@
 int nvars;

 short *ritem = NULL;
+int nritems;
+
 rule_t *rule_table = NULL;
 short *rprec = NULL;
 short *rprecsym = NULL;
@@ -60,8 +62,8 @@
 {
   int i;
   fputs ("RITEM\n", out);
-  for (i = 0; ritem[i]; ++i)
-    if (ritem[i] > 0)
+  for (i = 0; i < nritems; ++i)
+    if (ritem[i] >= 0)
       fprintf (out, "  %s", tags[ritem[i]]);
     else
       fprintf (out, "  (rule %d)\n", -ritem[i]);
Index: src/gram.h
--- src/gram.h Wed, 26 Dec 2001 19:05:39 +0100 akim
+++ src/gram.h Thu, 27 Dec 2001 15:27:05 +0100 akim
@@ -98,6 +98,7 @@
 extern int nvars;

 extern short *ritem;
+extern int nritems;

 extern short *sprec;
 extern short *sassoc;
Index: src/print.c
--- src/print.c Thu, 27 Dec 2001 14:58:13 +0100 akim
+++ src/print.c Thu, 27 Dec 2001 15:39:54 +0100 akim
@@ -88,7 +88,7 @@

          sp1 = sp = ritem + sitems[i];

-         while (*sp > 0)
+         while (*sp >= 0)
            sp++;

          rule = -(*sp);
@@ -99,7 +99,7 @@

          fputc ('.', out);

-         for (/* Nothing */; *sp > 0; ++sp)
+         for (/* Nothing */; *sp >= 0; ++sp)
            fprintf (out, " %s", escape (tags[*sp]));

          fprintf (out, _("   (rule %d)"), rule);
@@ -378,8 +378,8 @@
        fprintf (out, _("  %3d %3d %s ->"),
                 i, rule_table[i].line, escape (tags[rule_table[i].lhs]));
        rule = &ritem[rule_table[i].rhs];
-       if (*rule > 0)
-         while (*rule > 0)
+       if (*rule >= 0)
+         while (*rule >= 0)
            fprintf (out, " %s", escape (tags[*rule++]));
        else
          fprintf (out, " /* %s */", _("empty"));
@@ -400,7 +400,7 @@
        sprintf (buffer, " (%d)", i);

        for (j = 1; j <= nrules; j++)
-         for (rule = &ritem[rule_table[j].rhs]; *rule > 0; rule++)
+         for (rule = &ritem[rule_table[j].rhs]; *rule >= 0; rule++)
            if (*rule == token_translations[i])
              {
                END_TEST (65);
@@ -421,7 +421,7 @@
        {
          if (rule_table[j].lhs == i)
            left_count++;
-         for (rule = &ritem[rule_table[j].rhs]; *rule > 0; rule++)
+         for (rule = &ritem[rule_table[j].rhs]; *rule >= 0; rule++)
            if (*rule == i)
              {
                right_count++;
@@ -456,7 +456,7 @@
          sprintf (buffer + strlen (buffer), _(" on right:"));
          for (j = 1; j <= nrules; j++)
            {
-             for (rule = &ritem[rule_table[j].rhs]; *rule > 0; rule++)
+             for (rule = &ritem[rule_table[j].rhs]; *rule >= 0; rule++)
                if (*rule == i)
                  {
                    END_TEST (65);
Index: src/reader.c
--- src/reader.c Thu, 27 Dec 2001 14:58:13 +0100 akim
+++ src/reader.c Thu, 27 Dec 2001 15:39:54 +0100 akim
@@ -1764,6 +1764,8 @@
     }

   ritem[itemno] = 0;
+  nritems = itemno;
+  assert (nritems == nitems);

   if (trace_flag)
     ritem_print (stderr);
Index: src/output.c
--- src/output.c Thu, 27 Dec 2001 11:15:14 +0100 akim
+++ src/output.c Thu, 27 Dec 2001 16:14:10 +0100 akim
@@ -204,7 +204,7 @@
     yyrhs = XMALLOC (short, yyrhs_size);

     for (sp = ritem + 1, i = 1; *sp; ++sp, ++i)
-      yyrhs[i] = *sp > 0 ? *sp : 0;
+      yyrhs[i] = *sp >= 0 ? *sp : 0;

     output_table_data (&format_obstack, yyrhs,
                       ritem[0], 1, yyrhs_size);
Index: src/print_graph.c
--- src/print_graph.c Thu, 27 Dec 2001 11:44:04 +0100 akim
+++ src/print_graph.c Thu, 27 Dec 2001 16:30:58 +0100 akim
@@ -66,7 +66,7 @@

       sp1 = sp = ritem + sitems[i];

-      while (*sp > 0)
+      while (*sp >= 0)
        sp++;

       rule = -(*sp);
@@ -81,7 +81,7 @@

       obstack_1grow (node_obstack, '.');

-      for (/* Nothing */; *sp > 0; ++sp)
+      for (/* Nothing */; *sp >= 0; ++sp)
        obstack_fgrow1 (node_obstack, " %s", escape (tags[*sp]));
     }
 }



reply via email to

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