Generating, interpreting, and drawing graphs of FSMs.
Includes:
- Interface to fgl graph library for graph input/output (http://hackage.haskell.org/package/fgl).
- Interface to graphviz library for dot output (http://hackage.haskell.org/package/graphviz).
- Home-grown GML (Graph Modelling Language) output.
- data SelfLoops
- fsmToFGL :: FSM sy -> SelfLoops -> Gr () sy
- fglDot :: (Ord b, CleanShow b, Graph gr) => gr a b -> DotGraph Int
- strongCCs :: Eq sy => FSM sy -> [[State]]
- weakCCs :: Eq sy => FSM sy -> [[State]]
- class Show a => CleanShow a where
- fsmToDot :: (Ord sy, CleanShow sy) => FSM sy -> DotGraph Int
- fsmToGML :: CleanShow sy => FSM sy -> Doc
- fglToFsm :: (Graph gr, Ord sy, Show sy) => gr a sy -> ReadFsmMonad (FSM sy, [LNode a])
FGL graph operations.
When converting an FSM
into a graph, do we keep
all self-loops, or only those which are sources of nondeterminism?
Dot and GML format output.
fsmToDot :: (Ord sy, CleanShow sy) => FSM sy -> DotGraph IntSource
Turn an FSM into a DotGraph
, trimming any
self-loops which aren't sources of nondeterminism.
fsmToGML :: CleanShow sy => FSM sy -> DocSource
Turn an FSM into a GML-formatted graph', trimming any self-loops which aren't sources of nondeterminism.
Input.
fglToFsm :: (Graph gr, Ord sy, Show sy) => gr a sy -> ReadFsmMonad (FSM sy, [LNode a])Source
Turn an FGL graph (interpreted as being a directed graph) into an FSM. Self-loops are inserted as required. Also returns a list of the graph's labelled nodes, since the labels are discarded by the FSM construction. FSM states are numbered [0..] and thus may be used as an index into that list of labelled nodes, in order to relate FSM states back to the original graph nodes and their labels.