+ if (report_flag & report_solved_conflicts)
+ {
+ /* The description of the resolution. */
+ switch (resolution)
+ {
+ case shift_resolution:
+ case right_resolution:
+ obstack_printf (&solved_conflicts_obstack,
+ _(" Conflict between rule %d and token %s"
+ " resolved as shift"),
+ r->number,
+ symbols[token]->tag);
+ break;
+
+ case reduce_resolution:
+ case left_resolution:
+ obstack_printf (&solved_conflicts_obstack,
+ _(" Conflict between rule %d and token %s"
+ " resolved as reduce"),
+ r->number,
+ symbols[token]->tag);
+ break;
+
+ case nonassoc_resolution:
+ obstack_printf (&solved_conflicts_obstack,
+ _(" Conflict between rule %d and token %s"
+ " resolved as an error"),
+ r->number,
+ symbols[token]->tag);
+ break;
+ }
+
+ /* The reason. */
+ switch (resolution)
+ {
+ case shift_resolution:
+ obstack_printf (&solved_conflicts_obstack,
+ " (%s < %s)",
+ r->prec->tag,
+ symbols[token]->tag);
+ break;
+
+ case reduce_resolution:
+ obstack_printf (&solved_conflicts_obstack,
+ " (%s < %s)",
+ symbols[token]->tag,
+ r->prec->tag);
+ break;
+
+ case left_resolution:
+ obstack_printf (&solved_conflicts_obstack,
+ " (%%left %s)",
+ symbols[token]->tag);
+ break;
+
+ case right_resolution:
+ obstack_printf (&solved_conflicts_obstack,
+ " (%%right %s)",
+ symbols[token]->tag);
+ break;
+
+ case nonassoc_resolution:
+ obstack_printf (&solved_conflicts_obstack,
+ " (%%nonassoc %s)",
+ symbols[token]->tag);
+ break;
+ }
+
+ obstack_sgrow (&solved_conflicts_obstack, ".\n");
+ }
+
+ /* XML report */
+ if (xml_flag)
+ {
+ /* The description of the resolution. */
+ switch (resolution)
+ {
+ case shift_resolution:
+ case right_resolution:
+ obstack_printf (&solved_conflicts_xml_obstack,
+ " <resolution rule=\"%d\" symbol=\"%s\""
+ " type=\"shift\">",
+ r->number,
+ xml_escape (symbols[token]->tag));
+ break;
+
+ case reduce_resolution:
+ case left_resolution:
+ obstack_printf (&solved_conflicts_xml_obstack,
+ " <resolution rule=\"%d\" symbol=\"%s\""
+ " type=\"reduce\">",
+ r->number,
+ xml_escape (symbols[token]->tag));
+ break;
+
+ case nonassoc_resolution:
+ obstack_printf (&solved_conflicts_xml_obstack,
+ " <resolution rule=\"%d\" symbol=\"%s\""
+ " type=\"error\">",
+ r->number,
+ xml_escape (symbols[token]->tag));
+ break;
+ }
+
+ /* The reason. */
+ switch (resolution)
+ {
+ case shift_resolution:
+ obstack_printf (&solved_conflicts_xml_obstack,
+ "%s < %s",
+ xml_escape_n (0, r->prec->tag),
+ xml_escape_n (1, symbols[token]->tag));
+ break;
+
+ case reduce_resolution:
+ obstack_printf (&solved_conflicts_xml_obstack,
+ "%s < %s",
+ xml_escape_n (0, symbols[token]->tag),
+ xml_escape_n (1, r->prec->tag));
+ break;
+
+ case left_resolution:
+ obstack_printf (&solved_conflicts_xml_obstack,
+ "%%left %s",
+ xml_escape (symbols[token]->tag));
+ break;
+
+ case right_resolution:
+ obstack_printf (&solved_conflicts_xml_obstack,
+ "%%right %s",
+ xml_escape (symbols[token]->tag));
+ break;
+
+ case nonassoc_resolution:
+ obstack_printf (&solved_conflicts_xml_obstack,
+ "%%nonassoc %s",
+ xml_escape (symbols[token]->tag));
+ break;
+ }
+
+ obstack_sgrow (&solved_conflicts_xml_obstack, "</resolution>\n");
+ }