]> git.saurik.com Git - bison.git/blame - src/graphviz.c
tests: improve the generic yylex implementation.
[bison.git] / src / graphviz.c
CommitLineData
35fe0834
PE
1/* Output Graphviz specification of a state machine generated by Bison.
2
c932d613 3 Copyright (C) 2006-2007, 2009-2012 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
a0279765 27#include "files.h"
35fe0834
PE
28#include "graphviz.h"
29
30/* Return an unambiguous printable representation for NAME, suitable
31 for C strings. Use slot 2 since the user may use slots 0 and 1. */
32
33static char const *
34quote (char const *name)
35{
36 return quotearg_n_style (2, c_quoting_style, name);
37}
38
39void
40start_graph (FILE *fout)
41{
a0279765 42 fprintf (fout,
ad6f84e5
JD
43 _("// Generated by %s.\n"
44 "// Report bugs to <%s>.\n"
45 "// Home page: <%s>.\n"
a0279765
AD
46 "\n"),
47 PACKAGE_STRING,
48 PACKAGE_BUGREPORT,
49 PACKAGE_URL);
50 fprintf (fout,
51 "digraph %s\n"
52 "{\n",
53 quote (grammar_file));
35fe0834
PE
54}
55
56void
57output_node (int id, char const *label, FILE *fout)
58{
21f1b063 59 fprintf (fout, " %d [label=%s]\n", id, quote (label));
35fe0834
PE
60}
61
62void
63output_edge (int source, int destination, char const *label,
64 char const *style, FILE *fout)
65{
21f1b063 66 fprintf (fout, " %d -> %d [style=%s", source, destination, style);
35fe0834
PE
67 if (label)
68 fprintf (fout, " label=%s", quote (label));
69 fputs ("]\n", fout);
70}
71
72void
73finish_graph (FILE *fout)
74{
75 fputs ("}\n", fout);
76}