module FST.AutomatonInterface ( compileNFA,
minimize,
complete,
determinize,
compile,
Automaton,
initial,
showAutomaton,
module FST.RegTypes,
module FST.AutomatonTypes,
numberOfStates,
numberOfTransitions
) where
import FST.Automaton
import FST.AutomatonTypes
import qualified FST.MinimalBrzozowski as M
import FST.Complete
import qualified FST.Deterministic as D
import qualified FST.LBFA as L
import FST.RegTypes
compileNFA :: Ord a => Reg a -> Sigma a -> State -> Automaton a
compileNFA reg sigma s = L.compileToAutomaton reg sigma s
minimize :: Ord a => Automaton a -> Automaton a
minimize automaton = M.minimize automaton
determinize :: Ord a => Automaton a -> Automaton a
determinize automaton = D.determinize automaton
compile :: Ord a => Reg a -> Sigma a -> State -> Automaton a
compile reg sigma s = minimize $ L.compileToAutomaton reg sigma s
initial :: Automaton a -> State
initial automaton = head $ initials automaton
numberOfStates :: Ord a => Automaton a -> Int
numberOfStates auto = length $ states auto
numberOfTransitions :: Ord a => Automaton a -> Int
numberOfTransitions auto = sum [length (transitionList auto s) |
s <- states auto]