public static SortedSet <T> FindToStates <T>(ref SortedSet <T> toStates, Automaat <T> ndfa, T state, char symbol) where T : IComparable { var transitions = ndfa.GetTransitions(state, symbol); foreach (var trans in transitions) { if (trans.IsEpsilonTransition()) { if (symbol == Transition <T> .Epsilon) { toStates.Add(trans.ToState); FindToStates(ref toStates, ndfa, trans.ToState, Transition <T> .Epsilon); } else { FindToStates(ref toStates, ndfa, trans.ToState, symbol); } } else { toStates.Add(trans.ToState); FindToStates(ref toStates, ndfa, trans.ToState, Transition <T> .Epsilon); } } return(toStates); }
private static void FindNextState(ref Automaat <State> a, ref int counter, Automaat <T> a1, Automaat <T> a2, State s) { foreach (var c in a.GetAlphabet()) { var a1State = a1.GetTransitions(s.StateAutomaat1, c).First().ToState; var a2State = a2.GetTransitions(s.StateAutomaat2, c).First().ToState; var newState = default(State); var stateExsists = false; foreach (var state in a._states) { if (!state.HaseSameStates(a1State, a2State)) { continue; } newState = state; stateExsists = true; break; } if (!stateExsists) { newState = new State(++counter, a1State, a2State); a.AddTransition(new Transition <State>(s, c, newState)); FindNextState(ref a, ref counter, a1, a2, newState); } else { a.AddTransition(new Transition <State>(s, c, newState)); } } }