[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/5] graphs: style changes
From: |
Theophile Ranquet |
Subject: |
[PATCH 2/5] graphs: style changes |
Date: |
Thu, 18 Oct 2012 15:38:30 +0000 |
* 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 LAT
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.
---
src/graphviz.c | 69 +++++++++++++++++++++++++++++++++----------------------
src/print_graph.c | 14 +++++------
2 files changed, 48 insertions(+), 35 deletions(-)
diff --git a/src/graphviz.c b/src/graphviz.c
index a7a42d6..04471b4 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,12 @@ 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 tough 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 +168,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 +179,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 +198,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 b902101..61aa1e3 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);
--
1.7.11.4
- [PATCH 0/5] {maint} graph improvements, Theophile Ranquet, 2012/10/18
- [PATCH 3/5] graphs: change the output format of the rules, Theophile Ranquet, 2012/10/18
- [PATCH 1/5] graphs: address an issue with R/R conflicts, Theophile Ranquet, 2012/10/18
- [PATCH 2/5] graphs: style changes,
Theophile Ranquet <=
- [PATCH 5/5] graphs: add tests, introducing -k graphs, Theophile Ranquet, 2012/10/18
- [PATCH 4/5] graphs: documentation, Theophile Ranquet, 2012/10/18
- Re: [PATCH 0/5] {maint} graph improvements, Akim Demaille, 2012/10/18