public char dahaFazlaDurumBul(DFA dfa, char geciciKarakter) { List <DurumSeti> anahtarListesi = new List <DurumSeti>(dfa.qDelta.Keys); foreach (DurumSeti q in anahtarListesi) { if (!q.proc) { q.proc = true; DurumSeti geciciQ; foreach (char c in dfa.sigma) { geciciQ = new DurumSeti(); foreach (int i in q.durumlar) { foreach (Durum r in qDelta) { if (r.isim == i) { geciciQ.girdi(Tasi(r, c)); } } } HashSet <int> geciciHash = new HashSet <int>(geciciQ.durumlar); foreach (int i in geciciHash) { foreach (Durum r in qDelta) { if (r.isim == i) { geciciQ.girdi(Kapatma(r)); } } } if (geciciQ.durumlar.Count > 0 && !geciciQ.durumlar.SetEquals(q.durumlar)) { geciciQ.isim = ++geciciKarakter; dfa.qDelta[q].Add(c, geciciQ); dfa.qDelta.Add(geciciQ, new Dictionary <char, DurumSeti>()); dfa.toplam++; } } return(geciciKarakter); } } return(geciciKarakter); }
public DurumSeti Kapatma(Durum q) { DurumSeti eKapali = new DurumSeti(); eKapali.girdi(q); foreach (int num in q.baglantilar['E']) { foreach (Durum qTmp in qDelta) { if (qTmp.isim == num && !eKapali.durumlar.Contains(qTmp.isim)) { eKapali.girdi(qTmp); eKapali.girdi(Kapatma(qTmp)); } } } return(eKapali); }
public DurumSeti Tasi(Durum q, char c) { DurumSeti delta = new DurumSeti(); foreach (int num in q.baglantilar[c]) { foreach (Durum qGecici in qDelta) { if (qGecici.isim == num) { delta.girdi(qGecici); } } } return(delta); }
public void NFAtoDFA() { char geciciKarakter = 'A'; DFA dfa = null; int oncekiToplam; DurumSeti geciciQ; foreach (Durum q in qDelta) { if (q0 == q.isim) { dfa = new DFA(L, Kapatma(q)); } } dfa.q0.proc = true; foreach (char c in dfa.sigma) { geciciQ = new DurumSeti(); foreach (int i in dfa.q0.durumlar) { foreach (Durum q in qDelta) { if (q.isim == i) { geciciQ.girdi(Tasi(q, c)); } } } HashSet <int> geciciHash = new HashSet <int>(geciciQ.durumlar);; foreach (int i in geciciHash) { foreach (Durum q in qDelta) { if (q.isim == i) { geciciQ.girdi(Kapatma(q)); } } } if (geciciQ.durumlar.Count > 0 && !geciciQ.durumlar.SetEquals(dfa.q0.durumlar)) { geciciQ.isim = ++geciciKarakter; dfa.qDelta[dfa.q0].Add(c, geciciQ); dfa.qDelta.Add(geciciQ, new Dictionary <char, DurumSeti>()); dfa.toplam++; } } do { oncekiToplam = dfa.toplam; geciciKarakter = dahaFazlaDurumBul(dfa, geciciKarakter); } while (oncekiToplam != dfa.toplam); sonDurum(dfa); Console.Clear(); Console.Out.Write("\n\n--------------------NFA--------------------\n"); printNFA(); Console.Out.Write("\n\n--------------------DFA--------------------\n"); dfa.DFAyazdir(); }