bison-patches
[Top][All Lists]
Advanced

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

15-fyi-LA-bitset.patch


From: Akim Demaille
Subject: 15-fyi-LA-bitset.patch
Date: Mon, 04 Mar 2002 13:06:10 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        * src/L0.c, src/LR0.h (nstates): Be size_t.
        Adjust comparisons (signed vs unsigned).
        * src/conflics.c, src/lalr.c, src/lalr.h, src/output.c (LA): Now a
        bitset*.
        Adjust all dependencies.
        
        
Index: src/LR0.c
--- src/LR0.c Sat, 26 Jan 2002 17:16:02 +0100 akim
+++ src/LR0.c Fri, 01 Mar 2002 15:15:40 +0100 akim
@@ -1,5 +1,5 @@
 /* Generate the nondeterministic finite state machine for bison,
-   Copyright 1984, 1986, 1989, 2000, 2001  Free Software Foundation, Inc.
+   Copyright 1984, 1986, 1989, 2000, 2001, 2002  Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -23,6 +23,7 @@
    The entry point is generate_states.  */
 
 #include "system.h"
+#include "bitset.h"
 #include "symtab.h"
 #include "getargs.h"
 #include "reader.h"
@@ -34,7 +35,7 @@
 #include "lalr.h"
 #include "reduce.h"
 
-int nstates;
+unsigned int nstates;
 /* Initialize the final state to -1, otherwise, it might be set to 0
    by default, and since we don't compute the reductions of the final
    state, we end up not computing the reductions of the initial state,
Index: src/LR0.h
--- src/LR0.h Sat, 08 Dec 2001 20:47:14 +0100 akim
+++ src/LR0.h Fri, 01 Mar 2002 15:15:54 +0100 akim
@@ -1,5 +1,5 @@
 /* Generate the nondeterministic finite state machine for bison,
-   Copyright 1984, 1986, 1989, 2000, 2001  Free Software Foundation, Inc.
+   Copyright 1984, 1986, 1989, 2000, 2001, 2002  Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -25,7 +25,7 @@
 
 void generate_states PARAMS ((void));
 
-extern int nstates;
+extern unsigned int nstates;
 extern int final_state;
 
 #endif /* !LR0_H_ */
Index: src/conflicts.c
--- src/conflicts.c Sun, 06 Jan 2002 21:12:55 +0100 akim
+++ src/conflicts.c Fri, 01 Mar 2002 15:16:07 +0100 akim
@@ -1,5 +1,5 @@
 /* Find and resolve or report look-ahead conflicts for 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.
 
@@ -19,6 +19,7 @@
    02111-1307, USA.  */
 
 #include "system.h"
+#include "bitset.h"
 #include "complain.h"
 #include "getargs.h"
 #include "symtab.h"
@@ -78,7 +79,7 @@
 static void
 flush_reduce (int lookahead, int token)
 {
-  RESETBIT (LA (lookahead), token);
+  bitset_reset (LA[lookahead], token);
 }
 
 
@@ -99,7 +100,7 @@
   errp->nerrs = 0;
 
   for (i = 0; i < ntokens; i++)
-    if (BITISSET (LA (lookahead), i)
+    if (bitset_test (LA[lookahead], i)
        && BITISSET (lookaheadset, i)
        && symbols[i]->prec)
       {
@@ -173,8 +174,9 @@
      precedence */
   for (i = 0; i < state->nlookaheads; ++i)
     if (rules[LAruleno[state->lookaheadsp + i]].prec)
-      for (j = 0; j < tokensetsize; ++j)
-       if (LA (state->lookaheadsp + i)[j] & lookaheadset[j])
+      for (j = 0; j < ntokens; ++j)
+       if (bitset_test (LA[state->lookaheadsp + i], j)
+           && BITISSET (lookaheadset, j))
          {
            resolve_sr_conflict (state, state->lookaheadsp + i);
            break;
@@ -185,19 +187,21 @@
      for conflicts not resolved above.  */
   for (i = 0; i < state->nlookaheads; ++i)
     {
-      for (j = 0; j < tokensetsize; ++j)
-       if (LA (state->lookaheadsp + i)[j] & lookaheadset[j])
+      for (j = 0; j < ntokens; ++j)
+       if (bitset_test (LA[state->lookaheadsp + i], j)
+           && BITISSET (lookaheadset, j))
          conflicts[state->number] = 1;
 
-      for (j = 0; j < tokensetsize; ++j)
-       lookaheadset[j] |= LA (state->lookaheadsp + i)[j];
+      for (j = 0; j < ntokens; ++j)
+       if (bitset_test (LA[state->lookaheadsp + i], j))
+         SETBIT (lookaheadset, j);
     }
 }
 
 void
 solve_conflicts (void)
 {
-  int i;
+  size_t i;
 
   conflicts = XCALLOC (char, nstates);
   shiftset = XCALLOC (unsigned, tokensetsize);
@@ -233,8 +237,9 @@
       SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
 
   for (i = 0; i < state->nlookaheads; ++i)
-    for (k = 0; k < tokensetsize; ++k)
-      lookaheadset[k] |= LA (state->lookaheadsp + i)[k];
+    for (k = 0; k < ntokens; ++k)
+      if (bitset_test (LA[state->lookaheadsp + i], k))
+       SETBIT (lookaheadset, k);
 
   for (k = 0; k < tokensetsize; ++k)
     lookaheadset[k] &= shiftset[k];
@@ -265,7 +270,7 @@
       int count = 0;
       int j;
       for (j = 0; j < state->nlookaheads; ++j)
-       if (BITISSET (LA (state->lookaheadsp + j), i))
+       if (bitset_test (LA[state->lookaheadsp + j], i))
          count++;
 
       if (count >= 2)
@@ -322,7 +327,7 @@
 conflicts_output (FILE *out)
 {
   bool printed_sth = FALSE;
-  int i;
+  size_t i;
   for (i = 0; i < nstates; i++)
     if (conflicts[i])
       {
@@ -343,7 +348,7 @@
 void
 conflicts_print (void)
 {
-  int i;
+  size_t i;
 
   /* Is the number of SR conflicts OK?  Either EXPECTED_CONFLICTS is
      not set, and then we want 0 SR, or else it is specified, in which
Index: src/lalr.c
--- src/lalr.c Fri, 28 Dec 2001 16:47:09 +0100 akim
+++ src/lalr.c Fri, 01 Mar 2002 15:16:40 +0100 akim
@@ -24,6 +24,7 @@
    tokens they accept.  */
 
 #include "system.h"
+#include "bitset.h"
 #include "reader.h"
 #include "types.h"
 #include "LR0.h"
@@ -39,14 +40,14 @@
 state_t **states = NULL;
 
 int tokensetsize;
-short *LAruleno;
-unsigned *LA;
+short *LAruleno = NULL;
+bitset *LA = NULL;
 size_t nLA;
 
 static int ngotos;
-short *goto_map;
-short *from_state;
-short *to_state;
+short *goto_map = NULL;
+short *from_state = NULL;
+short *to_state = NULL;
 
 /* And for the famous F variable, which name is so descriptive that a
    comment is hardly needed.  <grin>.  */
@@ -136,7 +137,7 @@
 static void
 initialize_LA (void)
 {
-  int i;
+  size_t i;
   int j;
   short *np;
 
@@ -144,7 +145,12 @@
   if (!nLA)
     nLA = 1;
 
-  LA = XCALLOC (unsigned, nLA * tokensetsize);
+  LA = XCALLOC (bitset, nLA);
+  for (i = 0; i < nLA; ++i)
+    {
+      LA[i] = bitset_create (ntokens, BITSET_FIXED);
+      bitset_zero (LA[i]);
+    }
   LAruleno = XCALLOC (short, nLA);
   lookback = XCALLOC (shorts *, nLA);
 
@@ -159,7 +165,8 @@
 static void
 set_goto_map (void)
 {
-  int state, i;
+  size_t state;
+  int i;
   short *temp_map;
 
   goto_map = XCALLOC (short, nvars + 1) - ntokens;
@@ -494,10 +501,10 @@
   for (i = 0; i < nLA; i++)
     for (sp = lookback[i]; sp; sp = sp->next)
       {
-       int size = LA (i + 1) - LA (i);
        int j;
-       for (j = 0; j < size; ++j)
-         LA (i)[j] |= F (sp->value)[j];
+       for (j = 0; j < ntokens; ++j)
+         if (BITISSET (F (sp->value), j))
+           bitset_set (LA[i], j);
       }
 
   /* Free LOOKBACK. */
@@ -516,7 +523,7 @@
 static void
 initialize_lookaheads (void)
 {
-  int i;
+  size_t i;
   nLA = 0;
   for (i = 0; i < nstates; i++)
     {
@@ -556,7 +563,8 @@
 static void
 lookaheads_print (FILE *out)
 {
-  int i, j, k;
+  size_t i;
+  int j, k;
   fprintf (out, "Lookaheads: BEGIN\n");
   for (i = 0; i < nstates; ++i)
     {
@@ -565,7 +573,7 @@
 
       for (j = 0; j < states[i]->nlookaheads; ++j)
        for (k = 0; k < ntokens; ++k)
-         if (BITISSET (LA (states[i]->lookaheadsp + j), j))
+         if (bitset_test (LA[states[i]->lookaheadsp + j], j))
            fprintf (out, "   on %d (%s) -> rule %d\n",
                     k, symbols[k]->tag,
                     -LAruleno[states[i]->lookaheadsp + j] - 1);
Index: src/lalr.h
--- src/lalr.h Fri, 28 Dec 2001 16:47:09 +0100 akim
+++ src/lalr.h Fri, 01 Mar 2002 15:17:33 +0100 akim
@@ -1,5 +1,5 @@
 /* Compute look-ahead criteria for bison,
-   Copyright 1984, 1986, 1989, 2000 Free Software Foundation, Inc.
+   Copyright 1984, 1986, 1989, 2000, 2002 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,6 +21,7 @@
 #ifndef LALR_H_
 # define LALR_H_
 
+#include "bitset.h"
 
 /* Import the definition of CORE, SHIFTS and REDUCTIONS. */
 # include "state.h"
@@ -65,8 +66,7 @@
    token is symbol i.  If LA[l, i] and LA[l, j] are both 1 for i != j,
    it is a conflict.  */
 
-extern unsigned *LA;
-#define LA(Rule) (LA + (Rule) * tokensetsize)
+extern bitset *LA;
 
 
 /* All the states, indexed by the state number.  */
Index: src/main.c
--- src/main.c Thu, 27 Dec 2001 14:58:13 +0100 akim
+++ src/main.c Fri, 01 Mar 2002 15:17:05 +0100 akim
@@ -1,5 +1,5 @@
 /* Top level entry point of bison,
-   Copyright 1984, 1986, 1989, 1992, 1995, 2000, 2001
+   Copyright 1984, 1986, 1989, 1992, 1995, 2000, 2001, 2002
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -21,6 +21,7 @@
 
 
 #include "system.h"
+#include "bitset.h"
 #include "getargs.h"
 #include "files.h"
 #include "complain.h"
Index: src/output.c
--- src/output.c Mon, 04 Feb 2002 23:18:59 +0100 akim
+++ src/output.c Fri, 01 Mar 2002 15:19:48 +0100 akim
@@ -226,7 +226,7 @@
 static void
 output_stos (void)
 {
-  int i;
+  size_t i;
   short *values = (short *) alloca (sizeof (short) * nstates);
   for (i = 0; i < nstates; ++i)
     values[i] = states[i]->accessing_symbol;
@@ -355,7 +355,7 @@
        for (j = 0; j < ntokens; j++)
          /* and record this rule as the rule to use if that
             token follows.  */
-         if (BITISSET (LA (state->lookaheadsp + i), j))
+         if (bitset_test (LA[state->lookaheadsp + i], j))
            actrow[j] = -LAruleno[state->lookaheadsp + i];
     }
 
@@ -487,7 +487,7 @@
 static void
 token_actions (void)
 {
-  int i;
+  size_t i;
   short *yydefact = XCALLOC (short, nstates);
 
   actrow = XCALLOC (short, ntokens);
@@ -640,9 +640,9 @@
 static int
 default_goto (int symbol)
 {
-  int i;
-  int m = goto_map[symbol];
-  int n = goto_map[symbol + 1];
+  size_t i;
+  size_t m = goto_map[symbol];
+  size_t n = goto_map[symbol + 1];
   int default_state = -1;
   int max = 0;
 
@@ -740,7 +740,7 @@
   int w;
   int prev;
 
-  if (i >= nstates)
+  if (i >= (int) nstates)
     return -1;
 
   t = tally[i];
@@ -912,7 +912,7 @@
 static void
 output_actions (void)
 {
-  int i;
+  size_t i;
   nvectors = nstates + nvars;
 
   froms = XCALLOC (short *, nvectors);
Index: src/print.c
--- src/print.c Tue, 26 Feb 2002 23:24:19 +0100 akim
+++ src/print.c Fri, 01 Mar 2002 15:19:46 +0100 akim
@@ -216,7 +216,7 @@
       int default_rule = LAruleno[state->lookaheadsp];
 
       for (i = 0; i < ntokens; ++i)
-       if (BITISSET (LA (state->lookaheadsp), i)
+       if (bitset_test (LA[state->lookaheadsp], i)
            && bitset_test (shiftset, i))
          bitset_set (lookaheadset, i);
        else
@@ -244,7 +244,7 @@
            int j, k;
 
            for (k = 0; k < ntokens; ++k)
-             if (BITISSET (LA (state->lookaheadsp + i), k)
+             if (bitset_test (LA[state->lookaheadsp + i], k)
                  && ! bitset_test (shiftset, k))
                bitset_set (lookaheadset, k);
              else
@@ -278,7 +278,7 @@
 
          for (j = 0; j < state->nlookaheads; ++j)
            {
-             if (BITISSET (LA (state->lookaheadsp + j), i))
+             if (bitset_test (LA[state->lookaheadsp + j], i))
                {
                  if (count == 0)
                    {
@@ -479,7 +479,7 @@
 void
 print_results (void)
 {
-  int i;
+  size_t i;
 
   /* We used to use just .out if SPEC_NAME_PREFIX (-p) was used, but
      that conflicts with Posix.  */
Index: src/print_graph.c
--- src/print_graph.c Fri, 28 Dec 2001 16:47:09 +0100 akim
+++ src/print_graph.c Fri, 01 Mar 2002 15:19:48 +0100 akim
@@ -172,7 +172,7 @@
 void
 print_graph (void)
 {
-  int i;
+  size_t i;
 
   /* Output file.  */
   fgraph = xfopen (spec_graph_file, "w");



reply via email to

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