mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-15 23:33:03 +00:00
In the XML output, list useless and unused symbols and rules with the
useful ones and add a "usefulness" attribute. Discussed starting at <http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00017.html>. * src/gram.c (grammar_rules_partial_print_xml): Remove. (grammar_rules_print_xml): Print all rules instead of just those useful in the grammar, and add a "usefulness" attribute. * src/gram.h (grammar_rules_partial_print_xml): Remove prototype. * src/print-xml.c (print_rules_useless_in_parser): Remove. (print_grammar): Print all nonterminals instead of just useful ones, and add a "usefulness" attribute to nonterminals and terminals. (print_xml): Don't print a separate "reductions" or "rules-useless-in-parser" element. * src/reduce.c (reduce_output): Use reduce_token_unused_in_grammar. (reduce_xml): Remove. (reduce_token_unused_in_grammar): New. (reduce_nonterminal_useless_in_grammar): New. * src/reduce.h (reduce_xml): Remove prototype. (reduce_token_unused_in_grammar): Add prototype. (reduce_nonterminal_useless_in_grammar): Add prototype. * data/xslt/xml2text.xsl: Update for XML changes. * data/xslt/xml2xhtml.xsl: Update for XML changes. * tests/reduce.at (Useless Terminals): Update output. (Useless Rules): Update output. (Reduced Automaton): Update output. Say "Terminals unused in grammar" instead of "Unused terminals". * NEWS (2.3a+): Update. * doc/bison.texinfo (Understanding): Update example output. * src/reduce.c (reduce_output): Implement. * data/xslt/xml2text.xsl: Implement. * data/xslt/xml2xhtml.xsl: Implement.
This commit is contained in:
75
src/reduce.c
75
src/reduce.c
@@ -358,10 +358,10 @@ reduce_output (FILE *out)
|
||||
bool b = false;
|
||||
int i;
|
||||
for (i = 0; i < ntokens; i++)
|
||||
if (!bitset_test (V, i) && !bitset_test (V1, i))
|
||||
if (reduce_token_unused_in_grammar (i))
|
||||
{
|
||||
if (!b)
|
||||
fprintf (out, "%s\n\n", _("Terminals which are not used"));
|
||||
fprintf (out, "%s\n\n", _("Terminals unused in grammar"));
|
||||
b = true;
|
||||
fprintf (out, " %s\n", symbols[i]->tag);
|
||||
}
|
||||
@@ -375,64 +375,6 @@ reduce_output (FILE *out)
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------.
|
||||
| Output the detailed results of the reductions. For FILE.xml. |
|
||||
`---------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
reduce_xml (FILE *out, int level)
|
||||
{
|
||||
fputc ('\n', out);
|
||||
xml_puts (out, level, "<reductions>");
|
||||
xml_puts (out, level + 1, "<useless-in-grammar>");
|
||||
|
||||
if (nuseless_nonterminals > 0)
|
||||
{
|
||||
int i;
|
||||
xml_puts (out, level + 2, "<nonterminals>");
|
||||
for (i = 0; i < nuseless_nonterminals; ++i)
|
||||
xml_printf (out, level + 3,
|
||||
"<nonterminal>%s</nonterminal>",
|
||||
symbols[nsyms + i]->tag);
|
||||
xml_puts (out, level + 2, "</nonterminals>");
|
||||
}
|
||||
else
|
||||
xml_puts (out, level + 2, "<nonterminals/>");
|
||||
|
||||
if (nuseless_productions > 0)
|
||||
grammar_rules_partial_print_xml (out, level + 1, true,
|
||||
rule_useless_in_grammar_p);
|
||||
else
|
||||
xml_puts (out, level + 2, "<rules/>");
|
||||
|
||||
xml_puts (out, level + 1, "</useless-in-grammar>");
|
||||
xml_puts (out, level + 1, "<unused>");
|
||||
|
||||
{
|
||||
bool b = false;
|
||||
int i;
|
||||
for (i = 0; i < ntokens; i++)
|
||||
if (!bitset_test (V, i) && !bitset_test (V1, i))
|
||||
{
|
||||
if (!b)
|
||||
xml_puts (out, level + 2, "<terminals>");
|
||||
b = true;
|
||||
xml_printf (out, level + 3,
|
||||
"<terminal>%s</terminal>",
|
||||
xml_escape (symbols[i]->tag));
|
||||
}
|
||||
if (b)
|
||||
xml_puts (out, level + 2, "</terminals>");
|
||||
else
|
||||
xml_puts (out, level + 2, "<terminals/>");
|
||||
}
|
||||
|
||||
xml_puts (out, level + 1, "</unused>");
|
||||
xml_puts (out, level, "</reductions>");
|
||||
fputc ('\n', out);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------.
|
||||
| Report the results to STDERR. |
|
||||
`-------------------------------*/
|
||||
@@ -506,6 +448,19 @@ reduce_grammar (void)
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
reduce_token_unused_in_grammar (symbol_number i)
|
||||
{
|
||||
aver (i < ntokens);
|
||||
return !bitset_test (V, i) && !bitset_test (V1, i);
|
||||
}
|
||||
|
||||
bool
|
||||
reduce_nonterminal_useless_in_grammar (symbol_number i)
|
||||
{
|
||||
aver (ntokens <= i && i < nsyms + nuseless_nonterminals);
|
||||
return nsyms <= i;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------.
|
||||
| Free the global sets used to compute the reduced grammar. |
|
||||
|
||||
Reference in New Issue
Block a user