]> git.saurik.com Git - bison.git/blobdiff - src/print-xml.c
2007-11-08 Paolo Bonzini <bonzini@gnu.org>
[bison.git] / src / print-xml.c
index 81f4d803233b204ffc3a7b494da0cf99a2c5e526..da8bfcabd8e1dae914e2e24355794fe1a78bbb82 100644 (file)
@@ -108,6 +108,7 @@ print_core (FILE *out, int level, state *s)
 
   for (i = 0; i < snritems; i++)
     {
+      bool printed = false;
       item_number *sp;
       item_number *sp1;
       rule_number r;
@@ -118,30 +119,34 @@ print_core (FILE *out, int level, state *s)
        sp++;
 
       r = item_number_as_rule_number (*sp);
-
-      xml_printf (out, level + 1, "<rule number=\"%d\">",
-                 rules[r].number);
-
-      rule_lhs_print_xml (&rules[r], out, level + 2);
-
-      xml_puts (out, level + 2, "<rhs>");
-      for (sp = rules[r].rhs; sp < sp1; sp++)
-       xml_printf (out, level + 3, "<symbol class=\"%s\">%s</symbol>",
-                   symbol_class_get_string (symbols[*sp]),
-                   xml_escape (symbols[*sp]->tag));
-      xml_puts (out, level + 3, "<point/>");
-      for (/* Nothing */; *sp >= 0; ++sp)
-       xml_printf (out, level + 3, "<symbol class=\"%s\">%s</symbol>",
-                   symbol_class_get_string (symbols[*sp]),
-                   xml_escape (symbols[*sp]->tag));
-
-      xml_puts (out, level + 2, "</rhs>");
+      sp = rules[r].rhs;
 
       /* Display the lookahead tokens?  */
-      if (report_flag & report_lookahead_tokens)
-       state_rule_lookahead_tokens_print_xml (s, &rules[r], out, level + 2);
+      if (report_flag & report_lookahead_tokens
+          && item_number_is_rule_number (*sp1))
+       {
+         reductions *reds = s->reductions;
+         int red = state_reduction_find (s, &rules[r]);
+         /* Print item with lookaheads if there are. */
+         if (reds->lookahead_tokens && red != -1)
+           {
+             xml_printf (out, level + 1,
+                         "<item rule-number=\"%d\" point=\"%d\">",
+                         rules[r].number, sp1 - sp);
+             state_rule_lookahead_tokens_print_xml (s, &rules[r],
+                                                    out, level + 2);
+             xml_puts (out, level + 1, "</item>");
+             printed = true;
+           }
+       }
 
-      xml_puts (out, level + 1, "</rule>");
+      if (!printed)
+       {
+         xml_printf (out, level + 1,
+                     "<item rule-number=\"%d\" point=\"%d\"/>",
+                     rules[r].number,
+                     sp1 - sp);
+       }
     }
   xml_puts (out, level, "</itemset>");
 }
@@ -424,8 +429,9 @@ print_grammar (FILE *out, int level)
        item_number *rhsp;
 
        xml_printf (out, level + 2,
-                   "<terminal type=\"%d\" symbol=\"%s\">",
-                   i, xml_escape (tag));
+                   "<terminal symbol-number=\"%d\" token-number=\"%d\""
+                    " name=\"%s\">",
+                   token_translations[i], i, xml_escape (tag));
 
        for (r = 0; r < nrules; r++)
          for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
@@ -460,7 +466,7 @@ print_grammar (FILE *out, int level)
        }
 
       xml_printf (out, level + 2,
-                 "<nonterminal type=\"%d\" symbol=\"%s\">",
+                 "<nonterminal symbol-number=\"%d\" name=\"%s\">",
                  i, xml_escape (tag));
 
       if (left_count > 0)
@@ -584,9 +590,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);