mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-10 04:43:03 +00:00
* src/reduce.c (nonterminals_reduce): Instead of throwing away
useless nonterminals, move them at the end of the symbol arrays. (reduce_output): Adjust. * tests/reduce.at (Useless Nonterminals): Adjust.
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
2001-11-30 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* src/reduce.c (nonterminals_reduce): Instead of throwing away
|
||||
useless nonterminals, move them at the end of the symbol arrays.
|
||||
(reduce_output): Adjust.
|
||||
* tests/reduce.at (Useless Nonterminals): Adjust.
|
||||
|
||||
2001-11-30 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* src/reduce.c: Various comment/formatting changes.
|
||||
|
||||
3
NEWS
3
NEWS
@@ -3,6 +3,9 @@ Bison News
|
||||
|
||||
Changes in version 1.30f:
|
||||
|
||||
* Reduced Grammars
|
||||
Fixed bugs when reporting useless nonterminals.
|
||||
|
||||
Changes in version 1.30e:
|
||||
|
||||
* Error messages
|
||||
|
||||
43
src/reduce.c
43
src/reduce.c
@@ -342,26 +342,38 @@ nonterminals_reduce (void)
|
||||
in the map means it was useless and is being eliminated. */
|
||||
|
||||
short *nontermmap = XCALLOC (short, nvars) - ntokens;
|
||||
for (i = ntokens; i < nsyms; i++)
|
||||
nontermmap[i] = -1;
|
||||
|
||||
n = ntokens;
|
||||
for (i = ntokens; i < nsyms; i++)
|
||||
if (BITISSET (V, i))
|
||||
nontermmap[i] = n++;
|
||||
for (i = ntokens; i < nsyms; i++)
|
||||
if (!BITISSET (V, i))
|
||||
nontermmap[i] = n++;
|
||||
|
||||
|
||||
/* Shuffle elements of tables indexed by symbol number. */
|
||||
{
|
||||
short *sassoc_sorted = XMALLOC (short, nvars) - ntokens;
|
||||
short *sprec_sorted = XMALLOC (short, nvars) - ntokens;
|
||||
char **tags_sorted = XMALLOC (char *, nvars) - ntokens;
|
||||
|
||||
for (i = ntokens; i < nsyms; i++)
|
||||
{
|
||||
n = nontermmap[i];
|
||||
if (n >= 0)
|
||||
{
|
||||
sassoc[n] = sassoc[i];
|
||||
sprec[n] = sprec[i];
|
||||
tags[n] = tags[i];
|
||||
}
|
||||
}
|
||||
for (i = ntokens; i < nsyms; i++)
|
||||
{
|
||||
n = nontermmap[i];
|
||||
sassoc_sorted[n] = sassoc[i];
|
||||
sprec_sorted[n] = sprec[i];
|
||||
tags_sorted[n] = tags[i];
|
||||
}
|
||||
for (i = ntokens; i < nsyms; i++)
|
||||
{
|
||||
sassoc[i] = sassoc_sorted[i];
|
||||
sprec[i] = sprec_sorted[i];
|
||||
tags[i] = tags_sorted[i];
|
||||
}
|
||||
free (sassoc_sorted + ntokens);
|
||||
free (sprec_sorted + ntokens);
|
||||
free (tags_sorted + ntokens);
|
||||
}
|
||||
|
||||
/* Replace all symbol numbers in valid data structures. */
|
||||
|
||||
@@ -403,9 +415,8 @@ reduce_output (FILE *out)
|
||||
{
|
||||
fprintf (out, _("Useless nonterminals:"));
|
||||
fprintf (out, "\n\n");
|
||||
for (i = ntokens; i < nsyms; i++)
|
||||
if (!BITISSET (V, i))
|
||||
fprintf (out, " %s\n", tags[i]);
|
||||
for (i = 0; i < nuseless_nonterminals; ++i)
|
||||
fprintf (out, " %s\n", tags[nsyms + i]);
|
||||
}
|
||||
b = FALSE;
|
||||
for (i = 0; i < ntokens; i++)
|
||||
|
||||
@@ -88,10 +88,12 @@ AT_DATA([[input.y]],
|
||||
exp: useful;
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison input.y]])
|
||||
AT_CHECK([[bison input.y]], 0, [],
|
||||
[[input.y contains 9 useless nonterminals
|
||||
]])
|
||||
|
||||
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
|
||||
[[Terminals which are not used:
|
||||
[[Useless nonterminals:
|
||||
useless1
|
||||
useless2
|
||||
useless3
|
||||
|
||||
Reference in New Issue
Block a user