//Methode om te kijken de huidige toestand gelijk is aan een gegeven toestand public bool Equals(Toestand <T> other) { if (this.naam == other.naam && this.volgendeToestand == other.volgendeToestand) { return(true); } else { return(false); } }
public DFA <T> ToDFA() { DFA <T> newDFA = new DFA <T>(); Dictionary <Tuple <string, T>, SortedSet <string> > table = CreateTable(); foreach (KeyValuePair <Tuple <string, T>, SortedSet <string> > k in table) { Toestand <T> newt = new Toestand <T>(k.Key.Item1, new Tuple <string, T>("", k.Key.Item2)); foreach (string p in k.Value) { string naam = ""; SortedSet <char> d = new SortedSet <char>((newt.volgendeToestand.Item1 + p).ToCharArray()); foreach (char y in d) { naam += y; } newt.volgendeToestand = new Tuple <string, T>(naam, newt.volgendeToestand.Item2); } newDFA.toestanden.Add(newt); } //overbodige toestanden weghalen for (int v = newDFA.toestanden.Count - 1; v >= 0; v--) { var x = startSymbolen.FirstOrDefault(p => p == newDFA.toestanden.ElementAt(v).naam); if (x == null) { var t = newDFA.toestanden.FirstOrDefault(f => f.volgendeToestand.Item1 == newDFA.toestanden.ElementAt(v).naam&& f.naam != newDFA.toestanden.ElementAt(v).naam); if (t == default(Toestand <T>)) { newDFA.toestanden.Remove(newDFA.toestanden.ElementAt(v)); } } } //eindtoestanden bepalen foreach (var g in newDFA.toestanden) { foreach (char c in g.naam.ToCharArray()) { if (eindToestanden.Contains(new string(c, 1))) { newDFA.eindToestanden.Add(g.naam); } } } //begintoestanden bepalen newDFA.startSymbolen = startSymbolen; newDFA.invoerSymbolen = invoerSymbolen; return(newDFA); }