示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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();
        }