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>
+
+ * 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>
* src/closure.c (firsts): Now, also a bitset.
/* 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.
The entry point is generate_states. */
#include "system.h"
+#include "bitset.h"
#include "symtab.h"
#include "getargs.h"
#include "reader.h"
#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,
/* 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.
void generate_states PARAMS ((void));
-extern int nstates;
+extern unsigned int nstates;
extern int final_state;
#endif /* !LR0_H_ */
/* 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.
02111-1307, USA. */
#include "system.h"
+#include "bitset.h"
#include "complain.h"
#include "getargs.h"
#include "symtab.h"
static void
flush_reduce (int lookahead, int token)
{
- RESETBIT (LA (lookahead), token);
+ bitset_reset (LA[lookahead], token);
}
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)
{
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;
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);
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];
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)
conflicts_output (FILE *out)
{
bool printed_sth = FALSE;
- int i;
+ size_t i;
for (i = 0; i < nstates; i++)
if (conflicts[i])
{
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
tokens they accept. */
#include "system.h"
+#include "bitset.h"
#include "reader.h"
#include "types.h"
#include "LR0.h"
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>. */
static void
initialize_LA (void)
{
- int i;
+ size_t i;
int j;
short *np;
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);
static void
set_goto_map (void)
{
- int state, i;
+ size_t state;
+ int i;
short *temp_map;
goto_map = XCALLOC (short, nvars + 1) - ntokens;
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. */
static void
initialize_lookaheads (void)
{
- int i;
+ size_t i;
nLA = 0;
for (i = 0; i < nstates; i++)
{
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)
{
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);
/* 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.
#ifndef LALR_H_
# define LALR_H_
+#include "bitset.h"
/* Import the definition of CORE, SHIFTS and REDUCTIONS. */
# include "state.h"
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. */
/* 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.
#include "system.h"
+#include "bitset.h"
#include "getargs.h"
#include "files.h"
#include "complain.h"
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;
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];
}
static void
token_actions (void)
{
- int i;
+ size_t i;
short *yydefact = XCALLOC (short, nstates);
actrow = XCALLOC (short, ntokens);
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;
int w;
int prev;
- if (i >= nstates)
+ if (i >= (int) nstates)
return -1;
t = tally[i];
static void
output_actions (void)
{
- int i;
+ size_t i;
nvectors = nstates + nvars;
froms = XCALLOC (short *, nvectors);
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
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
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)
{
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. */
void
print_graph (void)
{
- int i;
+ size_t i;
/* Output file. */
fgraph = xfopen (spec_graph_file, "w");