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.
2002-03-04 Akim Demaille <akim@epita.fr>
* src/closure.c (firsts): Now, also a bitset.
/* 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.
The entry point is generate_states. */
#include "system.h"
The entry point is generate_states. */
#include "system.h"
#include "symtab.h"
#include "getargs.h"
#include "reader.h"
#include "symtab.h"
#include "getargs.h"
#include "reader.h"
#include "lalr.h"
#include "reduce.h"
#include "lalr.h"
#include "reduce.h"
/* 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,
/* 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,
/* 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.
void generate_states PARAMS ((void));
void generate_states PARAMS ((void));
+extern unsigned int nstates;
extern int final_state;
#endif /* !LR0_H_ */
extern int final_state;
#endif /* !LR0_H_ */
/* 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.
02111-1307, USA. */
#include "system.h"
02111-1307, USA. */
#include "system.h"
#include "complain.h"
#include "getargs.h"
#include "symtab.h"
#include "complain.h"
#include "getargs.h"
#include "symtab.h"
static void
flush_reduce (int lookahead, int token)
{
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++)
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)
{
&& BITISSET (lookaheadset, i)
&& symbols[i]->prec)
{
precedence */
for (i = 0; i < state->nlookaheads; ++i)
if (rules[LAruleno[state->lookaheadsp + 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;
{
resolve_sr_conflict (state, state->lookaheadsp + i);
break;
for conflicts not resolved above. */
for (i = 0; i < state->nlookaheads; ++i)
{
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;
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)
{
}
}
void
solve_conflicts (void)
{
conflicts = XCALLOC (char, nstates);
shiftset = XCALLOC (unsigned, tokensetsize);
conflicts = XCALLOC (char, nstates);
shiftset = XCALLOC (unsigned, tokensetsize);
SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
for (i = 0; i < state->nlookaheads; ++i)
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];
for (k = 0; k < tokensetsize; ++k)
lookaheadset[k] &= shiftset[k];
int count = 0;
int j;
for (j = 0; j < state->nlookaheads; ++j)
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))
conflicts_output (FILE *out)
{
bool printed_sth = FALSE;
conflicts_output (FILE *out)
{
bool printed_sth = FALSE;
for (i = 0; i < nstates; i++)
if (conflicts[i])
{
for (i = 0; i < nstates; i++)
if (conflicts[i])
{
void
conflicts_print (void)
{
void
conflicts_print (void)
{
/* 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
/* 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"
tokens they accept. */
#include "system.h"
#include "reader.h"
#include "types.h"
#include "LR0.h"
#include "reader.h"
#include "types.h"
#include "LR0.h"
state_t **states = NULL;
int tokensetsize;
state_t **states = NULL;
int tokensetsize;
-short *LAruleno;
-unsigned *LA;
+short *LAruleno = NULL;
+bitset *LA = NULL;
size_t nLA;
static int ngotos;
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>. */
/* And for the famous F variable, which name is so descriptive that a
comment is hardly needed. <grin>. */
static void
initialize_LA (void)
{
static void
initialize_LA (void)
{
- 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);
LAruleno = XCALLOC (short, nLA);
lookback = XCALLOC (shorts *, nLA);
static void
set_goto_map (void)
{
static void
set_goto_map (void)
{
short *temp_map;
goto_map = XCALLOC (short, nvars + 1) - ntokens;
short *temp_map;
goto_map = XCALLOC (short, nvars + 1) - ntokens;
for (i = 0; i < nLA; i++)
for (sp = lookback[i]; sp; sp = sp->next)
{
for (i = 0; i < nLA; i++)
for (sp = lookback[i]; sp; sp = sp->next)
{
- int size = LA (i + 1) - LA (i);
- 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);
static void
initialize_lookaheads (void)
{
static void
initialize_lookaheads (void)
{
nLA = 0;
for (i = 0; i < nstates; i++)
{
nLA = 0;
for (i = 0; i < nstates; i++)
{
static void
lookaheads_print (FILE *out)
{
static void
lookaheads_print (FILE *out)
{
fprintf (out, "Lookaheads: BEGIN\n");
for (i = 0; i < nstates; ++i)
{
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)
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);
fprintf (out, " on %d (%s) -> rule %d\n",
k, symbols[k]->tag,
-LAruleno[states[i]->lookaheadsp + j] - 1);
/* 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.
#ifndef LALR_H_
# define LALR_H_
#ifndef LALR_H_
# define LALR_H_
/* Import the definition of CORE, SHIFTS and REDUCTIONS. */
# include "state.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. */
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)
/* All the states, indexed by the state number. */
/* All the states, indexed by the state number. */
/* 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.
This file is part of Bison, the GNU Compiler Compiler.
Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
#include "getargs.h"
#include "files.h"
#include "complain.h"
#include "getargs.h"
#include "files.h"
#include "complain.h"
static void
output_stos (void)
{
static void
output_stos (void)
{
short *values = (short *) alloca (sizeof (short) * nstates);
for (i = 0; i < nstates; ++i)
values[i] = states[i]->accessing_symbol;
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. */
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];
}
actrow[j] = -LAruleno[state->lookaheadsp + i];
}
static void
token_actions (void)
{
static void
token_actions (void)
{
short *yydefact = XCALLOC (short, nstates);
actrow = XCALLOC (short, ntokens);
short *yydefact = XCALLOC (short, nstates);
actrow = XCALLOC (short, ntokens);
static int
default_goto (int symbol)
{
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 default_state = -1;
int max = 0;
+ if (i >= (int) nstates)
static void
output_actions (void)
{
static void
output_actions (void)
{
nvectors = nstates + nvars;
froms = XCALLOC (short *, nvectors);
nvectors = nstates + nvars;
froms = XCALLOC (short *, nvectors);
int default_rule = LAruleno[state->lookaheadsp];
for (i = 0; i < ntokens; ++i)
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
&& bitset_test (shiftset, i))
bitset_set (lookaheadset, i);
else
int j, k;
for (k = 0; k < ntokens; ++k)
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
&& ! bitset_test (shiftset, k))
bitset_set (lookaheadset, k);
else
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))
void
print_results (void)
{
void
print_results (void)
{
/* We used to use just .out if SPEC_NAME_PREFIX (-p) was used, but
that conflicts with Posix. */
/* We used to use just .out if SPEC_NAME_PREFIX (-p) was used, but
that conflicts with Posix. */
void
print_graph (void)
{
void
print_graph (void)
{
/* Output file. */
fgraph = xfopen (spec_graph_file, "w");
/* Output file. */
fgraph = xfopen (spec_graph_file, "w");