public SortedSet <T> epsilonClosure2(SortedSet <T> fromStates) { var reachable = new SortedSet <T>(); var newFound = new SortedSet <T>(); do { foreach (var item in fromStates) { reachable.Add(item); } newFound = new SortedSet <T>(); foreach (T fromState in fromStates) { foreach (var t in transitions) { if ((t.FromState.CompareTo(fromState) == 0) && Taal.IsSameLetterAs(t.Symbol, Transition <T> .EPSILON) && !fromStates.Contains(t.ToState)) { newFound.Add(t.ToState); } } } foreach (var item in newFound) { fromStates.Add(item); } reachable = newFound; }while (newFound.Count > 0); return(fromStates); }
public SortedSet <T> GetToStates2(T from, char symbol) { var fromStates = new SortedSet <T>(); fromStates.Add(from); fromStates = epsilonClosure2(fromStates); var toStates = new SortedSet <T>(); foreach (T fromState in fromStates) { foreach (var t in transitions) { if ((t.ToState.CompareTo(fromState) == 0) && Taal.IsSameLetterAs(t.Symbol, symbol)) { toStates.Add(t.ToState); } } } return(epsilonClosure2(toStates)); }
public SortedSet <Transition <T> > GetToStates(T currentState, char symbol) { var result = new SortedSet <Transition <T> >(); var fromStates = epsilonClosure(currentState); var tempResult = transitions.Where(t => (fromStates.Contains(t.FromState)) && ((Taal.IsSameLetterAs(t.Symbol, symbol)))); // var tempResult = transitions.Where(t => (t.FromState.CompareTo(currentState) == 0) && ((Taal.IsSameLetterAs(t.Symbol, symbol)))); foreach (var item in tempResult) { result.Add(item); } return(result); }