[PATCH 05/10] reports: let xml reports catch up with --report and --graph

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
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&#10;&#10;</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>&#10;</xsl:text>
     </xsl:for-each>
@@ -65,7 +65,7 @@
     <xsl:text>Terminals unused in grammar&#10;&#10;</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>&#10;</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(' &lt;', @type, '&gt;')"/>
+      </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(' &lt;', @type, '&gt;')"/>
+  </xsl:if>
   <xsl:value-of select="concat(' (', @symbol-number, ')')"/>
   <xsl:text>&#10;</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>&#10;        </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="&quot;end of file&quot;" usefulness="useful"/>
-      <terminal symbol-number="1" token-number="256" name="error" usefulness="useful"/>
-      <terminal symbol-number="3" token-number="258" name="&quot;:=&quot;" usefulness="useful"/>
-      <terminal symbol-number="4" token-number="259" name="&quot;incr&quot;" usefulness="useful"/>
-      <terminal symbol-number="5" token-number="260" name="&quot;identifier&quot;" usefulness="useful"/>
-      <terminal symbol-number="6" token-number="261" name="&quot;number&quot;" usefulness="useful"/>
-      <terminal symbol-number="7" token-number="262" name="&quot;(&quot;" usefulness="useful"/>
-      <terminal symbol-number="8" token-number="263" name="&quot;)&quot;" usefulness="useful"/>
+      <terminal symbol-number="0" token-number="0" name="&quot;end of file&quot;" type="" usefulness="useful"/>
+      <terminal symbol-number="1" token-number="256" name="error" type="" usefulness="useful"/>
+      <terminal symbol-number="3" token-number="258" name="&quot;:=&quot;" type="" usefulness="useful"/>
+      <terminal symbol-number="4" token-number="259" name="&quot;incr&quot;" type="" usefulness="useful"/>
+      <terminal symbol-number="5" token-number="260" name="&quot;identifier&quot;" type="std::string" usefulness="useful"/>
+      <terminal symbol-number="6" token-number="261" name="&quot;number&quot;" type="int" usefulness="useful"/>
+      <terminal symbol-number="7" token-number="262" name="&quot;(&quot;" type="" usefulness="useful"/>
+      <terminal symbol-number="8" token-number="263" name="&quot;)&quot;" 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="&quot;+&quot;" usefulness="useful" prec="1" assoc="left"/>
-      <terminal symbol-number="4" token-number="259" name="&quot;⊕&quot;" usefulness="useful"/>
-      <terminal symbol-number="5" token-number="260" name="&quot;number&quot;" usefulness="useful"/>
-      <terminal symbol-number="6" token-number="261" name="&quot;Ñùṃéℝô&quot;" 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="&quot;+&quot;" type="" usefulness="useful" prec="1" assoc="left"/>
+      <terminal symbol-number="4" token-number="259" name="&quot;⊕&quot;" type="" usefulness="useful"/>
+      <terminal symbol-number="5" token-number="260" name="&quot;number&quot;" type="" usefulness="useful"/>
+      <terminal symbol-number="6" token-number="261" name="&quot;Ñùṃéℝô&quot;" 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.