From f73a581a2b896d9b199dfd68c837898e2435727d Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 31 Oct 2019 20:16:34 +0000 Subject: [PATCH] Fix NFA-to-DFA conversion --- src/Rextra/Automaton.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Rextra/Automaton.hs b/src/Rextra/Automaton.hs index 9b87c45..8c54d34 100644 --- a/src/Rextra/Automaton.hs +++ b/src/Rextra/Automaton.hs @@ -75,7 +75,7 @@ nextStatesFrom a ns = -- typeclass that I mean Nfa.NdState when I say startState a. connectedStates :: forall s t. (Ord s, Ord t) => Nfa.Nfa s t -> Set.Set (Nfa.NdState s) connectedStates a = - let start = Set.singleton (startState a :: Nfa.NdState s) + let start = Set.singleton $ Nfa.epsilonStep a $ (startState a :: Nfa.NdState s) in connectedElements (nextStatesFrom a) start dfaStateMap :: (Ord s, Ord t) @@ -86,7 +86,8 @@ nfaToDfa :: (Ord s, Ord t) => Nfa.Nfa s t -> Dfa.Dfa (Nfa.NdState s) t nfaToDfa a = let theStateMap = dfaStateMap a acceptingStates = Set.filter (Nfa.isAccepting a) $ Map.keysSet theStateMap - in fromJust $ fa theStateMap (startState a) acceptingStates + theStartState = Nfa.epsilonStep a $ startState a + in fromJust $ fa theStateMap theStartState acceptingStates {- - Minimizing a DFA