* 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.
This commit is contained in:
Akim Demaille
2002-03-04 12:03:36 +00:00
parent d8a0245ce7
commit 602bbf31c1
10 changed files with 74 additions and 50 deletions

View File

@@ -1,3 +1,12 @@
2002-03-04 Akim Demaille <akim@epita.fr>
* 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.
2002-03-04 Akim Demaille <akim@epita.fr> 2002-03-04 Akim Demaille <akim@epita.fr>
* src/closure.c (firsts): Now, also a bitset. * src/closure.c (firsts): Now, also a bitset.

View File

@@ -1,5 +1,5 @@
/* Generate the nondeterministic finite state machine for bison, /* 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. This file is part of Bison, the GNU Compiler Compiler.
@@ -23,6 +23,7 @@
The entry point is generate_states. */ The entry point is generate_states. */
#include "system.h" #include "system.h"
#include "bitset.h"
#include "symtab.h" #include "symtab.h"
#include "getargs.h" #include "getargs.h"
#include "reader.h" #include "reader.h"
@@ -34,7 +35,7 @@
#include "lalr.h" #include "lalr.h"
#include "reduce.h" #include "reduce.h"
int nstates; unsigned int nstates;
/* Initialize the final state to -1, otherwise, it might be set to 0 /* 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 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, state, we end up not computing the reductions of the initial state,

View File

@@ -1,5 +1,5 @@
/* Generate the nondeterministic finite state machine for bison, /* 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. This file is part of Bison, the GNU Compiler Compiler.
@@ -25,7 +25,7 @@
void generate_states PARAMS ((void)); void generate_states PARAMS ((void));
extern int nstates; extern unsigned int nstates;
extern int final_state; extern int final_state;
#endif /* !LR0_H_ */ #endif /* !LR0_H_ */

View File

@@ -1,5 +1,5 @@
/* Find and resolve or report look-ahead conflicts for bison, /* 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. This file is part of Bison, the GNU Compiler Compiler.
@@ -19,6 +19,7 @@
02111-1307, USA. */ 02111-1307, USA. */
#include "system.h" #include "system.h"
#include "bitset.h"
#include "complain.h" #include "complain.h"
#include "getargs.h" #include "getargs.h"
#include "symtab.h" #include "symtab.h"
@@ -78,7 +79,7 @@ flush_shift (state_t *state, int token)
static void static void
flush_reduce (int lookahead, int token) flush_reduce (int lookahead, int token)
{ {
RESETBIT (LA (lookahead), token); bitset_reset (LA[lookahead], token);
} }
@@ -99,7 +100,7 @@ resolve_sr_conflict (state_t *state, int lookahead)
errp->nerrs = 0; errp->nerrs = 0;
for (i = 0; i < ntokens; i++) for (i = 0; i < ntokens; i++)
if (BITISSET (LA (lookahead), i) if (bitset_test (LA[lookahead], i)
&& BITISSET (lookaheadset, i) && BITISSET (lookaheadset, i)
&& symbols[i]->prec) && symbols[i]->prec)
{ {
@@ -173,8 +174,9 @@ set_conflicts (state_t *state)
precedence */ precedence */
for (i = 0; i < state->nlookaheads; ++i) for (i = 0; i < state->nlookaheads; ++i)
if (rules[LAruleno[state->lookaheadsp + i]].prec) if (rules[LAruleno[state->lookaheadsp + i]].prec)
for (j = 0; j < tokensetsize; ++j) for (j = 0; j < ntokens; ++j)
if (LA (state->lookaheadsp + i)[j] & lookaheadset[j]) if (bitset_test (LA[state->lookaheadsp + i], j)
&& BITISSET (lookaheadset, j))
{ {
resolve_sr_conflict (state, state->lookaheadsp + i); resolve_sr_conflict (state, state->lookaheadsp + i);
break; break;
@@ -185,19 +187,21 @@ set_conflicts (state_t *state)
for conflicts not resolved above. */ for conflicts not resolved above. */
for (i = 0; i < state->nlookaheads; ++i) for (i = 0; i < state->nlookaheads; ++i)
{ {
for (j = 0; j < tokensetsize; ++j) for (j = 0; j < ntokens; ++j)
if (LA (state->lookaheadsp + i)[j] & lookaheadset[j]) if (bitset_test (LA[state->lookaheadsp + i], j)
&& BITISSET (lookaheadset, j))
conflicts[state->number] = 1; conflicts[state->number] = 1;
for (j = 0; j < tokensetsize; ++j) for (j = 0; j < ntokens; ++j)
lookaheadset[j] |= LA (state->lookaheadsp + i)[j]; if (bitset_test (LA[state->lookaheadsp + i], j))
SETBIT (lookaheadset, j);
} }
} }
void void
solve_conflicts (void) solve_conflicts (void)
{ {
int i; size_t i;
conflicts = XCALLOC (char, nstates); conflicts = XCALLOC (char, nstates);
shiftset = XCALLOC (unsigned, tokensetsize); shiftset = XCALLOC (unsigned, tokensetsize);
@@ -233,8 +237,9 @@ count_sr_conflicts (state_t *state)
SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i)); SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
for (i = 0; i < state->nlookaheads; ++i) for (i = 0; i < state->nlookaheads; ++i)
for (k = 0; k < tokensetsize; ++k) for (k = 0; k < ntokens; ++k)
lookaheadset[k] |= LA (state->lookaheadsp + i)[k]; if (bitset_test (LA[state->lookaheadsp + i], k))
SETBIT (lookaheadset, k);
for (k = 0; k < tokensetsize; ++k) for (k = 0; k < tokensetsize; ++k)
lookaheadset[k] &= shiftset[k]; lookaheadset[k] &= shiftset[k];
@@ -265,7 +270,7 @@ count_rr_conflicts (state_t *state)
int count = 0; int count = 0;
int j; int j;
for (j = 0; j < state->nlookaheads; ++j) for (j = 0; j < state->nlookaheads; ++j)
if (BITISSET (LA (state->lookaheadsp + j), i)) if (bitset_test (LA[state->lookaheadsp + j], i))
count++; count++;
if (count >= 2) if (count >= 2)
@@ -322,7 +327,7 @@ void
conflicts_output (FILE *out) conflicts_output (FILE *out)
{ {
bool printed_sth = FALSE; bool printed_sth = FALSE;
int i; size_t i;
for (i = 0; i < nstates; i++) for (i = 0; i < nstates; i++)
if (conflicts[i]) if (conflicts[i])
{ {
@@ -343,7 +348,7 @@ conflicts_output (FILE *out)
void void
conflicts_print (void) conflicts_print (void)
{ {
int i; size_t i;
/* Is the number of SR conflicts OK? Either EXPECTED_CONFLICTS is /* 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 not set, and then we want 0 SR, or else it is specified, in which

View File

@@ -24,6 +24,7 @@
tokens they accept. */ tokens they accept. */
#include "system.h" #include "system.h"
#include "bitset.h"
#include "reader.h" #include "reader.h"
#include "types.h" #include "types.h"
#include "LR0.h" #include "LR0.h"
@@ -39,14 +40,14 @@
state_t **states = NULL; state_t **states = NULL;
int tokensetsize; int tokensetsize;
short *LAruleno; short *LAruleno = NULL;
unsigned *LA; bitset *LA = NULL;
size_t nLA; size_t nLA;
static int ngotos; static int ngotos;
short *goto_map; short *goto_map = NULL;
short *from_state; short *from_state = NULL;
short *to_state; short *to_state = NULL;
/* And for the famous F variable, which name is so descriptive that a /* And for the famous F variable, which name is so descriptive that a
comment is hardly needed. <grin>. */ comment is hardly needed. <grin>. */
@@ -136,7 +137,7 @@ digraph (short **relation)
static void static void
initialize_LA (void) initialize_LA (void)
{ {
int i; size_t i;
int j; int j;
short *np; short *np;
@@ -144,7 +145,12 @@ initialize_LA (void)
if (!nLA) if (!nLA)
nLA = 1; 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); LAruleno = XCALLOC (short, nLA);
lookback = XCALLOC (shorts *, nLA); lookback = XCALLOC (shorts *, nLA);
@@ -159,7 +165,8 @@ initialize_LA (void)
static void static void
set_goto_map (void) set_goto_map (void)
{ {
int state, i; size_t state;
int i;
short *temp_map; short *temp_map;
goto_map = XCALLOC (short, nvars + 1) - ntokens; goto_map = XCALLOC (short, nvars + 1) - ntokens;
@@ -494,10 +501,10 @@ compute_lookaheads (void)
for (i = 0; i < nLA; i++) for (i = 0; i < nLA; i++)
for (sp = lookback[i]; sp; sp = sp->next) for (sp = lookback[i]; sp; sp = sp->next)
{ {
int size = LA (i + 1) - LA (i);
int j; int j;
for (j = 0; j < size; ++j) for (j = 0; j < ntokens; ++j)
LA (i)[j] |= F (sp->value)[j]; if (BITISSET (F (sp->value), j))
bitset_set (LA[i], j);
} }
/* Free LOOKBACK. */ /* Free LOOKBACK. */
@@ -516,7 +523,7 @@ compute_lookaheads (void)
static void static void
initialize_lookaheads (void) initialize_lookaheads (void)
{ {
int i; size_t i;
nLA = 0; nLA = 0;
for (i = 0; i < nstates; i++) for (i = 0; i < nstates; i++)
{ {
@@ -556,7 +563,8 @@ initialize_lookaheads (void)
static void static void
lookaheads_print (FILE *out) lookaheads_print (FILE *out)
{ {
int i, j, k; size_t i;
int j, k;
fprintf (out, "Lookaheads: BEGIN\n"); fprintf (out, "Lookaheads: BEGIN\n");
for (i = 0; i < nstates; ++i) for (i = 0; i < nstates; ++i)
{ {
@@ -565,7 +573,7 @@ lookaheads_print (FILE *out)
for (j = 0; j < states[i]->nlookaheads; ++j) for (j = 0; j < states[i]->nlookaheads; ++j)
for (k = 0; k < ntokens; ++k) 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", fprintf (out, " on %d (%s) -> rule %d\n",
k, symbols[k]->tag, k, symbols[k]->tag,
-LAruleno[states[i]->lookaheadsp + j] - 1); -LAruleno[states[i]->lookaheadsp + j] - 1);

View File

@@ -1,5 +1,5 @@
/* Compute look-ahead criteria for bison, /* 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. This file is part of Bison, the GNU Compiler Compiler.
@@ -21,6 +21,7 @@
#ifndef LALR_H_ #ifndef LALR_H_
# define LALR_H_ # define LALR_H_
#include "bitset.h"
/* Import the definition of CORE, SHIFTS and REDUCTIONS. */ /* Import the definition of CORE, SHIFTS and REDUCTIONS. */
# include "state.h" # include "state.h"
@@ -65,8 +66,7 @@ extern short *LAruleno;
token is symbol i. If LA[l, i] and LA[l, j] are both 1 for i != j, token is symbol i. If LA[l, i] and LA[l, j] are both 1 for i != j,
it is a conflict. */ it is a conflict. */
extern unsigned *LA; extern bitset *LA;
#define LA(Rule) (LA + (Rule) * tokensetsize)
/* All the states, indexed by the state number. */ /* All the states, indexed by the state number. */

View File

@@ -1,5 +1,5 @@
/* Top level entry point of bison, /* 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. Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -21,6 +21,7 @@
#include "system.h" #include "system.h"
#include "bitset.h"
#include "getargs.h" #include "getargs.h"
#include "files.h" #include "files.h"
#include "complain.h" #include "complain.h"

View File

@@ -226,7 +226,7 @@ output_gram (void)
static void static void
output_stos (void) output_stos (void)
{ {
int i; size_t i;
short *values = (short *) alloca (sizeof (short) * nstates); short *values = (short *) alloca (sizeof (short) * nstates);
for (i = 0; i < nstates; ++i) for (i = 0; i < nstates; ++i)
values[i] = states[i]->accessing_symbol; values[i] = states[i]->accessing_symbol;
@@ -356,7 +356,7 @@ action_row (state_t *state)
for (j = 0; j < ntokens; j++) for (j = 0; j < ntokens; j++)
/* and record this rule as the rule to use if that /* and record this rule as the rule to use if that
token follows. */ token follows. */
if (BITISSET (LA (state->lookaheadsp + i), j)) if (bitset_test (LA[state->lookaheadsp + i], j))
actrow[j] = -LAruleno[state->lookaheadsp + i]; actrow[j] = -LAruleno[state->lookaheadsp + i];
} }
@@ -488,7 +488,7 @@ save_row (int state)
static void static void
token_actions (void) token_actions (void)
{ {
int i; size_t i;
short *yydefact = XCALLOC (short, nstates); short *yydefact = XCALLOC (short, nstates);
actrow = XCALLOC (short, ntokens); actrow = XCALLOC (short, ntokens);
@@ -641,9 +641,9 @@ save_column (int symbol, int default_state)
static int static int
default_goto (int symbol) default_goto (int symbol)
{ {
int i; size_t i;
int m = goto_map[symbol]; size_t m = goto_map[symbol];
int n = goto_map[symbol + 1]; size_t n = goto_map[symbol + 1];
int default_state = -1; int default_state = -1;
int max = 0; int max = 0;
@@ -741,7 +741,7 @@ matching_state (int vector)
int w; int w;
int prev; int prev;
if (i >= nstates) if (i >= (int) nstates)
return -1; return -1;
t = tally[i]; t = tally[i];
@@ -913,7 +913,7 @@ output_check (void)
static void static void
output_actions (void) output_actions (void)
{ {
int i; size_t i;
nvectors = nstates + nvars; nvectors = nstates + nvars;
froms = XCALLOC (short *, nvectors); froms = XCALLOC (short *, nvectors);

View File

@@ -216,7 +216,7 @@ print_reductions (FILE *out, state_t *state)
int default_rule = LAruleno[state->lookaheadsp]; int default_rule = LAruleno[state->lookaheadsp];
for (i = 0; i < ntokens; ++i) for (i = 0; i < ntokens; ++i)
if (BITISSET (LA (state->lookaheadsp), i) if (bitset_test (LA[state->lookaheadsp], i)
&& bitset_test (shiftset, i)) && bitset_test (shiftset, i))
bitset_set (lookaheadset, i); bitset_set (lookaheadset, i);
else else
@@ -244,7 +244,7 @@ print_reductions (FILE *out, state_t *state)
int j, k; int j, k;
for (k = 0; k < ntokens; ++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_test (shiftset, k))
bitset_set (lookaheadset, k); bitset_set (lookaheadset, k);
else else
@@ -278,7 +278,7 @@ print_reductions (FILE *out, state_t *state)
for (j = 0; j < state->nlookaheads; ++j) 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) if (count == 0)
{ {
@@ -479,7 +479,7 @@ print_grammar (FILE *out)
void void
print_results (void) print_results (void)
{ {
int i; size_t i;
/* We used to use just .out if SPEC_NAME_PREFIX (-p) was used, but /* We used to use just .out if SPEC_NAME_PREFIX (-p) was used, but
that conflicts with Posix. */ that conflicts with Posix. */

View File

@@ -172,7 +172,7 @@ print_state (state_t *state)
void void
print_graph (void) print_graph (void)
{ {
int i; size_t i;
/* Output file. */ /* Output file. */
fgraph = xfopen (spec_graph_file, "w"); fgraph = xfopen (spec_graph_file, "w");