mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-16 07:43: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:
58
src/gram.c
58
src/gram.c
@@ -196,36 +196,6 @@ grammar_rules_partial_print (FILE *out, const char *title,
|
||||
fputs ("\n\n", out);
|
||||
}
|
||||
|
||||
void
|
||||
grammar_rules_partial_print_xml (FILE *out, int level, bool rtag,
|
||||
rule_filter filter)
|
||||
{
|
||||
rule_number r;
|
||||
bool first = true;
|
||||
|
||||
for (r = 0; r < nrules + nuseless_productions; r++)
|
||||
{
|
||||
if (filter && !filter (&rules[r]))
|
||||
continue;
|
||||
if (rtag && first)
|
||||
xml_puts (out, level + 1, "<rules>");
|
||||
first = false;
|
||||
|
||||
xml_printf (out, level + 2, "<rule number=\"%d\">",
|
||||
rules[r].number);
|
||||
rule_lhs_print_xml (&rules[r], out, level + 3);
|
||||
rule_rhs_print_xml (&rules[r], out, level + 3);
|
||||
xml_puts (out, level + 2, "</rule>");
|
||||
}
|
||||
if (rtag)
|
||||
{
|
||||
if (!first)
|
||||
xml_puts (out, level + 1, "</rules>");
|
||||
else
|
||||
xml_puts (out, level + 1, "<rules/>");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
grammar_rules_print (FILE *out)
|
||||
{
|
||||
@@ -235,7 +205,33 @@ grammar_rules_print (FILE *out)
|
||||
void
|
||||
grammar_rules_print_xml (FILE *out, int level)
|
||||
{
|
||||
grammar_rules_partial_print_xml (out, level, true, rule_useful_in_grammar_p);
|
||||
rule_number r;
|
||||
bool first = true;
|
||||
|
||||
for (r = 0; r < nrules + nuseless_productions; r++)
|
||||
{
|
||||
if (first)
|
||||
xml_puts (out, level + 1, "<rules>");
|
||||
first = false;
|
||||
{
|
||||
char const *usefulness;
|
||||
if (rule_useless_in_grammar_p (&rules[r]))
|
||||
usefulness = "useless-in-grammar";
|
||||
else if (rule_useless_in_parser_p (&rules[r]))
|
||||
usefulness = "useless-in-parser";
|
||||
else
|
||||
usefulness = "useful";
|
||||
xml_printf (out, level + 2, "<rule number=\"%d\" usefulness=\"%s\">",
|
||||
rules[r].number, usefulness);
|
||||
}
|
||||
rule_lhs_print_xml (&rules[r], out, level + 3);
|
||||
rule_rhs_print_xml (&rules[r], out, level + 3);
|
||||
xml_puts (out, level + 2, "</rule>");
|
||||
}
|
||||
if (!first)
|
||||
xml_puts (out, level + 1, "</rules>");
|
||||
else
|
||||
xml_puts (out, level + 1, "<rules/>");
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user