[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 05/10] reports: let xml reports catch up with --report and --grap
From: |
Akim Demaille |
Subject: |
[PATCH 05/10] reports: let xml reports catch up with --report and --graph |
Date: |
Sat, 11 Jul 2020 12:55:23 +0200 |
The text and Dot reports are expected to be identical when generated
directly (--report, --graph) or indirectly (via XML). The xml
testsuite had not be run for ages, let it catch up a bit.
* src/print-xml.c: Pass the type of the symbols.
* data/xslt/xml2text.xsl
Catch up with the new layout.
Display the symbol types.
Use '•', not '.'
* tests/local.at: Smash '•' to '.' when matching against the direct
text report.
* tests/report.at: Adjust XML expectations.
---
data/xslt/xml2text.xsl | 20 ++++++++++++------
src/print-xml.c | 13 ++++++++----
tests/local.at | 9 ++++++--
tests/report.at | 48 +++++++++++++++++++++---------------------
4 files changed, 54 insertions(+), 36 deletions(-)
diff --git a/data/xslt/xml2text.xsl b/data/xslt/xml2text.xsl
index 3d0550dd..6aad1526 100644
--- a/data/xslt/xml2text.xsl
+++ b/data/xslt/xml2text.xsl
@@ -52,7 +52,7 @@
<xsl:if test="nonterminal[@usefulness='useless-in-grammar']">
<xsl:text>Nonterminals useless in grammar </xsl:text>
<xsl:for-each select="nonterminal[@usefulness='useless-in-grammar']">
- <xsl:text> </xsl:text>
+ <xsl:text> </xsl:text>
<xsl:value-of select="@name"/>
<xsl:text> </xsl:text>
</xsl:for-each>
@@ -65,7 +65,7 @@
<xsl:text>Terminals unused in grammar </xsl:text>
<xsl:for-each select="terminal[@usefulness='unused-in-grammar']">
<xsl:sort select="@symbol-number" data-type="number"/>
- <xsl:text> </xsl:text>
+ <xsl:text> </xsl:text>
<xsl:value-of select="@name"/>
<xsl:text> </xsl:text>
</xsl:for-each>
@@ -136,6 +136,7 @@
</xsl:template>
<xsl:template match="terminal">
+ <xsl:text> </xsl:text>
<xsl:value-of select="@name"/>
<xsl:call-template name="line-wrap">
<xsl:with-param name="first-line-length">
@@ -148,6 +149,9 @@
</xsl:with-param>
<xsl:with-param name="line-length" select="66" />
<xsl:with-param name="text">
+ <xsl:if test="string-length(@type) != 0">
+ <xsl:value-of select="concat(' <', @type, '>')"/>
+ </xsl:if>
<xsl:value-of select="concat(' (', @token-number, ')')"/>
<xsl:for-each select="key('bison:ruleByRhs', @name)">
<xsl:value-of select="concat(' ', @number)"/>
@@ -157,14 +161,18 @@
</xsl:template>
<xsl:template match="nonterminal">
+ <xsl:text> </xsl:text>
<xsl:value-of select="@name"/>
+ <xsl:if test="string-length(@type) != 0">
+ <xsl:value-of select="concat(' <', @type, '>')"/>
+ </xsl:if>
<xsl:value-of select="concat(' (', @symbol-number, ')')"/>
<xsl:text> </xsl:text>
<xsl:variable name="output">
<xsl:call-template name="line-wrap">
<xsl:with-param name="line-length" select="66" />
<xsl:with-param name="text">
- <xsl:text> </xsl:text>
+ <xsl:text> </xsl:text>
<xsl:if test="key('bison:ruleByLhs', @name)">
<xsl:text>on@left:</xsl:text>
<xsl:for-each select="key('bison:ruleByLhs', @name)">
@@ -173,7 +181,7 @@
</xsl:if>
<xsl:if test="key('bison:ruleByRhs', @name)">
<xsl:if test="key('bison:ruleByLhs', @name)">
- <xsl:text>, </xsl:text>
+ <xsl:text> </xsl:text>
</xsl:if>
<xsl:text>on@right:</xsl:text>
<xsl:for-each select="key('bison:ruleByRhs', @name)">
@@ -348,11 +356,11 @@
<!-- RHS -->
<xsl:for-each select="rhs/*">
<xsl:if test="position() = $dot + 1">
- <xsl:text> .</xsl:text>
+ <xsl:text> •</xsl:text>
</xsl:if>
<xsl:apply-templates select="."/>
<xsl:if test="position() = last() and position() = $dot">
- <xsl:text> .</xsl:text>
+ <xsl:text> •</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:if test="$lookaheads">
diff --git a/src/print-xml.c b/src/print-xml.c
index de4bf141..bd231045 100644
--- a/src/print-xml.c
+++ b/src/print-xml.c
@@ -384,13 +384,15 @@ print_grammar (FILE *out, int level)
{
symbol const *sym = symbols[token_translations[i]];
char const *tag = sym->tag;
+ char const *type = sym->content->type_name;
int precedence = sym->content->prec;
assoc associativity = sym->content->assoc;
xml_indent (out, level + 2);
fprintf (out,
"<terminal symbol-number=\"%d\" token-number=\"%d\""
- " name=\"%s\" usefulness=\"%s\"",
- token_translations[i], i, xml_escape (tag),
+ " name=\"%s\" type=\"%s\" usefulness=\"%s\"",
+ token_translations[i], i, xml_escape_n (0, tag),
+ type ? xml_escape_n (1, type) : "",
reduce_token_unused_in_grammar (token_translations[i])
? "unused-in-grammar" : "useful");
if (precedence)
@@ -407,11 +409,14 @@ print_grammar (FILE *out, int level)
{
symbol const *sym = symbols[i];
char const *tag = sym->tag;
+ char const *type = sym->content->type_name;
xml_printf (out, level + 2,
"<nonterminal symbol-number=\"%d\" name=\"%s\""
+ " type=\"%s\""
" usefulness=\"%s\"/>",
- i, xml_escape (tag),
- reduce_nonterminal_useless_in_grammar (symbols[i]->content)
+ i, xml_escape_n (0, tag),
+ type ? xml_escape_n (1, type) : "",
+ reduce_nonterminal_useless_in_grammar (sym->content)
? "useless-in-grammar" : "useful");
}
xml_puts (out, level + 1, "</nonterminals>");
diff --git a/tests/local.at b/tests/local.at
index 863f75e9..b94dd407 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -1169,11 +1169,16 @@ m4_define([AT_BISON_CHECK_XML],
[cp xml-tests/test.output expout]
AT_CHECK([[$XSLTPROC \
`]]AT_SET_ENV[[ bison --print-datadir`/xslt/xml2text.xsl \
- xml-tests/test.xml]], [[0]], [expout])
+ xml-tests/test.xml]], [[0]], [stdout])
+ # xml2text and xml2dot always use '•', while --report uses '•' or '.'
+ # depending on the locale, and the test suite is run with the plain
+ # C locale.
+ AT_CHECK([[sed -e 's/•/./g' stdout]], [], [expout])
[sort xml-tests/test.gv > expout]
AT_CHECK([[$XSLTPROC \
`]]AT_SET_ENV[[ bison --print-datadir`/xslt/xml2dot.xsl \
- xml-tests/test.xml | sort]], [[0]], [expout])
+ xml-tests/test.xml | sort | sed -e 's/•/./g']],
+ [[0]], [stdout])
[rm -rf xml-tests expout]
AT_RESTORE_SPECIAL_FILES
[fi]])
diff --git a/tests/report.at b/tests/report.at
index cc2aa34b..9f6d6701 100644
--- a/tests/report.at
+++ b/tests/report.at
@@ -764,24 +764,24 @@ AT_CHECK([[sed -e 's/bison-xml-report
version="[^"]*"/bison-xml-report version="
</rule>
</rules>
<terminals>
- <terminal symbol-number="0" token-number="0" name=""end of
file"" usefulness="useful"/>
- <terminal symbol-number="1" token-number="256" name="error"
usefulness="useful"/>
- <terminal symbol-number="3" token-number="258" name="":=""
usefulness="useful"/>
- <terminal symbol-number="4" token-number="259" name=""incr""
usefulness="useful"/>
- <terminal symbol-number="5" token-number="260"
name=""identifier"" usefulness="useful"/>
- <terminal symbol-number="6" token-number="261" name=""number""
usefulness="useful"/>
- <terminal symbol-number="7" token-number="262" name=""(""
usefulness="useful"/>
- <terminal symbol-number="8" token-number="263" name="")""
usefulness="useful"/>
+ <terminal symbol-number="0" token-number="0" name=""end of
file"" type="" usefulness="useful"/>
+ <terminal symbol-number="1" token-number="256" name="error" type=""
usefulness="useful"/>
+ <terminal symbol-number="3" token-number="258" name="":=""
type="" usefulness="useful"/>
+ <terminal symbol-number="4" token-number="259" name=""incr""
type="" usefulness="useful"/>
+ <terminal symbol-number="5" token-number="260"
name=""identifier"" type="std::string" usefulness="useful"/>
+ <terminal symbol-number="6" token-number="261" name=""number""
type="int" usefulness="useful"/>
+ <terminal symbol-number="7" token-number="262" name=""(""
type="" usefulness="useful"/>
+ <terminal symbol-number="8" token-number="263" name="")""
type="" usefulness="useful"/>
</terminals>
<nonterminals>
- <nonterminal symbol-number="9" name="$accept" usefulness="useful"/>
- <nonterminal symbol-number="10" name="unit" usefulness="useful"/>
- <nonterminal symbol-number="11" name="assignments" usefulness="useful"/>
- <nonterminal symbol-number="12" name="assignment" usefulness="useful"/>
- <nonterminal symbol-number="13" name="id" usefulness="useful"/>
- <nonterminal symbol-number="14" name="exp" usefulness="useful"/>
- <nonterminal symbol-number="15" name="@1" usefulness="useful"/>
- <nonterminal symbol-number="16" name="@2" usefulness="useful"/>
+ <nonterminal symbol-number="9" name="$accept" type=""
usefulness="useful"/>
+ <nonterminal symbol-number="10" name="unit" type="" usefulness="useful"/>
+ <nonterminal symbol-number="11" name="assignments" type=""
usefulness="useful"/>
+ <nonterminal symbol-number="12" name="assignment" type=""
usefulness="useful"/>
+ <nonterminal symbol-number="13" name="id" type="std::string"
usefulness="useful"/>
+ <nonterminal symbol-number="14" name="exp" type="int"
usefulness="useful"/>
+ <nonterminal symbol-number="15" name="@1" type="int"
usefulness="useful"/>
+ <nonterminal symbol-number="16" name="@2" type="int"
usefulness="useful"/>
</nonterminals>
</grammar>
@@ -1881,16 +1881,16 @@ AT_CHECK([[sed -e 's/bison-xml-report
version="[^"]*"/bison-xml-report version="
</rule>
</rules>
<terminals>
- <terminal symbol-number="0" token-number="0" name="$end"
usefulness="useful"/>
- <terminal symbol-number="1" token-number="256" name="error"
usefulness="useful"/>
- <terminal symbol-number="3" token-number="258" name=""+""
usefulness="useful" prec="1" assoc="left"/>
- <terminal symbol-number="4" token-number="259" name=""⊕""
usefulness="useful"/>
- <terminal symbol-number="5" token-number="260" name=""number""
usefulness="useful"/>
- <terminal symbol-number="6" token-number="261" name=""Ñùṃéℝô""
usefulness="useful"/>
+ <terminal symbol-number="0" token-number="0" name="$end" type=""
usefulness="useful"/>
+ <terminal symbol-number="1" token-number="256" name="error" type=""
usefulness="useful"/>
+ <terminal symbol-number="3" token-number="258" name=""+""
type="" usefulness="useful" prec="1" assoc="left"/>
+ <terminal symbol-number="4" token-number="259" name=""⊕""
type="" usefulness="useful"/>
+ <terminal symbol-number="5" token-number="260" name=""number""
type="" usefulness="useful"/>
+ <terminal symbol-number="6" token-number="261" name=""Ñùṃéℝô""
type="" usefulness="useful"/>
</terminals>
<nonterminals>
- <nonterminal symbol-number="7" name="$accept" usefulness="useful"/>
- <nonterminal symbol-number="8" name="exp" usefulness="useful"/>
+ <nonterminal symbol-number="7" name="$accept" type=""
usefulness="useful"/>
+ <nonterminal symbol-number="8" name="exp" type="" usefulness="useful"/>
</nonterminals>
</grammar>
--
2.27.0
- [PATCH 00/10] Update HTML reports, Akim Demaille, 2020/07/11
- [PATCH 01/10] maint: make it easier to update expectations, Akim Demaille, 2020/07/11
- [PATCH 02/10] style: factor complex expressions, Akim Demaille, 2020/07/11
- [PATCH 03/10] tests: check html, Akim Demaille, 2020/07/11
- [PATCH 04/10] reports: update html ouput, Akim Demaille, 2020/07/11
- [PATCH 05/10] reports: let xml reports catch up with --report and --graph,
Akim Demaille <=
- [PATCH 06/10] reports: let html reports catch up with --report and --graph, Akim Demaille, 2020/07/11
- [PATCH 07/10] html: simplify, Akim Demaille, 2020/07/11
- [PATCH 08/10] html: don't define several times the same anchors, Akim Demaille, 2020/07/11
- [PATCH 09/10] fixup! maint: make it easier to update expectations, Akim Demaille, 2020/07/11
- [PATCH 10/10] html: capitalize titles, Akim Demaille, 2020/07/11