module Language.HaLex.RegExpAsDiGraph (
re2graphviz
) where
import Language.HaLex.RegExp
import Language.HaLex.RegExp2Fa
import Language.HaLex.Dfa
import Language.HaLex.Ndfa
import Language.HaLex.FaOperations
import Language.HaLex.Minimize
import Language.HaLex.FaAsDiGraph
re2graphviz :: (Ord sy, Show sy)
=> RegExp sy
-> [Char]
-> Bool
-> Bool
-> Bool
-> Bool
-> [Char]
re2graphviz re n d m b s
| not d = re2DiGraphNdfa re n
| d && not m && s = re2DiGraph re n
| d && not m && b && not s = re2DiGraph' re n
| d && m && b && s = re2DiGraph''' re n
| d && m && b && not s = re2DiGraph'' re n
| otherwise = re2DiGraph''' re n
re2DiGraph :: (Show sy, Ord sy)
=> RegExp sy
-> [Char]
-> [Char]
re2DiGraph re name = dfa2graphviz dfa name
where dfa = (ndfa2dfa . regExp2Ndfa) re
re2DiGraph' re name = dfa2graphviz dfa name
where dfa = (beautifyDfa .ndfa2dfa . regExp2Ndfa) re
re2DiGraph'' re name = dfa2graphviz dfa name
where dfa = (beautifyDfa . minimizeDfa . ndfa2dfa . regExp2Ndfa) re
re2DiGraph''' re name = dfa2DiGraphWithNoSyncSt dfa name
where dfa = (beautifyDfaWithSyncSt . minimizeDfa . ndfa2dfa . regExp2Ndfa) re
re2DiGraphNdfa re name = ndfa2graphviz ndfa name
where ndfa = regExp2Ndfa re
re2DiGraphIO :: (Show sy, Ord sy) => RegExp sy -> [Char] -> IO ()
re2DiGraphIO er name = dfa2graphviz2file dfa name
where dfa = (beautifyDfa . ndfa2dfa . regExp2Ndfa) er
absRe2DiGraph_File er name =
dfaDiGraphWithNoSyncStIO dfa name (name++".dot")
where dfa = (beautifyDfaWithSyncSt . minimizeDfa . ndfa2dfa . regExp2Ndfa) er