* data/xslt/bison.xsl (bison:ruleNumber): Rename to...

(bison:ruleByNumber): ... this for clarity.
* data/xslt/xml2dot.xsl (xsl:template match="item"): Update.
* data/xslt/xml2text.xsl (xsl:template match="item"): Update.
(xsl:template match="reduction"): Update.
(xsl:template match="item"): Update.
(xsl:template match="reduction"): Update.

In the XML output, don't print the list of rules where symbols appear.
Compute it in XSLT instead.  Discussed at
<http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00024.html>.
* data/xslt/bison.xsl (bison:ruleByLhs): New.
(bison:ruleByRhs): New.
* data/xslt/xml2text.xsl (xsl:template match="terminal"): Use
bison:ruleByRhs.
(xsl:template match="terminal/rule"): Remove.
(xsl:template match="nonterminal"): Use bison:ruleByLhs and
bison:ruleByRhs.
(xsl:template match="nonterminal/left/rule|nonterminal/right/rule"):
Remove.
* data/xslt/xml2xhtml.xsl (xsl:template match="terminal"): Use
bison:ruleByRhs and mode="number-link" for rule template.
(xsl:template match="terminal/rule"): Remove.
(xsl:template match="nonterminal"): Use bison:ruleByLhs and
bison:ruleByRhs and mode="number-link" for rule template.
(xsl:template match="nonterminal/left/rule|nonterminal/right/rule"):
Rewrite as...
(xsl:template match="rule" mode="number-link"): ... this.
* src/print-xml.c (print_grammar): Don't print the list of rules.
This commit is contained in:
Joel E. Denny
2007-12-08 16:05:38 +00:00
parent ef1b427325
commit d4a26c4832
6 changed files with 98 additions and 109 deletions

View File

@@ -392,24 +392,12 @@ print_grammar (FILE *out, int level)
if (token_translations[i] != undeftoken->number)
{
char const *tag = symbols[token_translations[i]]->tag;
rule_number r;
item_number *rhsp;
xml_printf (out, level + 2,
"<terminal symbol-number=\"%d\" token-number=\"%d\""
" name=\"%s\" usefulness=\"%s\">",
" name=\"%s\" usefulness=\"%s\"/>",
token_translations[i], i, xml_escape (tag),
reduce_token_unused_in_grammar (token_translations[i])
? "unused-in-grammar" : "useful");
for (r = 0; r < nrules; r++)
for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
if (item_number_as_symbol_number (*rhsp) == token_translations[i])
{
xml_printf (out, level + 3, "<rule>%d</rule>", r);
break;
}
xml_puts (out, level + 2, "</terminal>");
}
xml_puts (out, level + 1, "</terminals>");
@@ -417,58 +405,13 @@ print_grammar (FILE *out, int level)
xml_puts (out, level + 1, "<nonterminals>");
for (i = ntokens; i < nsyms + nuseless_nonterminals; i++)
{
int left_count = 0, right_count = 0;
rule_number r;
char const *tag = symbols[i]->tag;
for (r = 0; r < nrules; r++)
{
item_number *rhsp;
if (rules[r].lhs->number == i)
left_count++;
for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
if (item_number_as_symbol_number (*rhsp) == i)
{
right_count++;
break;
}
}
xml_printf (out, level + 2,
"<nonterminal symbol-number=\"%d\" name=\"%s\""
" usefulness=\"%s\">",
" usefulness=\"%s\"/>",
i, xml_escape (tag),
reduce_nonterminal_useless_in_grammar (i)
? "useless-in-grammar" : "useful");
if (left_count > 0)
{
xml_puts (out, level + 3, "<left>");
for (r = 0; r < nrules; r++)
{
if (rules[r].lhs->number == i)
xml_printf (out, level + 4, "<rule>%d</rule>", r);
}
xml_puts (out, level + 3, "</left>");
}
if (right_count > 0)
{
xml_puts (out, level + 3, "<right>");
for (r = 0; r < nrules; r++)
{
item_number *rhsp;
for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
if (item_number_as_symbol_number (*rhsp) == i)
{
xml_printf (out, level + 4, "<rule>%d</rule>", r);
break;
}
}
xml_puts (out, level + 3, "</right>");
}
xml_puts (out, level + 2, "</nonterminal>");
}
xml_puts (out, level + 1, "</nonterminals>");
xml_puts (out, level, "</grammar>");