From 8048226f50f62fb64044625bf0ebbdc403a6776e Mon Sep 17 00:00:00 2001 From: Theophile Ranquet Date: Thu, 18 Oct 2012 15:38:30 +0000 Subject: [PATCH] graphs: style changes * src/graphviz.c (start_graph): Use courier font. (conclude_red): Use commas to separate attributes. Show the acceptation as a special reduction, with a blue color and an "Acc" label. Show the lookahead tokens between square brackets. (output_red): No longer label default reductions. * src/print_graph.c (print_core): Refactor spacing, and print an additional space between a rule's rhs and its lookahead tokens. Also, capitalize "State". (print_actions): Style, move a declaration. Signed-off-by: Akim Demaille --- src/graphviz.c | 70 ++++++++++++++++++++++++++++------------------- src/print_graph.c | 14 +++++----- 2 files changed, 49 insertions(+), 35 deletions(-) diff --git a/src/graphviz.c b/src/graphviz.c index a7a42d60..3ae0b546 100644 --- a/src/graphviz.c +++ b/src/graphviz.c @@ -53,7 +53,10 @@ start_graph (FILE *fout) "digraph %s\n" "{\n", quote (grammar_file)); - fprintf (fout, "node [shape=box]\n"); + fprintf (fout, + " node [fontname = courier, shape = box, colorscheme = paired6]\n" + " edge [fontname = courier]\n" + "\n"); } void @@ -94,8 +97,8 @@ no_reduce_bitset_init (state const *s, bitset *no_reduce_set) } static void -conclude_red (struct obstack *out, int source, int ruleno, bool enabled, - bool first, FILE *fout) +conclude_red (struct obstack *out, int source, rule_number ruleno, + bool enabled, bool first, FILE *fout) { /* If no lookahead tokens were valid transitions, this reduction is actually hidden, so cancel everything. */ @@ -104,26 +107,33 @@ conclude_red (struct obstack *out, int source, int ruleno, bool enabled, else { char const *ed = enabled ? "e" : "d"; + char const *color = enabled ? ruleno ? "3" : "1" : "5"; - /* First, build the edge's head. */ - if (! first) - fprintf (fout, " %1$d -> \"%1$dR%2$d%3$s\" [label = \"", - source, ruleno, ed); + /* First, build the edge's head. The name of reduction nodes is "nRm", + with n the source state and m the rule number. This is because we + don't want all the reductions bearing a same rule number to point to + the same state, since that is not the desired format. */ + fprintf (fout, " %1$d -> \"%1$dR%2$d%3$s\" [", + source, ruleno, ed); - /* (The lookahead tokens have been added to the beginning of the - obstack, in the caller function.) */ + if (! obstack_empty_p (out)) + /* (The lookahead tokens have been added to the beginning of the + obstack, in the caller function.) */ + fprintf (fout, "label = \"[%s]\" ", obstack_finish0 (out)); /* Then, the edge's tail. */ - obstack_sgrow (out, "\" style = solid]\n"); - - /* Build the associated diamond representation or the target rule. */ - obstack_printf (out, " \"%dR%d%s\" " - "[style = filled shape = diamond fillcolor = %s " - "label = \"R%d\"]\n", - source, ruleno, ed, - enabled ? "yellowgreen" : "firebrick1", - ruleno); - fprintf (fout, obstack_finish0 (out)); + fprintf (fout, "style = solid]\n"); + + /* Build the associated diamond representation of the target rule. */ + fprintf (fout, " \"%dR%d%s\" [style = filled, " + "shape = diamond, fillcolor = %s, ", + source, ruleno, ed, color); + + if (ruleno) + fprintf (fout, "label = \"R%d\"]\n", ruleno); + else + fprintf (fout, "label = \"Acc\"]\n"); + } } @@ -133,7 +143,7 @@ print_token (struct obstack *out, bool first, char const *tok) char const *q = escape (tok); if (! first) - obstack_sgrow (out, ","); + obstack_sgrow (out, ", "); obstack_sgrow (out, q); return false; } @@ -144,7 +154,13 @@ output_red (state const *s, reductions const *reds, FILE *fout) bitset no_reduce_set; int j; int source = s->number; - struct obstack dout, eout; + + /* Two obstacks are needed: one for the enabled reductions, and one + for the disabled reductions, because in the end we want two + separate edges, even though in most cases only one will actually + be printed. */ + struct obstack dout; + struct obstack eout; no_reduce_bitset_init (s, &no_reduce_set); obstack_init (&dout); @@ -153,8 +169,9 @@ output_red (state const *s, reductions const *reds, FILE *fout) for (j = 0; j < reds->num; ++j) { bool defaulted = false; - bool firstd = true, firste = true; // first{en,dis}abled - int ruleno = reds->rules[j]->user_number; + bool firstd = true; + bool firste = true; + rule_number ruleno = reds->rules[j]->user_number; rule *default_reduction = NULL; if (yydefact[s->number] != 0) @@ -163,10 +180,7 @@ output_red (state const *s, reductions const *reds, FILE *fout) /* Build the lookahead tokens lists, one for enabled transitions and one for disabled transistions. */ if (default_reduction && default_reduction == reds->rules[j]) - { - firste = print_token (&eout, true, "$default"); - defaulted = true; - } + defaulted = true; if (reds->lookahead_tokens) { int i; @@ -185,7 +199,7 @@ output_red (state const *s, reductions const *reds, FILE *fout) } /* Do the actual output. */ - conclude_red (&eout, source, ruleno, true, firste, fout); + conclude_red (&eout, source, ruleno, true, firste && !defaulted, fout); conclude_red (&dout, source, ruleno, false, firstd, fout); } obstack_free (&eout, 0); diff --git a/src/print_graph.c b/src/print_graph.c index b9021014..61aa1e3c 100644 --- a/src/print_graph.c +++ b/src/print_graph.c @@ -55,7 +55,8 @@ print_core (struct obstack *oout, state *s) snritems = nitemset; } - obstack_printf (oout, "state %d\\n", s->number); + obstack_printf (oout, _("State %d"), s->number); + obstack_sgrow (oout, "\\n"); for (i = 0; i < snritems; i++) { item_number *sp; @@ -69,12 +70,12 @@ 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, "%d: %s ->", r, escape (rules[r].lhs->tag)); for (sp = rules[r].rhs; sp < sp1; sp++) - obstack_printf (oout, "%s ", escape (symbols[*sp]->tag)); + obstack_printf (oout, " %s", escape (symbols[*sp]->tag)); - obstack_1grow (oout, '.'); + obstack_sgrow (oout, " ."); for (/* Nothing */; *sp >= 0; ++sp) obstack_printf (oout, " %s", escape (symbols[*sp]->tag)); @@ -93,7 +94,7 @@ print_core (struct obstack *oout, state *s) bitset_iterator biter; int k; char const *sep = ""; - obstack_1grow (oout, '['); + obstack_sgrow (oout, " ["); BITSET_FOR_EACH (biter, reds->lookahead_tokens[redno], k, 0) { obstack_sgrow (oout, sep); @@ -116,9 +117,8 @@ print_core (struct obstack *oout, state *s) static void print_actions (state const *s, FILE *fgraph) { - int i; - transitions const *trans = s->transitions; + int i; /* Display reductions. */ output_red (s, s->reductions, fgraph); -- 2.45.2