bison-patches
[Top][All Lists]
Advanced

[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&#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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]