Ungkapan biasa definisi asas ungkapan biasa c. Penukaran DKA kepada NKA

DKA ialah kes khas NKA. Dalam dia:

    tiada keadaan dengan ε-peralihan;

    bagi setiap keadaan S dan simbol input a, terdapat paling banyak satu lengkok yang terpancar daripada S dan dilabelkan a.

DFA hanya mempunyai maksimum satu peralihan untuk sebarang simbol input daripada setiap negeri. Jika jadual digunakan untuk mewakili fungsi peralihan DFA, maka setiap rekod akan mengandungi hanya satu keadaan. Oleh itu, adalah mudah untuk menyemak sama ada DFA tertentu menerima baris tertentu, kerana hanya terdapat satu laluan dari keadaan permulaan, yang ditandakan dengan baris ini.

Rajah 3 menunjukkan graf peralihan DFA yang menerima bahasa yang sama (a|b) * a(a|b)(a|b) sebagai NFA dalam Rajah 1.

Rajah 3. DFA membenarkan rentetan (a|b) * a(a|b)(a|b).

Automatik terhingga deterministik M yang menerima bahasa yang diberikan:

M = ((1, 2, 3, 4, 5, 6, 7, 8), (a, b), D, 1, (3, 5, 6, 8))

Fungsi peralihan D ditakrifkan seperti berikut:

Membina nka menggunakan ungkapan biasa

1. Untuk ε NKA mempunyai bentuk berikut (0 – keadaan awal, 1 – keadaan akhir):

2. Untuk disertakan dalam bahasa NKA tertentu:

3. Biarkan N(s) dan N(t) menjadi NFA untuk ungkapan biasa s dan t.

    Untuk ungkapan biasa s|t, NFA komposit mempunyai bentuk berikut:

b. Untuk ungkapan biasa st NKA:

Dengan. Untuk ungkapan s* NFA mempunyai bentuk:

d. Untuk ungkapan dalam kurungan (s), NFA N(s) digunakan seperti dalam titik a.

Setiap negeri baharu menerima nama individu. Pembinaan NFA N(r) mempunyai ciri-ciri berikut:

    N(r) mempunyai bilangan keadaan yang tidak melebihi bilangan simbol lebih daripada 2 kali.

    N(r) mempunyai tepat satu keadaan awal dan satu keadaan akhir. Keadaan akhir tidak mempunyai peralihan keluar.

    Setiap keadaan N(r) mempunyai sama ada 1 peralihan untuk simbol daripada abjad (), atau tidak lebih daripada 2 peralihan ε keluar.

Penukaran nka kepada dka.

NFA dalam Rajah 1 mempunyai 2 peralihan daripada keadaan 0 untuk simbol a: menyatakan 0 dan 1. Peralihan sedemikian adalah samar-samar, seperti peralihan dalam ε. Memodelkan satelit sedemikian menggunakan program komputer adalah lebih sukar. Takrif kebolehlaksanaan menyatakan bahawa mesti ada beberapa laluan dari keadaan awal ke keadaan akhir, tetapi apabila terdapat berbilang laluan untuk rentetan input yang sama, mereka semua mesti dipertimbangkan untuk mencari laluan ke keadaan akhir atau mengetahui bahawa terdapat bukan jalan sedemikian.

Dalam jadual peralihan NKA, setiap entri sepadan dengan banyak negeri, tetapi dalam jadual peralihan DKA, hanya ada satu. Intipati transformasi ialah setiap keadaan DFA sepadan dengan satu set keadaan NFA. DFA menggunakan keadaannya untuk menjejaki semua kemungkinan keadaan yang mungkin ada NFA selepas membaca simbol input seterusnya. Iaitu, selepas membaca aliran input, DFA berada dalam keadaan yang mewakili set keadaan tertentu NFA, boleh dicapai dari yang awal di sepanjang laluan yang sepadan dengan rentetan input. Bilangan keadaan DFA sedemikian boleh melebihi bilangan keadaan NFA (pergantungan eksponen) dengan ketara, tetapi dalam praktiknya ini sangat jarang berlaku, dan kadangkala terdapat lebih sedikit negeri dalam DFA berbanding NFA.

Mari kita pertimbangkan transformasi sedemikian menggunakan contoh khusus. Rajah 4 menunjukkan NFA lain yang membenarkan bahasa (a|b) * a(a|b)(a|b) (seperti dalam Rajah 1 dan 3).

Rajah 4. NFA membenarkan bahasa (a|b) * a(a|b)(a|b)

Peralihan daripada keadaan 13 kepada keadaan 14 yang ditunjukkan dalam rajah boleh diwakili sama seperti peralihan dari keadaan ke-8 kepada keadaan ke-13.

Mari kita bina DFA untuk bahasa ini. Keadaan permulaan DFA yang setara ialah keadaan A = (0, 1, 2, 4, 7), iaitu keadaan yang boleh dicapai dari 0 oleh ε.

Abjad simbol input ialah (a, b). Daripada keadaan awal A, seseorang boleh mengira keadaan yang boleh dicapai oleh a. Mari kita panggil keadaan ini B = (1, 2, 3, 4, 6, 7, 8, 9, 11, 13, 14).

Antara negeri di A, hanya negeri 4 mempunyai peralihan sepanjang b ke negeri 5, jadi DKA mempunyai peralihan sepanjang b dari A ke keadaan C = (1, 2, 4, 5, 6, 7).

Jika kita meneruskan proses ini dengan keadaan B dan C, semua set keadaan NFA akan ditanda. Oleh itu kita akan mempunyai set keadaan:

A = (0, 1, 2, 4, 7)

B = (1, 2, 3, 4, 6, 7, 8, 9, 11, 13, 14)

C = (1, 2, 4, 5, 6, 7)

D = (10, 12, 13, 14)

Keadaan A ialah keadaan awal, dan keadaan B, D, E ialah keadaan akhir.

Jadual peralihan penuh diberikan di bawah.

Di bawah dalam Rajah 5 ialah DFA sendiri untuk bahasa ini.

Rajah 5. DFA menerima bahasa (a|b) * a(a|b)(a|b)

Senarai literatur yang digunakan:

    Pentus A. E., Pentus M. R. – Teori bahasa formal

    A. Aho, R. Sethi, D. Ullman - Penyusun: prinsip, teknologi, alatan.

  • Ungkapan Biasa
  • Ungkapan biasa (RE) ialah satu bentuk penulisan yang sangat mudah yang dipanggil bahasa biasa atau automata. Oleh itu, RT digunakan sebagai bahasa input dalam banyak sistem yang memproses rantai. Mari lihat contoh sistem sedemikian:

    • Perintah grep Unix atau perintah serupa mencari rentetan yang terdapat dalam pelayar web atau sistem pemformatan teks. Dalam sistem sedemikian, RF digunakan untuk menerangkan corak yang dicari oleh pengguna dalam fail. Pelbagai enjin carian menukar enjin carian kepada sama ada mesin keadaan terhingga deterministik (DFA) atau mesin keadaan terhingga bukan deterministik (NFA) dan menggunakan mesin ini pada fail yang sedang dicari.
    • Penjana penganalisis leksikal. Penganalisis leksikal adalah komponen pengkompil; mereka memecahkan program sumber kepada unit logik (token), yang boleh terdiri daripada satu atau lebih aksara dan mempunyai makna tertentu. Penjana penganalisis leksikal menerima huraian rasmi leksem, yang pada asasnya adalah RV, dan mencipta DFA yang mengenali leksem mana yang muncul dalam inputnya.
    • RV dalam bahasa pengaturcaraan.

    Dalam artikel ini, kita mula-mula akan berkenalan dengan mesin keadaan terhingga dan jenisnya (DFA dan NFA), dan kemudian mempertimbangkan contoh membina DFA minimum menggunakan ungkapan biasa.

    Mesin keadaan terhingga

    Mesin keadaan terhingga (FA) ialah penukar yang membolehkan anda mengaitkan input dengan output yang sepadan, dan output ini boleh bergantung bukan sahaja pada input semasa, tetapi juga pada apa yang berlaku sebelum ini, pada sejarah operasi terhingga. mesin negeri. Malah tingkah laku manusia, dan bukan hanya sistem buatan, boleh digambarkan menggunakan kapal angkasa. Sebagai contoh, reaksi anda terhadap fakta bahawa jiran anda mendengar muzik yang kuat pada waktu malam akan menjadi reaksi selepas kejadian pertama dan berbeza sama sekali selepas beberapa kejadian sedemikian. Mungkin terdapat bilangan prasejarah yang tidak terhingga; persoalan timbul: apakah jenis ingatan yang perlu dimiliki oleh kapal angkasa untuk berkelakuan berbeza untuk setiap prasejarah? Adalah jelas bahawa adalah mustahil untuk menyimpan bilangan latar belakang yang tidak terhingga. Oleh itu, jenis automaton memecahkan semua latar belakang yang mungkin menjadi kelas kesetaraan. Dua sejarah adalah setara jika mereka mempunyai pengaruh yang sama pada kelakuan mesin pada masa hadapan. Kelas kesetaraan yang mana automaton telah menetapkan sejarah semasanya juga dipanggil keadaan dalaman automaton.

    Mari kita pertimbangkan contoh operasi kapal angkasa primitif:

    Kapal angkasa ini terdiri daripada:

    • pita yang diwakili oleh rantai input.
    • peranti membaca.
    • blok kawalan yang mengandungi senarai peraturan peralihan.

    Pembaca boleh bergerak ke satu arah, biasanya dari kiri ke kanan, dengan itu membaca aksara rentetan input. Bagi setiap pergerakan sedemikian, ia boleh mengira satu simbol. Seterusnya, aksara baca dihantar ke unit kawalan. Unit kawalan mengubah keadaan mesin berdasarkan peraturan peralihan. Jika senarai peraturan peralihan tidak mengandungi peraturan untuk simbol baca, maka mesin "mati".

    Sekarang mari kita lihat cara CA boleh ditentukan. Ia boleh dinyatakan dalam bentuk graf atau dalam bentuk jadual kawalan. Dalam bentuk graf, CA ditentukan dengan cara berikut:

    • bucu graf sepadan dengan keadaan kapal angkasa.
    • tepi terarah sepadan dengan fungsi peralihan (di sebelah setiap tepi tersebut simbol di mana peralihan dilakukan ditunjukkan).
    • bucu dengan tepi memasukinya yang tidak meninggalkan lebih daripada satu keadaan sepadan dengan keadaan awal.
    • keadaan akhir kapal angkasa ditandakan dengan garis besar yang tebal.

    Dalam bentuk jadual kawalan, seperti ini:

    • keadaan kapal angkasa terletak di barisan meja.
    • aksara bahasa yang diiktiraf berada dalam lajur.
    • di persimpangan, keadaan ditunjukkan yang boleh dicapai dari keadaan tertentu menggunakan simbol yang diberikan.

    Contoh CA dalam bentuk graf dan dalam bentuk jadual kawalan akan dibentangkan di bawah.

    DKA dan NKA

    Perbezaan utama antara DKA dan NKA ialah DKA hanya boleh berada dalam satu keadaan semasa operasi, manakala NKA boleh berada di beberapa negeri pada masa yang sama. Sebagai contoh kerja NCA, seseorang boleh memetik idea ahli fizik Amerika Hugh Everett bahawa sebarang peristiwa memisahkan dunia kepada beberapa dunia, di mana setiap peristiwa ini berakhir dengan caranya sendiri. Sebagai contoh, dalam satu dunia Hitler memenangi Perang Dunia Kedua, di dunia lain, Newton pergi ke dalam perniagaan dan bukannya fizik dan penemuan undang-undang mekanik klasik terpaksa ditangguhkan selama 50 tahun untuk membuat sebarang kesimpulan daripada operasi automaton, semua "dunia" harus dikaji. Selepas keseluruhan rantaian input dibaca, kami menganggap bahawa NFA menerima rantaian ini jika ia telah menyelesaikan operasi dalam keadaan menerima sekurang-kurangnya satu daripada banyak "dunia". Sehubungan itu, automaton menolak rantai jika ia ditamatkan dalam keadaan tidak menerima di setiap "dunia". DKA menerima rantaian; ini jelas jika, selepas membaca keseluruhan rantaian input, ia mendapati dirinya dalam keadaan menerima.

    Dalam kebanyakan kes, adalah lebih mudah untuk membina NKV daripada DKA. Tetapi walaupun ini, menggunakan NKA untuk pemodelan bukanlah idea yang baik. Nasib baik, untuk setiap NFA adalah mungkin untuk membina DFA yang menerima bahasa input yang sama. Dalam artikel ini kami tidak akan membentangkan algoritma untuk membina DFA menggunakan NFA, tetapi akan mempertimbangkan algoritma ini berdasarkan contoh ilustrasi di bawah.

    Membina DFA minimum menggunakan ungkapan biasa

    Sebagai permulaan, berikut ialah senarai operasi RT yang digunakan dalam artikel ini, mengikut keutamaan:

    • lelaran (penutupan Kleene), menggunakan simbol "*"
    • penggabungan ditentukan menggunakan ruang atau rentetan kosong (contohnya: ab)
    • menyertai menggunakan simbol "|".

    Mari kita lihat contoh di mana ungkapan biasa diberikan:

    Xy* (x | y*) | ab (x | y*) | (x | a*) (x | y*)

    Ia adalah perlu untuk membina DFA minimum menggunakan ungkapan biasa dan menunjukkan pengecaman rantai yang betul dan salah.

    Sebagai permulaan, mari kita permudahkan RV ini, dengan menggunakan undang-undang pengedaran kanan bagi penggabungan berkenaan dengan kesatuan, kita memperoleh RV berikut:

    (xy* | ab | (x | a*)) (x | y*)

    Kini kami membina automasi berdasarkan RV ini:

    Mengikut peraturan untuk menukar penggabungan (kami tidak akan memberikan peraturan untuk menukar PB ke KA, kerana ia agak jelas), kami memperoleh automaton berikut:

    Mengikut peraturan transformasi kesatuan:

    Mengikut peraturan transformasi gabungan:

    Dan pada akhirnya kami menggunakan peraturan transformasi penutupan dan memperoleh εNKA. Di sini adalah perlu untuk membuat tempahan bahawa εNKA ialah NKA yang mengandungi ε-peralihan. Sebaliknya, peralihan ε ialah peralihan di mana mesin tidak mengambil kira rantaian input atau, dengan kata lain, peralihan di sepanjang simbol kosong.

    Kami menyingkirkan ε-transitions ("asterisk" menandakan keadaan akhir):

    Dalam NFA ini, keadaan s3 dan s5 adalah setara, kerana δ(s3, x) = δ(s5, x) = s1 dan δ(s3, y) = δ(s5, y) = s5, s7. Namakan semula keadaan s6 -> s5 dan s7 -> s6:

    Kami membina DKA mengikut NKA:

    Dalam DFA ini, keadaan p1 dan p5 adalah setara, kerana
    δ(p1, x) = δ(p5, x) = p4 dan δ(p1, y) = δ(p5, y) = p5. Namakan semula keadaan p6 -> p5 dan p7 -> p6:

    Mesin ini adalah DKA minimum.

    Biarkan δ sebagai fungsi peralihan, kemudian kita nyatakan fungsi peralihan lanjutan yang dibina daripada δ oleh δ’, dan ω ialah rantai input.

    Katakan rantai ω = aaax dibekalkan kepada input, kami menjangkakan bahawa mesin akan berada dalam salah satu keadaan menerima.

    δ’(p0, ε) = p0
    δ’(p0, a) = δ(δ’(p0, ε), a) = δ(p0, a) = p3
    δ’(p0, aa) = δ(δ’(p0, a), a) = δ(p3, a) = p5
    δ’(p0, aaa) = δ(δ’(p0, aa), a) = δ(p5, a) = p5
    δ’(p0, aaax) = δ(δ’(p0, aaa), x) = δ(p5, x) = p4

    P4 ialah keadaan akhir yang sah, jadi rantai aaax adalah betul untuk mesin ini.

    Sekarang mari kita anggap bahawa ω = xyyb:

    δ’(p0, ε) = p0
    δ’(p0, x) = δ(δ’(p0, ε), x) = δ(p0, x) = p1
    δ’(p0, xy) = δ(δ’(p0, x), y) = δ(p1, y) = p1
    δ’(p0, xyy) = δ(δ’(p0, xy), y) = δ(p1, y) = p1
    δ’(p0, xyyb) = δ(δ’(p0, xyy), b) = δ(p1, b) = ∅

    Di sini kita melihat bahawa jika kita memberikan simbol b kepada input automaton apabila ia berada dalam keadaan p1, maka automaton ini akan mati, oleh itu rantai xyyb adalah tidak betul.

    P. S. Artikel ini membincangkan algoritma untuk membina DFA menggunakan RT, tetapi terdapat algoritma yang lebih mudah, khususnya untuk pengaturcaraan, tetapi ini adalah topik untuk artikel lain...

    Ungkapan biasa (RE) ialah satu bentuk penulisan yang sangat mudah yang dipanggil bahasa biasa atau automata. Oleh itu, RT digunakan sebagai bahasa input dalam banyak sistem yang memproses rantai. Mari lihat contoh sistem sedemikian:

    • Perintah grep Unix atau perintah serupa mencari rentetan yang terdapat dalam pelayar web atau sistem pemformatan teks. Dalam sistem sedemikian, RF digunakan untuk menerangkan corak yang dicari oleh pengguna dalam fail. Pelbagai enjin carian menukar enjin carian kepada sama ada mesin keadaan terhingga deterministik (DFA) atau mesin keadaan terhingga bukan deterministik (NFA) dan menggunakan mesin ini pada fail yang sedang dicari.
    • Penjana penganalisis leksikal. Penganalisis leksikal adalah komponen pengkompil; mereka memecahkan program sumber kepada unit logik (token), yang boleh terdiri daripada satu atau lebih aksara dan mempunyai makna tertentu. Penjana penganalisis leksikal menerima huraian rasmi leksem, yang pada asasnya adalah RV, dan mencipta DFA yang mengenali leksem mana yang muncul dalam inputnya.
    • RV dalam bahasa pengaturcaraan.

    Dalam artikel ini, kita mula-mula akan berkenalan dengan mesin keadaan terhingga dan jenisnya (DFA dan NFA), dan kemudian mempertimbangkan contoh membina DFA minimum menggunakan ungkapan biasa.

    Mesin keadaan terhingga

    Mesin keadaan terhingga (FA) ialah penukar yang membolehkan anda mengaitkan input dengan output yang sepadan, dan output ini boleh bergantung bukan sahaja pada input semasa, tetapi juga pada apa yang berlaku sebelum ini, pada sejarah operasi terhingga. mesin negeri. Malah tingkah laku manusia, dan bukan hanya sistem buatan, boleh digambarkan menggunakan kapal angkasa. Menggunakan CA, adalah mungkin untuk menerangkan bukan sahaja tingkah laku sistem buatan, tetapi juga tingkah laku manusia. Sebagai contoh, reaksi anda terhadap fakta bahawa jiran anda mendengar muzik yang kuat pada waktu malam akan menjadi reaksi selepas kejadian pertama dan berbeza sama sekali selepas beberapa kejadian sedemikian. Terdapat bilangan yang tidak terhingga dari cerita belakang sedemikian, persoalannya timbul; Apakah jenis ingatan yang mesti dimiliki oleh kapal angkasa untuk berkelakuan berbeza untuk setiap prastruktur? Adalah jelas bahawa tidak mungkin untuk menyimpan bilangan latar belakang yang tidak terhingga. Oleh itu, jenis automaton memecahkan semua latar belakang yang mungkin menjadi kelas kesetaraan. Dua sejarah adalah setara jika mereka mempunyai pengaruh yang sama pada kelakuan mesin pada masa hadapan. Kelas kesetaraan yang automaton telah menetapkan sejarah semasanya juga dipanggil keadaan dalaman automaton.

    Sekarang mari kita lihat cara CA boleh ditentukan. Ia boleh dinyatakan dalam bentuk graf atau dalam bentuk jadual kawalan. Dalam bentuk graf, CA ditentukan dengan cara berikut:

    • bucu graf sepadan dengan keadaan kapal angkasa.
    • tepi terarah sepadan dengan fungsi peralihan (di sebelah setiap tepi tersebut simbol di mana peralihan dilakukan ditunjukkan).
    • bucu dengan tepi memasukinya yang tidak meninggalkan lebih daripada satu keadaan sepadan dengan keadaan awal.
    • keadaan akhir kapal angkasa ditandakan dengan garis besar yang tebal.

    Dalam bentuk jadual kawalan, seperti ini:

    • keadaan kapal angkasa terletak di barisan meja.
    • aksara bahasa yang diiktiraf berada dalam lajur.
    • di persimpangan, keadaan ditunjukkan yang boleh dicapai dari keadaan tertentu menggunakan simbol yang diberikan.

    Contoh CA dalam bentuk graf dan dalam bentuk jadual kawalan akan dibentangkan di bawah.

    DKA dan NKA

    Perbezaan utama antara DKA dan NKA ialah DKA hanya boleh berada dalam satu keadaan semasa operasi, manakala NKA boleh berada di beberapa negeri pada masa yang sama. Sebagai contoh kerja NCA, seseorang boleh memetik idea ahli fizik Amerika Hugh Everett bahawa sebarang peristiwa memisahkan dunia kepada beberapa dunia, di mana setiap peristiwa ini berakhir dengan caranya sendiri. Sebagai contoh, dalam satu dunia Hitler memenangi Dunia Kedua. perang, di tempat lain - Newton masuk ke dalam perniagaan dan bukannya fizik dan penemuan undang-undang mekanik klasik terpaksa ditangguhkan selama 50 tahun Untuk membuat sebarang kesimpulan daripada operasi automaton, seseorang harus mengkaji semua "dunia". . Selepas keseluruhan rantaian input dibaca, kami menganggap bahawa NFA menerima rantaian ini jika ia telah menyelesaikan operasi dalam keadaan menerima sekurang-kurangnya satu daripada banyak "dunia". Sehubungan itu, automaton menolak rantai jika ia ditamatkan dalam keadaan tidak menerima di setiap "dunia". DKA menerima rantaian; ini jelas jika, selepas membaca keseluruhan rantaian input, ia mendapati dirinya dalam keadaan menerima.

    Dalam kebanyakan kes, adalah lebih mudah untuk membina NKV daripada DKA. Tetapi walaupun ini, menggunakan NKA untuk pemodelan bukanlah idea yang baik. Nasib baik, untuk setiap NFA adalah mungkin untuk membina DFA yang menerima bahasa input yang sama. Dalam artikel ini kami tidak akan membentangkan algoritma untuk membina DFA menggunakan NFA, tetapi akan mempertimbangkan algoritma ini berdasarkan contoh ilustrasi di bawah.

    Membina DFA minimum menggunakan ungkapan biasa

    Sebagai permulaan, berikut ialah sintaks RT yang digunakan dalam artikel ini:

    • penggabungan ditentukan menggunakan ruang atau rentetan kosong (contohnya: ab)
    • menyertai menggunakan simbol "|".
    • lelaran (penutupan Kleene), menggunakan simbol "*"

    Mari kita lihat contoh di mana ungkapan biasa diberikan:

    xy* (x | y*) | ab (x | y*) | (x | a*) (x | y*)

    Ia adalah perlu untuk membina DFA minimum menggunakan ungkapan biasa dan menunjukkan pengecaman rantai yang betul dan salah.

    Sebagai permulaan, mari kita permudahkan RV ini, dengan menggunakan undang-undang pengedaran kanan bagi penggabungan berkenaan dengan kesatuan, kita memperoleh RV berikut:

    (xy* | ab | (x | a*)) (x | y*)

    Kini kami membina automasi berdasarkan RV ini:

    Mengikut peraturan untuk menukar penggabungan (kami tidak akan memberikan peraturan untuk menukar RV ke CA, kerana ia agak jelas), kami memperoleh automaton berikut:

    Mengikut peraturan transformasi kesatuan:

    Mengikut peraturan transformasi gabungan:

    Dan pada akhirnya kami menggunakan peraturan transformasi penutupan dan mendapatkan εNKA:

    Kami menyingkirkan ε-transitions ("asterisk" menandakan keadaan akhir):

    Dalam NFA ini, keadaan s3 dan s5 adalah setara, kerana δ(s3, x) = δ(s5, x) = s1 dan δ(s3, y) = δ(s5, y) = s5, s7. Namakan semula keadaan s6 -> s5 dan s7 -> s6:

    Kami membina DKA mengikut NKA:

    Dalam DFA ini, keadaan p1 dan p5 adalah setara, kerana
    δ(p1, x) = δ(p5, x) = p4 dan δ(p1, y) = δ(p5, y) = p5. Namakan semula keadaan p6 -> p5 dan p7 -> p6:

    Mesin ini adalah DKA minimum.

    Biarkan δ sebagai fungsi peralihan, kemudian kita nyatakan fungsi peralihan lanjutan yang dibina daripada δ oleh δ’, dan ω ialah rantai input.

    Katakan input ialah rantai ω = aaax, kami menjangkakan bahawa mesin akan berada dalam salah satu keadaan menerima.

    δ’(p0, ε) = p0
    δ’(p0, a) = δ(δ’(p0, ε), a) = δ(p0, a) = p3
    δ’(p0, aa) = δ(δ’(p0, a), a) = δ(p3, a) = p5
    δ’(p0, aaa) = δ(δ’(p0, aa), a) = δ(p5, a) = p5
    δ’(p0, aaax) = δ(δ’(p0, aaa), a) = δ(p5, a) = p4

    p4 ialah keadaan akhir yang sah, jadi rantai aaax adalah betul untuk mesin ini.

    Sekarang mari kita anggap bahawa ω = xyyb:

    δ’(p0, ε) = p0
    δ’(p0, x) = δ(δ’(p0, ε), x) = δ(p0, x) = p1
    δ’(p0, xy) = δ(δ’(p0, x), y) = δ(p1, y) = p1
    δ’(p0, xyy) = δ(δ’(p0, xy), y) = δ(p1, y) = p1
    δ’(p0, xyyb) = δ(δ’(p0, xyy), b) = δ(p1, b) = ∅

    Di sini kita melihat bahawa jika kita memberikan simbol b kepada input automaton apabila ia berada dalam keadaan p1, maka automaton ini akan mati, oleh itu rantai xyyb adalah tidak betul.

    P. S. Artikel ini membincangkan algoritma untuk membina DFA menggunakan RT, tetapi terdapat algoritma yang lebih mudah, khususnya untuk pengaturcaraan, tetapi ini adalah topik untuk artikel lain...

    Mari kita pertimbangkan algoritma untuk membina automaton terhingga bukan deterministik menggunakan ungkapan biasa yang menerima bahasa yang sama.

    Algoritma 3.1. Pembinaan automaton terhingga bukan deterministik menggunakan ungkapan biasa.

    Pintu masuk. Ungkapan biasa r dalam abjad T.

    Keluar. NKA M supaya L(M) = L(r) .

    Kaedah.Automaton untuk ungkapan dibina oleh komposisi automata yang sepadan dengan subungkapan. Pada setiap langkah pembinaan, automaton dalam pembinaan mempunyai tepat satu keadaan akhir; tiada peralihan kepada keadaan awal dari keadaan lain dan tiada peralihan dari keadaan akhir kepada keadaan lain.

    Pembinaan automaton terhingga yang menentukan daripada yang tidak menentukan

    Mari kita pertimbangkan algoritma untuk membina, daripada automaton terhingga tak tentu, automata terhingga deterministik yang menerima bahasa yang sama.

    Algoritma 3.2. Pembinaan automaton terhingga yang menentukan daripada yang tidak menentukan.

    Pintu masuk. NKA M = (Q, T, D, q 0 , F) .

    Keluar. DKA.

    Kaedah. Setiap keadaan DFA yang terhasil ialah set keadaan tertentu NFA asal.

    Fungsi berikut akan digunakan dalam algoritma: - satu set keadaan NKA, boleh dicapai dari keadaan yang termasuk dalam R, melalui peralihan sahaja sepanjang e, iaitu satu set

    Set keadaan NFA yang terdapat peralihan pada input a untuk keadaan daripada R, iaitu set

    Pada mulanya, Q" dan D" kosong. Ikuti langkah 1-4:

    (1) Takrifkan .

    (2) Tambahkan pada Q" sebagai keadaan tidak bertanda

    (3) Lakukan prosedur berikut:


    (4) Tentukan .

    Contoh 3.6. Keputusan menggunakan algoritma 3.2 ditunjukkan dalam Rajah. 3.10.


    nasi.
    3.10.

    Membina mesin keadaan terhingga deterministik menggunakan ungkapan biasa

    Biarkan ungkapan biasa r diberikan dalam abjad T. Pada ungkapan biasa r kami menambah penanda akhir: (r)# . Kami akan memanggil ungkapan biasa sedemikian selesai. Semasa operasinya, algoritma akan menggunakan ungkapan biasa yang lengkap.

    Algoritma akan beroperasi pada pokok sintaks untuk ungkapan biasa yang lengkap (r)#, setiap daun ditandakan dengan simbol , dan setiap satu puncak dalam ditandakan dengan salah satu operasi: (penggabungan), | (kesatuan), * (lelaran).

    Kami menetapkan setiap daun pokok (kecuali e-daun) nombor unik, dipanggil kedudukan, dan menggunakannya, dalam satu tangan, untuk merujuk kepada daun dalam pokok, dan, sebaliknya, untuk merujuk kepada simbol yang sepadan dengan daun ini. Ambil perhatian bahawa jika aksara digunakan berbilang kali dalam ungkapan biasa, ia mempunyai berbilang kedudukan.

    Mari kita melintasi pokok T dari bawah ke atas dari kiri ke kanan dan mengira empat fungsi: nullable, firstpos, lastpos dan followpos. Tiga fungsi pertama - nullable, firstpos dan lastpos - ditakrifkan pada nod pokok, dan followpos - pada satu set kedudukan. Nilai semua fungsi kecuali nullable ialah satu set kedudukan. Fungsi followpos dikira melalui tiga fungsi lain.

    Fungsi firstpos(n), untuk setiap nod n pepohon sintaks ungkapan biasa, memberikan set kedudukan yang sepadan dengan aksara pertama dalam subrentetan yang dijana oleh subungkapan yang mendahului n. Begitu juga, lastpos(n) memberikan set kedudukan yang sepadan dengan aksara terakhir dalam

    Membina mesin keadaan terhingga deterministik menggunakan ungkapan biasa

    Marilah kita membentangkan algoritma untuk membina automaton terhingga deterministik menggunakan ungkapan biasa yang menerima bahasa yang sama [?].

    Biarkan ungkapan biasa r diberikan dalam abjad T. Pada ungkapan biasa r kita tambahkan penanda akhir: (r)#. Kami akan memanggil ungkapan biasa sedemikian selesai. Semasa operasinya, algoritma akan menggunakan ungkapan biasa yang lengkap.

    Algoritma akan beroperasi pada pokok sintaks untuk ungkapan biasa yang lengkap (r)#, setiap daun ditandakan dengan simbol , dan setiap puncak dalam ditandakan dengan salah satu operasi: (penggabungan),| (kesatuan), * (lelaran).

    Kami menetapkan setiap daun pokok (kecuali e-daun) nombor unik, dipanggil kedudukan, dan menggunakannya, dalam satu tangan, untuk merujuk kepada daun dalam pokok, dan, sebaliknya, untuk merujuk kepada simbol yang sepadan dengan daun ini. Ambil perhatian bahawa jika aksara digunakan berbilang kali dalam ungkapan biasa, ia mempunyai berbilang kedudukan.

    Mari kita melintasi pokok T dari bawah ke atas dari kiri ke kanan dan mengira empat fungsi: nullable, firstpos, lastpos dan followpos. Tiga fungsi pertama - nullable, firstpos dan lastpos - ditakrifkan pada nod pokok, dan followpos - pada satu set kedudukan. Nilai semua fungsi kecuali nullable ialah satu set kedudukan. Fungsi followpos dikira melalui tiga fungsi lain.

    Fungsi firstpos(n) untuk setiap nod n pokok ungkapan biasa memberikan set kedudukan yang sepadan dengan aksara pertama dalam rantaian kecil, dijana oleh subungkapan dengan bucu pada n. Begitu juga, lastpos(n) memberikan set kedudukan yang sepadan dengan aksara terakhir dalam rantaian kecil, dijana oleh subungkapan dengan bucu n. Untuk nod n, yang subpokoknya (iaitu, pokok yang mana nod n ialah akar) boleh menjana perkataan kosong, takrifkan nullable(n)=true, dan untuk nod yang tinggal nullable(n)=false.

    Jadual untuk mengira fungsi nullable, firstpos dan lastpos ditunjukkan dalam Rajah. 3.11.

    Contoh 3.7.Dalam Rajah. Rajah 3.12 menunjukkan pepohon sintaks untuk ungkapan biasa yang lengkap (a|b) * abb# dengan hasil pengiraan fungsi firstpos dan lastpos. Di sebelah kiri setiap nod ialah nilai firstpos, di sebelah kanan nod ialah nilai lastpos. Ambil perhatian bahawa fungsi ini boleh dikira dalam traversal pokok tunggal.

    Jika i ialah kedudukan, maka followpos(i) ialah set kedudukan j supaya terdapat beberapa rentetan... cd ... termasuk dalam bahasa yang diterangkan oleh ungkapan biasa supaya kedudukan i sepadan dengan kejadian c ini, dan kedudukan j sepadan dengan berlaku.

    nasi. 3.11.

    nasi. 3.12.

    Fungsi followpos juga boleh dikira dalam satu traversal bawah ke atas pokok menggunakan dua peraturan ini.

    1. Biarkan n menjadi nod dalaman dengan operasi (penggabungan), u dan v anak-anaknya. Kemudian untuk setiap kedudukan yang saya masukkan dalam lastpos(u), kami menambah set firstpos(v) kepada set nilai followpos(i).

    2. Biarkan n sebagai nod dalaman dengan operasi * (lelaran), u ialah keturunannya. Kemudian untuk setiap kedudukan yang saya masukkan dalam lastpos(u), kami menambah set firstpos(u) kepada set nilai followpos(i).

    Contoh 3.8. Hasil pengiraan fungsi followpos untuk ungkapan biasa daripada contoh sebelumnya ditunjukkan dalam Rajah. 3.13.

    Algoritma 3.3. Pembinaan langsung DFA menggunakan ungkapan biasa.

    Pintu masuk. Ungkapan biasa r dalam abjad T.

    Keluar. DFA M = (Q, T, D, q 0 , F), supaya L(M) = L(r).

    Kaedah. Negeri DFA sepadan dengan set jawatan.

    Pada mulanya Q dan D kosong. Ikuti langkah 1-6:

    (1) Bina pepohon sintaks untuk ungkapan biasa ditambah (r)#.