From 21f1b063d812990caeb738fa8db21085ece53a30 Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" Date: Tue, 9 Oct 2007 08:48:43 +0000 Subject: [PATCH 1/1] Make xml2dot.xsl and --graph produce the same output. * data/xslt/xml2dot.xsl (xsl:template match="rule"): Use a ` ' instead of a `\n'. That is, don't add escapes yet or they'll be doubly escaped later. (xsl:template name="output-node"): Use the new escape template instead of the string-replace template directly. (xsl:template name="output-edge"): Likewise. (xsl:template name="escape"): New, escapes backslashes and newlines in addition to quotation marks. * src/graphviz.c (start_graph, output_node, output_edge): Add whitespace to output for legibility. Make xml2text.xsl and --report produce the same output, and remove the XML "conflicts" element since a conflict summary is easily extracted from the automaton. * data/xslt/bison.xsl: New. (xsl:template match="state" mode="bison:count-conflicts): New. * data/xslt/xml2text.xsl: Import bison.xsl. (xsl:template match="bison-xml-report"): Instead of styling the "conflicts" element, style the "automaton" element with mode "conflicts". Unlike the former, the latter lists S/R and R/R conflicts for a state on the same line. (xsl:template match="conflicts"): Remove. (xsl:template match="conflict"): Remove. (xsl:template match="terminal"): Line-wrap the list of rules in which the terminal is used. (xsl:template match="nonterminal"): Likewise for nonterminals. (xsl:template match="automaton" mode="conflicts"): New. (xsl:template match="state" mode="conflicts"): New. (xsl:template name="line-wrap"): New. (xsl:template name="ws-search"): New. * data/xslt/xml2xhtml.xsl: Import bison.xsl. (xsl:template match="bison-xml-report"): Instead of styling the "conflicts" element, style the "automaton" element with mode "conflicts." (xsl:template match="conflicts"): Remove. (xsl:template match="conflict"): Remove. (xsl:template match="automaton" mode="conflicts"): New. (xsl:template match="state" mode="conflicts): New. * src/conflicts.c (conflicts_output_xml): Remove. * src/conflicts.h (conflicts_output_xml): Remove prototype. * src/print-xml.c (print_xml): Don't invoke conflicts_output_xml. * src/print.c (print_grammar): Consistently wrap at the 66th column so the corresponding XSLT is easier. Also, never wrap between a word and the comma that follows it. --- ChangeLog | 48 +++++++++++++ data/xslt/bison.xsl | 64 +++++++++++++++++ data/xslt/xml2dot.xsl | 73 +++++++++++-------- data/xslt/xml2text.xsl | 151 ++++++++++++++++++++++++++++++---------- data/xslt/xml2xhtml.xsl | 57 ++++++++++----- src/conflicts.c | 41 ----------- src/conflicts.h | 1 - src/graphviz.c | 8 +-- src/print-xml.c | 3 - src/print.c | 12 ++-- 10 files changed, 324 insertions(+), 134 deletions(-) create mode 100644 data/xslt/bison.xsl diff --git a/ChangeLog b/ChangeLog index 3afcb7d5..2d402891 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,51 @@ +2007-10-09 Joel E. Denny + + Make xml2dot.xsl and --graph produce the same output. + * data/xslt/xml2dot.xsl (xsl:template match="rule"): Use a ` ' + instead of a `\n'. That is, don't add escapes yet or they'll be doubly + escaped later. + (xsl:template name="output-node"): Use the new escape template instead + of the string-replace template directly. + (xsl:template name="output-edge"): Likewise. + (xsl:template name="escape"): New, escapes backslashes and newlines in + addition to quotation marks. + * src/graphviz.c (start_graph, output_node, output_edge): Add + whitespace to output for legibility. + + Make xml2text.xsl and --report produce the same output, and remove the + XML "conflicts" element since a conflict summary is easily extracted + from the automaton. + * data/xslt/bison.xsl: New. + (xsl:template match="state" mode="bison:count-conflicts): New. + * data/xslt/xml2text.xsl: Import bison.xsl. + (xsl:template match="bison-xml-report"): Instead of styling the + "conflicts" element, style the "automaton" element with mode + "conflicts". Unlike the former, the latter lists S/R and R/R + conflicts for a state on the same line. + (xsl:template match="conflicts"): Remove. + (xsl:template match="conflict"): Remove. + (xsl:template match="terminal"): Line-wrap the list of rules in which + the terminal is used. + (xsl:template match="nonterminal"): Likewise for nonterminals. + (xsl:template match="automaton" mode="conflicts"): New. + (xsl:template match="state" mode="conflicts"): New. + (xsl:template name="line-wrap"): New. + (xsl:template name="ws-search"): New. + * data/xslt/xml2xhtml.xsl: Import bison.xsl. + (xsl:template match="bison-xml-report"): Instead of styling the + "conflicts" element, style the "automaton" element with mode + "conflicts." + (xsl:template match="conflicts"): Remove. + (xsl:template match="conflict"): Remove. + (xsl:template match="automaton" mode="conflicts"): New. + (xsl:template match="state" mode="conflicts): New. + * src/conflicts.c (conflicts_output_xml): Remove. + * src/conflicts.h (conflicts_output_xml): Remove prototype. + * src/print-xml.c (print_xml): Don't invoke conflicts_output_xml. + * src/print.c (print_grammar): Consistently wrap at the 66th column so + the corresponding XSLT is easier. Also, never wrap between a word and + the comma that follows it. + 2007-10-08 Joel E. Denny Improve C++ namespace support. Discussed starting at diff --git a/data/xslt/bison.xsl b/data/xslt/bison.xsl new file mode 100644 index 00000000..6d96e014 --- /dev/null +++ b/data/xslt/bison.xsl @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + s + + + r + + + + + + , + + + + diff --git a/data/xslt/xml2dot.xsl b/data/xslt/xml2dot.xsl index 0f6a7f41..416ee13e 100644 --- a/data/xslt/xml2dot.xsl +++ b/data/xslt/xml2dot.xsl @@ -59,7 +59,7 @@ - \n + -> @@ -123,10 +123,8 @@ [label=" - + - - "] @@ -144,36 +142,55 @@ label=" - + - - " ] - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/xslt/xml2text.xsl b/data/xslt/xml2text.xsl index 7ec9edc8..74688525 100644 --- a/data/xslt/xml2text.xsl +++ b/data/xslt/xml2text.xsl @@ -25,8 +25,10 @@ --> - + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:bison="http://www.gnu.org/software/bison/"> + + @@ -36,7 +38,7 @@ - + @@ -91,23 +93,6 @@ - - - - - - - - - State - - conflicts: - - - - - - Grammar @@ -131,9 +116,16 @@ - - - + + + + + + + + @@ -144,19 +136,27 @@ - - - on left: - - - - , - - - on right: - - + + + + + + + on@left: + + + + , + + + on@right: + + + + + + @@ -164,6 +164,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -429,4 +464,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/xslt/xml2xhtml.xsl b/data/xslt/xml2xhtml.xsl index bf36a504..5648d14c 100644 --- a/data/xslt/xml2xhtml.xsl +++ b/data/xslt/xml2xhtml.xsl @@ -26,7 +26,10 @@ + xmlns="http://www.w3.org/1999/xhtml" + xmlns:bison="http://www.gnu.org/software/bison/"> + + - + @@ -206,32 +209,52 @@ - +

Conflicts

- + + + +

- +

- - - - - - - - conflicts: - - - - + + + + + + + + + + + + + + conflicts: + + + + + + + + + + + diff --git a/src/conflicts.c b/src/conflicts.c index 0f1f9298..9a02d4bb 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -522,47 +522,6 @@ conflicts_output (FILE *out) fputs ("\n\n", out); } -void -conflicts_output_xml (FILE *out, int level) -{ - bool printed_sth = false; - state_number i; - int src_num; - int rrc_num; - - for (i = 0; i < nstates; i++) - { - state *s = states[i]; - if (conflicts[i]) - { - if (!printed_sth) { - fputc ('\n', out); - xml_puts (out, level, ""); - } - - src_num = count_sr_conflicts (s); - rrc_num = count_rr_conflicts (s, true); - - if (src_num) - xml_printf (out, level + 1, - "", - i, src_num); - if (rrc_num) - xml_printf (out, level + 1, - "", - i, rrc_num); - - printed_sth = true; - } - } - if (printed_sth) - xml_puts (out, level, ""); - else - xml_puts (out, level, ""); -} - /*--------------------------------------------------------. | Total the number of S/R and R/R conflicts. Unlike the | | code in conflicts_output, however, count EACH pair of | diff --git a/src/conflicts.h b/src/conflicts.h index c6497ca7..d8264cca 100644 --- a/src/conflicts.h +++ b/src/conflicts.h @@ -37,7 +37,6 @@ void conflicts_update_state_numbers (state_number old_to_new[], void conflicts_print (void); int conflicts_total_count (void); void conflicts_output (FILE *out); -void conflicts_output_xml (FILE *out, int level); void conflicts_free (void); /* Were there conflicts? */ diff --git a/src/graphviz.c b/src/graphviz.c index 8e7bccb7..6454dc46 100644 --- a/src/graphviz.c +++ b/src/graphviz.c @@ -1,6 +1,6 @@ /* Output Graphviz specification of a state machine generated by Bison. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -38,20 +38,20 @@ quote (char const *name) void start_graph (FILE *fout) { - fputs ("digraph Automaton{\n", fout); + fputs ("digraph Automaton {\n", fout); } void output_node (int id, char const *label, FILE *fout) { - fprintf (fout, "%d[label=%s]\n", id, quote (label)); + fprintf (fout, " %d [label=%s]\n", id, quote (label)); } void output_edge (int source, int destination, char const *label, char const *style, FILE *fout) { - fprintf (fout, "%d->%d[style=%s", source, destination, style); + fprintf (fout, " %d -> %d [style=%s", source, destination, style); if (label) fprintf (fout, " label=%s", quote (label)); fputs ("]\n", fout); diff --git a/src/print-xml.c b/src/print-xml.c index 81f4d803..2a578488 100644 --- a/src/print-xml.c +++ b/src/print-xml.c @@ -584,9 +584,6 @@ print_xml (void) /* print rules never reduced */ print_rules_never_reduced (out, level + 1); - /* print conflicts */ - conflicts_output_xml (out, level + 1); - /* print grammar */ print_grammar (out, level + 1); diff --git a/src/print.c b/src/print.c index b0d4e0fb..157b25c6 100644 --- a/src/print.c +++ b/src/print.c @@ -401,7 +401,7 @@ print_grammar (FILE *out) buffer[0] = 0; column = strlen (tag); fputs (tag, out); - END_TEST (50); + END_TEST (65); sprintf (buffer, " (%d)", i); for (r = 0; r < nrules; r++) @@ -445,14 +445,16 @@ print_grammar (FILE *out) if (left_count > 0) { - END_TEST (50); + END_TEST (65); sprintf (buffer + strlen (buffer), _(" on left:")); for (r = 0; r < nrules; r++) { - END_TEST (65); if (rules[r].lhs->number == i) - sprintf (buffer + strlen (buffer), " %d", r); + { + END_TEST (65); + sprintf (buffer + strlen (buffer), " %d", r); + } } } @@ -460,7 +462,7 @@ print_grammar (FILE *out) { if (left_count > 0) sprintf (buffer + strlen (buffer), ","); - END_TEST (50); + END_TEST (65); sprintf (buffer + strlen (buffer), _(" on right:")); for (r = 0; r < nrules; r++) { -- 2.45.2