#include "getargs.h"
#include "files.h"
#include "gram.h"
-#include "alloc.h"
+#include "xalloc.h"
#include "complain.h"
#include "reduce.h"
-
-extern char **tags; /* reader.c */
-static int statisticsflag; /* XXXXXXX */
-extern int fixed_outfiles;
+#include "reader.h"
+#include "getargs.h"
typedef unsigned *BSet;
typedef short *rule;
/* N is set as built. Np is set being built this iteration. P is
set of all productions which have a RHS all in N. */
- Np = NEW2 (WORDSIZE (nvars), unsigned);
+ Np = XCALLOC (unsigned, WORDSIZE (nvars));
/* The set being computed is a set of nonterminals which can derive
the empty string or strings consisting of all terminals. At each
Np = N;
N = Ns;
}
- FREE (N);
+ XFREE (N);
N = Np;
}
terminals are printed (if running in verbose mode) so that the
user can know. */
- Vp = NEW2 (WORDSIZE (nsyms), unsigned);
- Pp = NEW2 (WORDSIZE (nrules + 1), unsigned);
+ Vp = XCALLOC (unsigned, WORDSIZE (nsyms));
+ Pp = XCALLOC (unsigned, WORDSIZE (nrules + 1));
/* If the start symbol isn't useful, then nothing will be useful. */
if (!BITISSET (N, start_symbol - ntokens))
}
end_iteration:
- FREE (V);
+ XFREE (V);
V = Vp;
/* Tokens 0, 1, and 2 are internal to Bison. Consider them useful. */
SETBIT (V, 1); /* error token */
SETBIT (V, 2); /* some undefined token */
- FREE (P);
+ XFREE (P);
P = Pp;
nuseful_productions = bits_size (P, WORDSIZE (nrules + 1));
number. -1 in the map means it was useless and is being
eliminated. */
- nontermmap = NEW2 (nvars, short) - ntokens;
+ nontermmap = XCALLOC (short, nvars) - ntokens;
for (i = ntokens; i < nsyms; i++)
nontermmap[i] = -1;
if (nuseless_nonterminals > 0)
{
- fprintf (foutput, _("Useless nonterminals:\n\n"));
+ fputs (_("Useless nonterminals:"), foutput);
+ fputs ("\n\n", foutput);
for (i = ntokens; i < nsyms; i++)
if (!BITISSET (V, i))
fprintf (foutput, " %s\n", tags[i]);
{
if (!b)
{
- fprintf (foutput, _("\n\nTerminals which are not used:\n\n"));
+ fputs ("\n\n", foutput);
+ fprintf (foutput, _("Terminals which are not used:"));
+ fputs ("\n\n", foutput);
b = TRUE;
}
fprintf (foutput, " %s\n", tags[i]);
if (nuseless_productions > 0)
{
- fprintf (foutput, _("\n\nUseless rules:\n\n"));
+ fputs ("\n\n", foutput);
+ fprintf (foutput, _("Useless rules:"));
+ fputs ("\n\n", foutput);
for (i = 1; i <= nrules; i++)
{
if (!BITISSET (P, i))
}
}
if (nuseless_nonterminals > 0 || nuseless_productions > 0 || b)
- fprintf (foutput, "\n\n");
+ fputs ("\n\n", foutput);
}
\f
#if 0 /* XXX currently unused. */
static void
print_notices (void)
{
- if (fixed_outfiles && nuseless_productions)
+ if (yacc_flag && nuseless_productions)
fprintf (stderr, _("%d rules never reduced\n"), nuseless_productions);
fprintf (stderr, _("%s contains "), infile);
/* Allocate the global sets used to compute the reduced grammar */
- N = NEW2 (WORDSIZE (nvars), unsigned);
- P = NEW2 (WORDSIZE (nrules + 1), unsigned);
- V = NEW2 (WORDSIZE (nsyms), unsigned);
- V1 = NEW2 (WORDSIZE (nsyms), unsigned);
+ N = XCALLOC (unsigned, WORDSIZE (nvars));
+ P = XCALLOC (unsigned, WORDSIZE (nrules + 1));
+ V = XCALLOC (unsigned, WORDSIZE (nsyms));
+ V1 = XCALLOC (unsigned, WORDSIZE (nsyms));
useless_nonterminals ();
inaccessable_symbols ();
reduced = (bool) (nuseless_nonterminals + nuseless_productions > 0);
- if (verboseflag)
+ if (verbose_flag)
print_results ();
if (reduced == FALSE)
reduce_grammar_tables ();
#if 0
- if (verboseflag)
+ if (verbose_flag)
{
fprintf (foutput, "REDUCED GRAMMAR\n\n");
dump_grammar ();
}
#endif
- statisticsflag = FALSE; /* someday getopts should handle this */
- if (statisticsflag == TRUE)
+
+ if (statistics_flag)
fprintf (stderr, _("reduced %s defines %d terminal%s, %d nonterminal%s\
, and %d production%s.\n"),
infile,
done_reducing:
/* Free the global sets used to compute the reduced grammar */
- FREE (N);
- FREE (V);
- FREE (P);
+ XFREE (N);
+ XFREE (V);
+ XFREE (P);
}