X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/e9690142325711b320ef444768fdd40a087d02f7..827aca04ebd852b63087d80d8e420bb325bb9bd5:/src/reduce.c diff --git a/src/reduce.c b/src/reduce.c index c45ce6ea..eea11b1e 100644 --- a/src/reduce.c +++ b/src/reduce.c @@ -1,6 +1,6 @@ /* Grammar reduction for Bison. - Copyright (C) 1988-1989, 2000-2003, 2005-2011 Free Software + Copyright (C) 1988-1989, 2000-2003, 2005-2013 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -29,7 +29,6 @@ #include "system.h" #include -#include #include "complain.h" #include "files.h" @@ -50,7 +49,7 @@ static bitset P; static bitset V; /* Set of symbols used to define rule precedence (so they are - `useless', but no warning should be issued). */ + 'useless', but no warning should be issued). */ static bitset V1; static rule_number nuseful_productions; @@ -286,13 +285,12 @@ reduce_grammar_tables (void) static void nonterminals_reduce (void) { - symbol_number i, n; - /* Map the nonterminals to their new index: useful first, useless afterwards. Kept for later report. */ symbol_number *nontermmap = xnmalloc (nvars, sizeof *nontermmap); - n = ntokens; + symbol_number n = ntokens; + symbol_number i; for (i = ntokens; i < nsyms; i++) if (bitset_test (V, i)) nontermmap[i - ntokens] = n++; @@ -300,8 +298,10 @@ nonterminals_reduce (void) if (!bitset_test (V, i)) { nontermmap[i - ntokens] = n++; - warn_at (symbols[i]->location, _("nonterminal useless in grammar: %s"), - symbols[i]->tag); + if (symbols[i]->status != used) + complain (&symbols[i]->location, Wother, + _("nonterminal useless in grammar: %s"), + symbols[i]->tag); } @@ -383,15 +383,15 @@ static void reduce_print (void) { if (nuseless_nonterminals > 0) - warn (ngettext ("%d nonterminal useless in grammar", - "%d nonterminals useless in grammar", - nuseless_nonterminals), - nuseless_nonterminals); + complain (NULL, Wother, ngettext ("%d nonterminal useless in grammar", + "%d nonterminals useless in grammar", + nuseless_nonterminals), + nuseless_nonterminals); if (nuseless_productions > 0) - warn (ngettext ("%d rule useless in grammar", - "%d rules useless in grammar", - nuseless_productions), - nuseless_productions); + complain (NULL, Wother, ngettext ("%d rule useless in grammar", + "%d rules useless in grammar", + nuseless_productions), + nuseless_productions); } void @@ -416,7 +416,7 @@ reduce_grammar (void) reduce_print (); if (!bitset_test (N, accept->number - ntokens)) - fatal_at (startsymbol_location, + complain (&startsymbol_location, fatal, _("start symbol %s does not derive any sentence"), startsymbol->tag); @@ -432,8 +432,8 @@ reduce_grammar (void) { grammar_dump (stderr, "Reduced Grammar"); - fprintf (stderr, "reduced %s defines %d terminals, %d nonterminals\ -, and %d productions.\n", + fprintf (stderr, "reduced %s defines %d terminals, %d nonterminals" + ", and %d productions.\n", grammar_file, ntokens, nvars, nrules); } }