X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/34cdeddfa54df8c85b20bf013a0b82053a5148f2..a005a9c4dc5588fc017a1cb1d19c1560e0e68943:/src/print-xml.c?ds=inline diff --git a/src/print-xml.c b/src/print-xml.c index 81f4d803..f7cae3f0 100644 --- a/src/print-xml.c +++ b/src/print-xml.c @@ -51,19 +51,19 @@ struct escape_buf static struct escape_buf escape_bufs[2]; -/*----------------------------. -| Print rules never reduced. | -`-----------------------------*/ +/*--------------------------------. +| Print rules useless in parser. | +`--------------------------------*/ static void -print_rules_never_reduced (FILE *out, int level) +print_rules_useless_in_parser (FILE *out, int level) { rule_number r; bool count = false; for (r = 0; r < nrules + nuseless_productions; r++) { - if (rule_never_reduced_p (&rules[r])) + if (rule_useless_in_parser_p (&rules[r])) { count = true; break; @@ -71,13 +71,13 @@ print_rules_never_reduced (FILE *out, int level) } if (count) { - xml_puts (out, level, ""); + xml_puts (out, level, ""); grammar_rules_partial_print_xml (out, level - 1, - false, rule_never_reduced_p); - xml_puts (out, level, ""); + false, rule_useless_in_parser_p); + xml_puts (out, level, ""); } else - xml_puts (out, level, ""); + xml_puts (out, level, ""); } /*--------------------------------. @@ -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, "", - rules[r].number); - - rule_lhs_print_xml (&rules[r], out, level + 2); - - xml_puts (out, level + 2, ""); - for (sp = rules[r].rhs; sp < sp1; sp++) - xml_printf (out, level + 3, "%s", - symbol_class_get_string (symbols[*sp]), - xml_escape (symbols[*sp]->tag)); - xml_puts (out, level + 3, ""); - for (/* Nothing */; *sp >= 0; ++sp) - xml_printf (out, level + 3, "%s", - symbol_class_get_string (symbols[*sp]), - xml_escape (symbols[*sp]->tag)); - - xml_puts (out, level + 2, ""); + 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, + "", + rules[r].number, sp1 - sp); + state_rule_lookahead_tokens_print_xml (s, &rules[r], + out, level + 2); + xml_puts (out, level + 1, ""); + printed = true; + } + } - xml_puts (out, level + 1, ""); + if (!printed) + { + xml_printf (out, level + 1, + "", + rules[r].number, + sp1 - sp); + } } xml_puts (out, level, ""); } @@ -424,8 +429,9 @@ print_grammar (FILE *out, int level) item_number *rhsp; xml_printf (out, level + 2, - "", - i, xml_escape (tag)); + "", + 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, - "", + "", i, xml_escape (tag)); if (left_count > 0) @@ -581,11 +587,8 @@ print_xml (void) /* print reductions */ reduce_xml (out, level + 1); - /* print rules never reduced */ - print_rules_never_reduced (out, level + 1); - - /* print conflicts */ - conflicts_output_xml (out, level + 1); + /* print rules useless in parser */ + print_rules_useless_in_parser (out, level + 1); /* print grammar */ print_grammar (out, level + 1);