105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Output Graphviz specification of a state machine generated by Bison.
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Copyright (C) 2006, 2010-2012 Free Software Foundation, Inc.
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This file is part of Bison, the GNU Compiler Compiler.
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is free software: you can redistribute it and/or modify
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   it under the terms of the GNU General Public License as published by
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the Free Software Foundation, either version 3 of the License, or
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   (at your option) any later version.
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is distributed in the hope that it will be useful,
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   but WITHOUT ANY WARRANTY; without even the implied warranty of
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNU General Public License for more details.
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   You should have received a copy of the GNU General Public License
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Written by Paul Eggert and Satya Kiran Popuri.  */
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef GRAPHVIZ_H_
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define GRAPHVIZ_H_
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "state.h"
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Begin a Dot graph.
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang *
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param fout   output stream.
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid start_graph (FILE *fout);
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Output a Dot node.
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang *
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param id     identifier of the node
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param label  human readable label of the node (no Dot escaping needed).
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param fout   output stream.
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid output_node (int id, char const *label, FILE *fout);
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Output a Dot edge.
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param source       id of the source node
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param destination  id of the target node
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param label        human readable label of the edge
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang *                     (no Dot escaping needed).  Can be 0.
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param style        Dot style of the edge (e.g., "dotted" or "solid").
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param fout         output stream.
4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
4905436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid output_edge (int source, int destination, char const *label,
5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  char const *style, FILE *fout);
5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Output a reduction.
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param s            current state
5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param reds         the set of reductions
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param fout         output stream.
5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid output_red (state const *s, reductions const *reds, FILE *fout);
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** End a Dot graph.
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang *
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param fout  output stream.
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid finish_graph (FILE *fout);
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Escape a lookahead token.
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang *
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param name         the token.
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wangchar const *escape (char const *name);
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* ! GRAPHVIZ_H_ */
72