Ada banyak teknik untuk membuktikan bahwa bahasa adalah tidak bebas konteks, tapi bagaimana saya membuktikan bahwa bahasa adalah bebas konteks?
Teknik apa yang ada untuk membuktikan ini? Jelas, salah satu caranya adalah dengan menunjukkan tata bahasa bebas konteks untuk bahasa tersebut. Apakah ada teknik sistematis untuk menemukan tata bahasa bebas konteks untuk bahasa tertentu?
Untuk bahasa biasa, ada yang cara yang sistematis untuk memperoleh biasa robot tata bahasa / terbatas-negara: misalnya, Myhill-Nerode teorema menyediakan salah satu cara. Apakah ada teknik yang sesuai untuk bahasa bebas konteks?
Motivasi saya di sini adalah (mudah-mudahan) membangun pertanyaan referensi yang berisi daftar teknik yang sering membantu, ketika mencoba membuktikan bahwa bahasa yang diberikan bebas konteks. Karena kita memiliki banyak pertanyaan di sini yang merupakan kasus khusus ini, akan lebih baik jika kita dapat mendokumentasikan pendekatan umum atau teknik umum yang dapat digunakan ketika menghadapi masalah semacam ini.
Jawaban:
Pendekatan praktis yang dalam banyak contoh berhasil [tetapi tidak selalu, saya tahu] sedang mencoba menemukan struktur bersarang dari string dalam bahasa. "Ketergantungan bersarang" harus dihasilkan pada waktu yang sama di berbagai bagian string.
Kami juga memiliki kotak alat dasar :
rangkaian: jika Anda dapat membagi bahasa menjadi dua bagian berturut-turut, gunakan produksi iniS→ S1S2
union: dibagi menjadi beberapa bagian yang terpisahS→ S1∣ S2
iterasi:S→ S1S∣ ε
Contoh 1
Berikut contoh untuk bersarang (terima kasih Raphael).
Ganti dengan . Kami sekarang dapat drop dalam kondisi.2 l nn 2l n
Ganti dengan (bingung? adalah 'oh' bukan 'nol'). Terapkan alat untuk serikat pekerja. Kami bekerja dengan sini. Juga iff dan mana adalah variabel baru. Ganti dengan .k > o atau k < o o k > o k > o k = s + o s > 0 s k s + ok≠o k>o or k<o o k>o k>o k=s+o s>0 s k s+o
Beberapa penulisan ulang sederhana.
Sekarang kita melihat struktur bersarang, dan mulai membangun tata bahasa.
T → b U U → b U ∣ εS1→TV , , (lihat: rangkaian dan iterasi di sini)T→bU U→bU∣ε
o bV→bVb∣W (kita menghasilkan 's di kedua sisi)o b
Y → b c b c Z → b c Z ∣ εX→YZ , ,Y→bcbc Z→bcZ∣ε
Contoh 2
Penulisan ulang "jelas" pertama.
Dalam linguistice ini disebut "dependensi lintas-seri": interleaving (biasanya) sangat menunjukkan sifat tidak kontekstual. Tentu saja dan kita diselamatkan.m + k = k + mk,m,k,m m+k=k+m
dengan produksi , ,X → a X b ∣ ε Y → b Y c ∣ εS→XY X→aXb∣ε Y→bYc∣ε
Demikian pulaK′={akblcm∣m=k+l}={akblclck∣k,l≥0}
dengan produksi ,X → b X c ∣ εS→aSc∣X X→bXc∣ε
Komentar akhir: teknik-teknik ini membantu Anda menghasilkan tata bahasa kandidat bebas konteks yang diharapkan akan mengenali bahasa Anda. Bukti kebenaran mungkin masih diperlukan, untuk memastikan bahwa tata bahasa benar-benar berfungsi untuk mengenali bahasa Anda (tidak lebih, dan tidak kurang).
sumber
Ada satu karakterisasi CFL yang dapat digunakan, teorema Chomsky-Schützenberger .
Bahasa Dyck
Teorema Chomsky-Schützenberger
Perhatikan bahwa homomorfisme diperluas ke kata-kata (simbol demi simbol) dan kemudian ke bahasa (kata demi kata).
Contoh
Pertimbangkan . DenganL={anbncm∣n,m∈N
teorema ini menyiratkan bahwa bebas dari konteks, khususnya sejak ituL
Contoh 2
Tunjukkan bahwa bebas konteks.L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
Di sini, kita membutuhkan satu jenis kurung untuk , satu untuk , satu untuk , dan yang lainnya digunakan untuk memodelkan yang menyebabkan . Kita gunakana bc b b k≠o
dan menerapkan teorema. Untuk melihat bahwa , kita tidak perlu lebih dari fakta bahwa simbol yang cocok (mis. Dan ) harus sering terjadi secara sama di . Menambahkan contraint ini ke ekspresi reguler yang kita tentukan dengan , kita dapatkanL=ψ(DT∩R) [ ] w∈DT R
dan karenanya
Untuk tata bahasa dan automata
Jika kita ingin memiliki otomat atau tata bahasa pada akhirnya, kita memiliki beberapa pekerjaan di depan kita.
Menuju robot, membangun NPDA untuk dan NFA untuk . Yang pertama adalah standar dan kami memiliki algoritma untuk yang terakhir, asalkan bahasa diberikan dalam representasi yang sesuai (lihat juga di sini ). Persimpangan keduanya adalah konstruksi standar lain dan dapat diterapkan untuk setiap transisi secara individual. R ψDT R ψ
Menuju tata bahasa, bangun satu untuk (sekali lagi, harus standar), ambil satu untuk dan memotongnya . Kemudian terapkan pada set aturan (simbol untuk simbol).D T ψR DT ψ
Bisa dibilang, ini mudah karena algoritmik; kompleksitasnya terletak pada menemukan , , dan . Saya tidak tahu apakah pendekatan ini (sering) lebih sederhana daripada membangun PDA / tata bahasa secara langsung tetapi mungkin memungkinkan untuk fokus pada fitur-fitur penting dari bahasa yang ada. Coba sendiri!R ψT R ψ
sumber