]> git.saurik.com Git - bison.git/blobdiff - src/derives.c
Add lib/subpipe.c.
[bison.git] / src / derives.c
index 87b15f2d07b9bec7684e06b1bb68fc5e50588d7e..746929755855c07c41d397ac7395c936e6f9ed59 100644 (file)
@@ -1,5 +1,5 @@
 /* Match rules with nonterminals for bison,
 /* Match rules with nonterminals for bison,
-   Copyright 1984, 1989, 2000, 2001, 2002  Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000, 2001, 2002  Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -22,7 +22,6 @@
 #include "system.h"
 #include "getargs.h"
 #include "symtab.h"
 #include "system.h"
 #include "getargs.h"
 #include "symtab.h"
-#include "types.h"
 #include "reader.h"
 #include "gram.h"
 #include "derives.h"
 #include "reader.h"
 #include "gram.h"
 #include "derives.h"
 typedef struct rule_list_s
 {
   struct rule_list_s *next;
 typedef struct rule_list_s
 {
   struct rule_list_s *next;
-  rule_number_t value;
+  rule_t *value;
 } rule_list_t;
 
 } rule_list_t;
 
-rule_number_t **derives = NULL;
+rule_t ***derives = NULL;
 
 static void
 print_derives (void)
 
 static void
 print_derives (void)
@@ -45,12 +44,12 @@ print_derives (void)
 
   for (i = ntokens; i < nsyms; i++)
     {
 
   for (i = ntokens; i < nsyms; i++)
     {
-      rule_number_t *rp;
+      rule_t **rp;
       fprintf (stderr, "\t%s derives\n", symbols[i]->tag);
       fprintf (stderr, "\t%s derives\n", symbols[i]->tag);
-      for (rp = derives[i]; *rp > 0; rp++)
+      for (rp = derives[i]; *rp; ++rp)
        {
        {
-         fprintf (stderr, "\t\t%3d ", *rp - 1);
-         rule_rhs_print (&rules[*rp], stderr);
+         fprintf (stderr, "\t\t%3d ", (*rp)->user_number);
+         rule_rhs_print (*rp, stderr);
        }
     }
 
        }
     }
 
@@ -59,11 +58,11 @@ print_derives (void)
 
 
 void
 
 
 void
-set_derives (void)
+derives_compute (void)
 {
   symbol_number_t i;
 {
   symbol_number_t i;
-  rule_number_t r;
-  rule_number_t *q;
+  int r;
+  rule_t **q;
 
   /* DSET[NTERM] -- A linked list of the numbers of the rules whose
      LHS is NTERM.  */
 
   /* DSET[NTERM] -- A linked list of the numbers of the rules whose
      LHS is NTERM.  */
@@ -72,23 +71,23 @@ set_derives (void)
   /* DELTS[RULE] -- There are NRULES rule number to attach to nterms.
      Instead of performing NRULES allocations for each, have an array
      indexed by rule numbers.  */
   /* DELTS[RULE] -- There are NRULES rule number to attach to nterms.
      Instead of performing NRULES allocations for each, have an array
      indexed by rule numbers.  */
-  rule_list_t *delts = XCALLOC (rule_list_t, nrules + 1);
+  rule_list_t *delts = XCALLOC (rule_list_t, nrules);
 
 
-  for (r = nrules; r > 0; r--)
+  for (r = nrules - 1; r >= 0; --r)
     {
       symbol_number_t lhs = rules[r].lhs->number;
       rule_list_t *p = &delts[r];
       /* A new LHS is found.  */
       p->next = dset[lhs];
     {
       symbol_number_t lhs = rules[r].lhs->number;
       rule_list_t *p = &delts[r];
       /* A new LHS is found.  */
       p->next = dset[lhs];
-      p->value = r;
+      p->value = &rules[r];
       dset[lhs] = p;
     }
 
   /* DSET contains what we need under the form of a linked list.  Make
      it a single array.  */
 
       dset[lhs] = p;
     }
 
   /* DSET contains what we need under the form of a linked list.  Make
      it a single array.  */
 
-  derives = XCALLOC (rule_number_t *, nvars) - ntokens;
-  q = XCALLOC (rule_number_t, nvars + int_of_rule_number (nrules));
+  derives = XCALLOC (rule_t **, nvars) - ntokens;
+  q = XCALLOC (rule_t *, nvars + int_of_rule_number (nrules));
 
   for (i = ntokens; i < nsyms; i++)
     {
 
   for (i = ntokens; i < nsyms; i++)
     {
@@ -99,10 +98,10 @@ set_derives (void)
          *q++ = p->value;
          p = p->next;
        }
          *q++ = p->value;
          p = p->next;
        }
-      *q++ = -1;
+      *q++ = NULL;
     }
 
     }
 
-  if (trace_flag)
+  if (trace_flag & trace_sets)
     print_derives ();
 
   free (dset + ntokens);
     print_derives ();
 
   free (dset + ntokens);
@@ -111,7 +110,7 @@ set_derives (void)
 
 
 void
 
 
 void
-free_derives (void)
+derives_free (void)
 {
   XFREE (derives[ntokens]);
   XFREE (derives + ntokens);
 {
   XFREE (derives[ntokens]);
   XFREE (derives + ntokens);