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 <akim@lrde.epita.fr>
This commit is contained in:
Theophile Ranquet
2012-10-18 15:38:30 +00:00
committed by Akim Demaille
parent 85935600ad
commit 8048226f50
2 changed files with 48 additions and 34 deletions

View File

@@ -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");
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");
/* 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));
}
}
@@ -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);

View File

@@ -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);