Use bitset operations when possible, not loops over bits.

* src/conflicts.c (set_conflicts, count_sr_conflicts): Use
bitset_or.
* src/print.c (print_reductions): Use bitset_and, bitset_andn.
* src/reduce.c (useless_nonterminals): Formatting changes.
* src/warshall.c (TC): Use bitset_or.
This commit is contained in:
Akim Demaille
2002-03-04 12:05:30 +00:00
parent 0e721e7569
commit f9abaa2c4c
5 changed files with 53 additions and 63 deletions

View File

@@ -1,3 +1,14 @@
2002-03-04 Akim Demaille <akim@epita.fr>
Use bitset operations when possible, not loops over bits.
* src/conflicts.c (set_conflicts, count_sr_conflicts): Use
bitset_or.
* src/print.c (print_reductions): Use bitset_and, bitset_andn.
* src/reduce.c (useless_nonterminals): Formatting changes.
* src/warshall.c (TC): Use bitset_or.
2002-03-04 Akim Demaille <akim@epita.fr> 2002-03-04 Akim Demaille <akim@epita.fr>
* src/lalr.h, src/lalr.c (tokensetsize): Remove, unused. * src/lalr.h, src/lalr.c (tokensetsize): Remove, unused.

View File

@@ -186,14 +186,13 @@ 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)
{ {
/* FIXME: Here, I need something like `bitset_disjoint_p'. */
for (j = 0; j < ntokens; ++j) for (j = 0; j < ntokens; ++j)
if (bitset_test (LA[state->lookaheadsp + i], j) if (bitset_test (LA[state->lookaheadsp + i], j)
&& bitset_test (lookaheadset, j)) && bitset_test (lookaheadset, j))
conflicts[state->number] = 1; conflicts[state->number] = 1;
for (j = 0; j < ntokens; ++j) bitset_or (lookaheadset, lookaheadset, LA[state->lookaheadsp + i]);
if (bitset_test (LA[state->lookaheadsp + i], j))
bitset_set (lookaheadset, j);
} }
} }
@@ -220,7 +219,7 @@ solve_conflicts (void)
static int static int
count_sr_conflicts (state_t *state) count_sr_conflicts (state_t *state)
{ {
int i, k; int i;
int src_count = 0; int src_count = 0;
shifts *shiftp = state->shifts; shifts *shiftp = state->shifts;
@@ -235,9 +234,7 @@ count_sr_conflicts (state_t *state)
bitset_set (shiftset, SHIFT_SYMBOL (shiftp, i)); bitset_set (shiftset, SHIFT_SYMBOL (shiftp, i));
for (i = 0; i < state->nlookaheads; ++i) for (i = 0; i < state->nlookaheads; ++i)
for (k = 0; k < ntokens; ++k) bitset_or (lookaheadset, lookaheadset, LA[state->lookaheadsp + i]);
if (bitset_test (LA[state->lookaheadsp + i], k))
bitset_set (lookaheadset, k);
bitset_and (lookaheadset, lookaheadset, shiftset); bitset_and (lookaheadset, lookaheadset, shiftset);

View File

@@ -215,12 +215,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) bitset_and (lookaheadset, LA[state->lookaheadsp], shiftset);
if (bitset_test (LA[state->lookaheadsp], i)
&& bitset_test (shiftset, i))
bitset_set (lookaheadset, i);
else
bitset_reset (lookaheadset, i);
for (i = 0; i < ntokens; i++) for (i = 0; i < ntokens; i++)
if (bitset_test (lookaheadset, i)) if (bitset_test (lookaheadset, i))
@@ -241,14 +236,9 @@ print_reductions (FILE *out, state_t *state)
for (i = 0; i < state->nlookaheads; ++i) for (i = 0; i < state->nlookaheads; ++i)
{ {
int count = 0; int count = 0;
int j, k; int j;
for (k = 0; k < ntokens; ++k) bitset_andn (lookaheadset, LA[state->lookaheadsp + i], shiftset);
if (bitset_test (LA[state->lookaheadsp + i], k)
&& ! bitset_test (shiftset, k))
bitset_set (lookaheadset, k);
else
bitset_reset (lookaheadset, k);
for (j = 0; j < ntokens; j++) for (j = 0; j < ntokens; j++)
if (bitset_test (lookaheadset, j)) if (bitset_test (lookaheadset, j))
@@ -277,39 +267,37 @@ print_reductions (FILE *out, state_t *state)
int count = bitset_test (shiftset, i); int count = bitset_test (shiftset, i);
for (j = 0; j < state->nlookaheads; ++j) for (j = 0; j < state->nlookaheads; ++j)
{ if (bitset_test (LA[state->lookaheadsp + j], i))
if (bitset_test (LA[state->lookaheadsp + j], i)) {
{ if (count == 0)
if (count == 0) {
{ if (state->lookaheadsp + j != default_LA)
if (state->lookaheadsp + j != default_LA)
fprintf (out,
_(" %-4s\treduce using rule %d (%s)\n"),
escape (symbols[i]->tag),
LAruleno[state->lookaheadsp + j] - 1,
escape2 (symbols[rules[LAruleno[state->lookaheadsp + j]].lhs]->tag));
else
defaulted = 1;
count++;
}
else
{
if (defaulted)
fprintf (out,
_(" %-4s\treduce using rule %d (%s)\n"),
escape (symbols[i]->tag),
LAruleno[default_LA] - 1,
escape2 (symbols[rules[LAruleno[default_LA]].lhs]->tag));
defaulted = 0;
fprintf (out, fprintf (out,
_(" %-4s\t[reduce using rule %d (%s)]\n"), _(" %-4s\treduce using rule %d (%s)\n"),
escape (symbols[i]->tag), escape (symbols[i]->tag),
LAruleno[state->lookaheadsp + j] - 1, LAruleno[state->lookaheadsp + j] - 1,
escape2 (symbols[rules[LAruleno[state->lookaheadsp + j]].lhs]->tag)); escape2 (symbols[rules[LAruleno[state->lookaheadsp + j]].lhs]->tag));
} else
} defaulted = 1;
}
count++;
}
else
{
if (defaulted)
fprintf (out,
_(" %-4s\treduce using rule %d (%s)\n"),
escape (symbols[i]->tag),
LAruleno[default_LA] - 1,
escape2 (symbols[rules[LAruleno[default_LA]].lhs]->tag));
defaulted = 0;
fprintf (out,
_(" %-4s\t[reduce using rule %d (%s)]\n"),
escape (symbols[i]->tag),
LAruleno[state->lookaheadsp + j] - 1,
escape2 (symbols[rules[LAruleno[state->lookaheadsp + j]].lhs]->tag));
}
}
} }
if (default_LA >= 0) if (default_LA >= 0)

View File

@@ -126,16 +126,12 @@ useless_nonterminals (void)
{ {
bitset_copy (Np, N); bitset_copy (Np, N);
for (i = 1; i <= nrules; i++) for (i = 1; i <= nrules; i++)
{ if (!bitset_test (P, i)
if (!bitset_test (P, i)) && useful_production (i, N))
{ {
if (useful_production (i, N)) bitset_set (Np, rules[i].lhs - ntokens);
{ bitset_set (P, i);
bitset_set (Np, rules[i].lhs - ntokens); }
bitset_set (P, i);
}
}
}
if (bitset_equal_p (N, Np)) if (bitset_equal_p (N, Np))
break; break;
Ns = Np; Ns = Np;

View File

@@ -79,7 +79,7 @@ bitmatrix_print (const char *title, bitset *matrix, size_t size)
static void static void
TC (bitset *matrix, int n) TC (bitset *matrix, int n)
{ {
int i, j, k; int i, j;
if (trace_flag) if (trace_flag)
bitmatrix_print ("TC: Input", matrix, n); bitmatrix_print ("TC: Input", matrix, n);
@@ -90,9 +90,7 @@ TC (bitset *matrix, int n)
for (i = 0; i < n; ++i) for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j) for (j = 0; j < n; ++j)
if (bitset_test (matrix[j], i)) if (bitset_test (matrix[j], i))
for (k = 0; k < n; ++k) bitset_or (matrix[j], matrix[j], matrix[i]);
if (bitset_test (matrix[i], k))
bitset_set (matrix[j], k);
if (trace_flag) if (trace_flag)
bitmatrix_print ("TC: Output", matrix, n); bitmatrix_print ("TC: Output", matrix, n);