]> git.saurik.com Git - bison.git/blame - src/graphviz.c
2007-10-17 Wojciech Polak <polak@gnu.org>
[bison.git] / src / graphviz.c
CommitLineData
35fe0834
PE
1/* Output Graphviz specification of a state machine generated by Bison.
2
21f1b063 3 Copyright (C) 2006, 2007 Free Software Foundation, Inc.
35fe0834
PE
4
5 This file is part of Bison, the GNU Compiler Compiler.
6
f16b0819 7 This program is free software: you can redistribute it and/or modify
35fe0834 8 it under the terms of the GNU General Public License as published by
f16b0819
PE
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
35fe0834 11
f16b0819 12 This program is distributed in the hope that it will be useful,
35fe0834
PE
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
f16b0819 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
35fe0834
PE
19
20/* Written by Paul Eggert and Satya Kiran Popuri. */
21
22#include <config.h>
23#include "system.h"
24
25#include <quotearg.h>
26
27#include "graphviz.h"
28
29/* Return an unambiguous printable representation for NAME, suitable
30 for C strings. Use slot 2 since the user may use slots 0 and 1. */
31
32static char const *
33quote (char const *name)
34{
35 return quotearg_n_style (2, c_quoting_style, name);
36}
37
38void
39start_graph (FILE *fout)
40{
21f1b063 41 fputs ("digraph Automaton {\n", fout);
35fe0834
PE
42}
43
44void
45output_node (int id, char const *label, FILE *fout)
46{
21f1b063 47 fprintf (fout, " %d [label=%s]\n", id, quote (label));
35fe0834
PE
48}
49
50void
51output_edge (int source, int destination, char const *label,
52 char const *style, FILE *fout)
53{
21f1b063 54 fprintf (fout, " %d -> %d [style=%s", source, destination, style);
35fe0834
PE
55 if (label)
56 fprintf (fout, " label=%s", quote (label));
57 fputs ("]\n", fout);
58}
59
60void
61finish_graph (FILE *fout)
62{
63 fputs ("}\n", fout);
64}