From: Theophile Ranquet Date: Thu, 18 Oct 2012 15:38:31 +0000 (+0000) Subject: graphs: change the output format of the rules X-Git-Tag: v2.6.90~60 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/ce6cf10f73b2eabdb460ade6e4813254459f442a graphs: change the output format of the rules Use something similar to the report file. * src/print_graph.c (print_lhs): New, obstack equivalent of rule_lhs_print. (print_core): Use here. Signed-off-by: Akim Demaille --- diff --git a/src/print_graph.c b/src/print_graph.c index 61aa1e3c..d5ec5fb4 100644 --- a/src/print_graph.c +++ b/src/print_graph.c @@ -40,11 +40,32 @@ | Construct the node labels. | `----------------------------*/ +/* Print the lhs of a rule in such a manner that there is no vertical + repetition, like in *.output files. */ + +static void +print_lhs (struct obstack *oout, rule *previous_rule, rule *r) +{ + if (previous_rule && STREQ (previous_rule->lhs->tag, r->lhs->tag)) + { + int i; + for (i = 0; i < strlen (r->lhs->tag); ++i) + obstack_1grow (oout, ' '); + obstack_1grow (oout, '|'); + } + else + { + obstack_sgrow (oout, escape (r->lhs->tag)); + obstack_1grow (oout, ':'); + } +} + static void print_core (struct obstack *oout, state *s) { - size_t i; item_number *sitems = s->items; + rule *previous_rule = NULL; + size_t i; size_t snritems = s->nitems; /* Output all the items of a state, not only its kernel. */ @@ -70,7 +91,9 @@ print_core (struct obstack *oout, state *s) r = item_number_as_rule_number (*sp); - obstack_printf (oout, "%d: %s ->", r, escape (rules[r].lhs->tag)); + obstack_printf (oout, "%3d ", r); + print_lhs (oout, previous_rule, &rules[r]); + previous_rule = &rules[r]; for (sp = rules[r].rhs; sp < sp1; sp++) obstack_printf (oout, " %s", escape (symbols[*sp]->tag));