bison-patches
[Top][All Lists]
Advanced

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

09-fyi-lhs-bucket.patch


From: Akim Demaille
Subject: 09-fyi-lhs-bucket.patch
Date: Sun, 07 Apr 2002 17:23:30 +0200

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        * src/gram.h (rule_t): `lhs' is now a pointer to the symbol's
        bucket.
        Adjust all dependencies.
        * src/reduce.c (nonterminals_reduce): Don't forget to renumber the
        `number' of the buckets too.
        * src/gram.h: Include `symtab.h'.
        (associativity): Move to...
        * src/symtab.h: here.
        No longer include `gram.h'.
        
        
Index: src/derives.c
--- src/derives.c Sat, 23 Mar 2002 12:44:36 +0100 akim
+++ src/derives.c Mon, 25 Mar 2002 21:31:49 +0100 akim
@@ -68,14 +68,13 @@
 
   p = delts;
   for (i = nrules; i > 0; i--)
-    if (rules[i].useful)
-      {
-       int lhs = rules[i].lhs;
-       p->next = dset[lhs];
-       p->value = i;
-       dset[lhs] = p;
-       p++;
-      }
+    {
+      int lhs = rules[i].lhs->number;
+      p->next = dset[lhs];
+      p->value = i;
+      dset[lhs] = p;
+      p++;
+    }
 
   derives = XCALLOC (short *, nvars) - ntokens;
   q = XCALLOC (short, nvars + nrules);
Index: src/gram.h
--- src/gram.h Mon, 25 Mar 2002 20:34:56 +0100 akim
+++ src/gram.h Mon, 25 Mar 2002 20:37:31 +0100 akim
@@ -98,6 +98,7 @@
 
    Associativities are recorded similarly in SYMBOLS[I]->assoc.  */
 
+#include "symtab.h"
 
 #define        ISTOKEN(s)      ((s) < ntokens)
 #define        ISVAR(s)        ((s) >= ntokens)
@@ -113,22 +114,13 @@
 
 extern int start_symbol;
 
-/* Associativity values for tokens and rules.  */
-typedef enum
-{
-  right_assoc,
-  left_assoc,
-  non_assoc
-} associativity;
-
-
 typedef struct rule_s
 {
   /* The number of the rule in the source.  It is usually the index in
      RULES too, except if there are useless rules.  */
   short number;
 
-  short lhs;
+  bucket *lhs;
   short *rhs;
   short prec;
   short precsym;
Index: src/nullable.c
--- src/nullable.c Sat, 23 Mar 2002 12:44:36 +0100 akim
+++ src/nullable.c Mon, 25 Mar 2002 20:41:01 +0100 akim
@@ -96,10 +96,10 @@
          {
            /* This rule has an empty RHS. */
            assert (rules[ruleno].rhs[0] == -ruleno);
-           if (rules[ruleno].useful && !nullable[rules[ruleno].lhs])
+           if (rules[ruleno].useful && !nullable[rules[ruleno].lhs->number])
              {
-               nullable[rules[ruleno].lhs] = 1;
-               *s2++ = rules[ruleno].lhs;
+               nullable[rules[ruleno].lhs->number] = 1;
+               *s2++ = rules[ruleno].lhs->number;
              }
          }
       }
@@ -109,10 +109,10 @@
       {
        ruleno = p->value;
        if (--rcount[ruleno] == 0)
-         if (rules[ruleno].useful && !nullable[rules[ruleno].lhs])
+         if (rules[ruleno].useful && !nullable[rules[ruleno].lhs->number])
            {
-             nullable[rules[ruleno].lhs] = 1;
-             *s2++ = rules[ruleno].lhs;
+             nullable[rules[ruleno].lhs->number] = 1;
+             *s2++ = rules[ruleno].lhs->number;
            }
       }
 
Index: src/options.c
--- src/options.c Fri, 28 Dec 2001 16:59:23 +0100 akim
+++ src/options.c Mon, 25 Mar 2002 20:39:20 +0100 akim
@@ -1,5 +1,5 @@
 /* Concentrate all options use in bison,
-   Copyright 2001 Free Software Foundation, Inc.
+   Copyright 2001, 2002 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -23,6 +23,7 @@
 #include "files.h"
 #include "getargs.h"
 #include "symtab.h"
+#include "gram.h"
 #include "lex.h"
 #include "output.h"
 #include "options.h"
Index: src/output.c
--- src/output.c Mon, 25 Mar 2002 21:28:12 +0100 akim
+++ src/output.c Mon, 25 Mar 2002 21:30:26 +0100 akim
@@ -300,7 +300,7 @@
   {
     short *values = XCALLOC (short, nrules + 1);
     for (i = 1; i < nrules + 1; ++i)
-      values[i] = rules[i].lhs;
+      values[i] = rules[i].lhs->number;
     output_table_data (&format_obstack, values,
                       0, 1, nrules + 1);
     muscle_insert ("r1", obstack_finish (&format_obstack));
Index: src/print.c
--- src/print.c Mon, 25 Mar 2002 20:34:56 +0100 akim
+++ src/print.c Mon, 25 Mar 2002 20:41:00 +0100 akim
@@ -94,7 +94,7 @@
            sp++;
 
          rule = -(*sp);
-         fprintf (out, "    %s  ->  ", escape (symbols[rules[rule].lhs]->tag));
+         fprintf (out, "    %s  ->  ", escape (rules[rule].lhs->tag));
 
          for (sp = rules[rule].rhs; sp < sp1; sp++)
            fprintf (out, "%s ", escape (symbols[*sp]->tag));
@@ -189,7 +189,7 @@
   if (state->consistent)
     {
       int rule = redp->rules[0];
-      int symbol = rules[rule].lhs;
+      int symbol = rules[rule].lhs->number;
       fprintf (out, _("    $default\treduce using rule %d (%s)\n\n"),
               rule - 1, escape (symbols[symbol]->tag));
       return;
@@ -221,10 +221,10 @@
        if (bitset_test (lookaheadset, i))
          fprintf (out, _("    %-4s\t[reduce using rule %d (%s)]\n"),
                   escape (symbols[i]->tag), default_rule - 1,
-                  escape2 (symbols[rules[default_rule].lhs]->tag));
+                  escape2 (rules[default_rule].lhs->tag));
 
       fprintf (out, _("    $default\treduce using rule %d (%s)\n\n"),
-              default_rule - 1, escape 
(symbols[rules[default_rule].lhs]->tag));
+              default_rule - 1, escape (rules[default_rule].lhs->tag));
     }
   else if (state->nlookaheads >= 1)
     {
@@ -276,7 +276,7 @@
                               _("    %-4s\treduce using rule %d (%s)\n"),
                               escape (symbols[i]->tag),
                               LAruleno[state->lookaheadsp + j] - 1,
-                              escape2 
(symbols[rules[LAruleno[state->lookaheadsp + j]].lhs]->tag));
+                              escape2 (rules[LAruleno[state->lookaheadsp + 
j]].lhs->tag));
                    else
                      defaulted = 1;
 
@@ -289,13 +289,13 @@
                               _("    %-4s\treduce using rule %d (%s)\n"),
                               escape (symbols[i]->tag),
                               LAruleno[default_LA] - 1,
-                              escape2 
(symbols[rules[LAruleno[default_LA]].lhs]->tag));
+                              escape2 (rules[LAruleno[default_LA]].lhs->tag));
                    defaulted = 0;
                    fprintf (out,
                             _("    %-4s\t[reduce using rule %d (%s)]\n"),
                             escape (symbols[i]->tag),
                             LAruleno[state->lookaheadsp + j] - 1,
-                            escape2 (symbols[rules[LAruleno[state->lookaheadsp 
+ j]].lhs]->tag));
+                            escape2 (rules[LAruleno[state->lookaheadsp + 
j]].lhs->tag));
                  }
              }
        }
@@ -303,7 +303,7 @@
       if (default_LA >= 0)
        fprintf (out, _("    $default\treduce using rule %d (%s)\n"),
                 default_rule - 1,
-                escape (symbols[rules[default_rule].lhs]->tag));
+                escape (rules[default_rule].lhs->tag));
     }
 }
 
@@ -368,7 +368,7 @@
   for (i = 1; i < nrules + 1; i++)
     {
       fprintf (out, _("  %3d %3d %s ->"),
-              i - 1, rules[i].line, escape (symbols[rules[i].lhs]->tag));
+              i - 1, rules[i].line, escape (rules[i].lhs->tag));
       rule = rules[i].rhs;
       if (*rule >= 0)
        while (*rule >= 0)
@@ -411,7 +411,7 @@
 
       for (j = 1; j < nrules + 1; j++)
        {
-         if (rules[j].lhs == i)
+         if (rules[j].lhs->number == i)
            left_count++;
          for (rule = rules[j].rhs; *rule >= 0; rule++)
            if (*rule == i)
@@ -435,7 +435,7 @@
          for (j = 1; j < nrules + 1; j++)
            {
              END_TEST (65);
-             if (rules[j].lhs == i)
+             if (rules[j].lhs->number == i)
                sprintf (buffer + strlen (buffer), " %d", j - 1);
            }
        }
Index: src/print_graph.c
--- src/print_graph.c Sat, 23 Mar 2002 12:44:36 +0100 akim
+++ src/print_graph.c Mon, 25 Mar 2002 20:41:00 +0100 akim
@@ -78,7 +78,7 @@
       if (i)
        obstack_1grow (node_obstack, '\n');
       obstack_fgrow1 (node_obstack, " %s -> ",
-                     escape (symbols[rules[rule].lhs]->tag));
+                     escape (rules[rule].lhs->tag));
 
       for (sp = rules[rule].rhs; sp < sp1; sp++)
        obstack_fgrow1 (node_obstack, "%s ", escape (symbols[*sp]->tag));
Index: src/reader.c
--- src/reader.c Mon, 25 Mar 2002 20:34:56 +0100 akim
+++ src/reader.c Mon, 25 Mar 2002 20:41:00 +0100 akim
@@ -1688,7 +1688,7 @@
     {
       bucket *ruleprec = p->ruleprec;
       rules[ruleno].number = ruleno;
-      rules[ruleno].lhs = p->sym->number;
+      rules[ruleno].lhs = p->sym;
       rules[ruleno].rhs = ritem + itemno;
       rules[ruleno].line = p->line;
       rules[ruleno].useful = TRUE;
Index: src/reduce.c
--- src/reduce.c Mon, 25 Mar 2002 21:20:03 +0100 akim
+++ src/reduce.c Mon, 25 Mar 2002 21:29:06 +0100 akim
@@ -118,7 +118,7 @@
        if (!bitset_test (P, i)
            && useful_production (i, N))
          {
-           bitset_set (Np, rules[i].lhs - ntokens);
+           bitset_set (Np, rules[i].lhs->number - ntokens);
            bitset_set (P, i);
          }
       if (bitset_equal_p (N, Np))
@@ -178,7 +178,7 @@
            {
              if (!bitset_test (Pp, i)
                  && bitset_test (P, i)
-                 && bitset_test (V, rules[i].lhs))
+                 && bitset_test (V, rules[i].lhs->number))
                {
                  for (r = rules[i].rhs; *r >= 0; r++)
                    if (ISTOKEN (t = *r) || bitset_test (N, t - ntokens))
@@ -308,6 +308,8 @@
     bucket **symbols_sorted = XMALLOC (bucket *, nvars) - ntokens;
 
     for (i = ntokens; i < nsyms; i++)
+      symbols[i]->number = nontermmap[i];
+    for (i = ntokens; i < nsyms; i++)
       symbols_sorted[nontermmap[i]] = symbols[i];
     for (i = ntokens; i < nsyms; i++)
       symbols[i] = symbols_sorted[i];
@@ -318,7 +320,6 @@
 
   for (i = 1; i < nrules + 1; i++)
     {
-      rules[i].lhs = nontermmap[rules[i].lhs];
       if (ISVAR (rules[i].precsym))
        /* Can this happen?  */
        rules[i].precsym = nontermmap[rules[i].precsym];
@@ -376,7 +377,7 @@
        {
          rule r;
          fprintf (out, "#%-4d  ", rules[i].number - 1);
-         fprintf (out, "%s:", symbols[rules[i].lhs]->tag);
+         fprintf (out, "%s:", rules[i].lhs->tag);
          for (r = rules[i].rhs; *r >= 0; r++)
            fprintf (out, " %s", symbols[*r]->tag);
          fputs (";\n", out);
@@ -414,7 +415,7 @@
               i - 1,
               rules[i].prec, rules[i].assoc, rules[i].useful,
               rules[i].rhs - ritem, rules[i].rhs - ritem + rhs_count - 1,
-              rules[i].lhs);
+              rules[i].lhs->number);
       /* Dumped the RHS. */
       for (r = rules[i].rhs; *r >= 0; r++)
        fprintf (out, "%3d", *r);
@@ -424,7 +425,7 @@
   fprintf (out, "Rules interpreted\n-----------------\n\n");
   for (i = 1; i < nrules + nuseless_productions + 1; i++)
     {
-      fprintf (out, "%-5d  %s :", i, symbols[rules[i].lhs]->tag);
+      fprintf (out, "%-5d  %s :", i, rules[i].lhs->tag);
       for (r = rules[i].rhs; *r >= 0; r++)
        fprintf (out, " %s", symbols[*r]->tag);
       fputc ('\n', out);
Index: src/symtab.h
--- src/symtab.h Sat, 23 Mar 2002 12:58:09 +0100 akim
+++ src/symtab.h Mon, 25 Mar 2002 20:37:46 +0100 akim
@@ -1,5 +1,5 @@
 /* Definitions for symtab.c and callers, part of bison,
-   Copyright 1984, 1989, 1992, 2000, 2001  Free Software Foundation, Inc.
+   Copyright 1984, 1989, 1992, 2000, 2001, 2002  Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -20,12 +20,19 @@
 
 #ifndef SYMTAB_H_
 # define SYMTAB_H_
-# include "gram.h"
 
 #define        TABSIZE 1009
 
-/*  symbol classes  */
+/* Associativity values for tokens and rules.  */
+typedef enum
+{
+  right_assoc,
+  left_assoc,
+  non_assoc
+} associativity;
 
+
+/* Symbol classes.  */
 typedef enum
 {
   unknown_sym,



reply via email to

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