Ada (setidaknya) salah satu cara untuk membuktikan unambiguity dari tata bahasa G=(N,T,δ,S) untuk bahasa L . Ini terdiri dari dua langkah:
- Buktikan L⊆L(G) .
- Buktikan [zn]SG(z)=|Ln|.
Langkah pertama cukup jelas: menunjukkan bahwa tata bahasa menghasilkan (setidaknya) kata-kata yang Anda inginkan, itu benar.
Langkah kedua menunjukkan bahwa memiliki banyak pohon sintaks untuk kata-kata dengan panjang seperti memiliki kata-kata dengan panjang - dengan 1. ini mengimplikasikan ketidakjelasan. Ia menggunakan fungsi struktur yang kembali ke Chomsky dan Schützenberger [1], yaitun L n GGnLnG
SG(z)=∑n=0∞tnzn
dengan jumlah pohon sintaks yang dimiliki untuk kata-kata panjang . Tentu saja Anda harus memilikiagar ini bekerja.G n | L n |tn=[zn]SG(z)Gn|Ln|
Yang menyenangkan adalah bahwa (biasanya) mudah diperoleh untuk bahasa bebas konteks, walaupun menemukan bentuk tertutup untuk bisa jadi sulit. Ubah menjadi sistem persamaan fungsi dengan satu variabel per nonterminal:t n GSGtnG
⎡⎣A(z)=∑(A,a0…ak)∈δ ∏i=0k τ(ai) :A∈N⎤⎦ with τ(a)={a(z)z,a∈N,a∈T.
Ini mungkin terlihat menakutkan tetapi sebenarnya hanya transformasi sintaksis seperti yang akan menjadi jelas dalam contoh ini. Idenya adalah bahwa dihasilkan simbol terminal dihitung dalam eksponen dan karena sistem memiliki bentuk yang sama seperti , terjadi sesering dalam penjumlahan sebagai terminal dapat dihasilkan oleh . Periksa Kuich [2] untuk detailnya.G z n n GzGznnG
Memecahkan sistem persamaan ini (aljabar komputer!) Menghasilkan ; sekarang Anda "hanya" harus menarik koefisien (dalam bentuk tertutup, umum). The TCS Cheat Sheet dan komputer aljabar sering dapat melakukannya.S(z)=SG(z)
Contoh
Pertimbangkan tata bahasa sederhana dengan aturanG
S→ a Sa ∣ b Sb ∣ ε .
Jelas bahwa (langkah 1, bukti dengan induksi). Ada palindrom dengan panjang jika adalah genap, sebaliknya.2 nL(G)={wwR∣w∈{a,b}∗} nn02n2nn0
Menyiapkan hasil sistem persamaan
S(z)=2z2S(z)+1
solusi siapa
SG(z)=11−2z2 .
Koefisien bertepatan dengan jumlah palindrom, sehingga tidak ambigu. GSG G
- Teori Aljabar Bahasa Bebas Konteks oleh Chomsky, Schützenberger (1963)
- Tentang entropi bahasa bebas konteks oleh Kuich (1970)
Ini adalah pertanyaan yang bagus, tetapi beberapa Googling akan memberi tahu Anda bahwa tidak ada metode umum untuk memutuskan ambiguitas , jadi Anda perlu membuat pertanyaan Anda lebih spesifik.
sumber
Untuk beberapa tata bahasa, bukti dengan induksi (panjang kata lebih) dimungkinkan.
Pertimbangkan misalnya tata bahasa atas diberikan oleh aturan berikut:Σ = { a , b }G Σ={a,b}
Semua kata dengan panjang dalam - hanya ada - hanya memiliki satu derivasi-kiri.L ( G ) ε≤1 L(G) ε
Asumsikan semua kata dengan panjang untuk beberapa hanya memiliki satu derivasi-kiri.≤n n∈N
Sekarang pertimbangkan sembarang untuk beberapa . Jelas, . Jika , kita tahu bahwa aturan pertama dalam setiap derivasi kiri harus ; jika , itu harus . Ini mencakup semua kasus. Dengan hipotesis induksi, kita tahu bahwa ada tepat satu derivasi kiri untuk . Dalam kombinasi, kami menyimpulkan bahwa ada tepat satu derivasi kiri untuk juga.w=w1w′wn∈L(G)∩Σn n>0 w1∈Σ w1=a S→aSa w1=b S→bSb w′ w
Ini menjadi lebih sulit jika
Mungkin membantu memperkuat klaim terhadap semua bentuk sentensial (jika tata bahasa tidak memiliki terminal non-produktif) dan non-terminal "root".
Saya pikir konversi ke bentuk normal Greibach mempertahankan (tidak) ambiguitas, untuk menerapkan langkah ini terlebih dahulu dapat menangani rekursi kiri dengan baik.
Kuncinya adalah mengidentifikasi satu fitur dari setiap kata yang memperbaiki (setidaknya) satu langkah derivasi. Sisanya mengikuti secara induktif.
sumber
Pada dasarnya, ini masalah generasi anak. Mulailah dengan ekspresi pertama, dan hasilkan anak-anak itu .... Terus lakukan itu secara rekursif (DFS), dan setelah beberapa iterasi, lihat apakah Anda dapat menghasilkan ekspresi diperluas yang sama dari dua anak yang berbeda. Jika Anda bisa melakukan itu, ini ambigu. Tidak ada cara untuk menentukan waktu berjalan dari algoritma ini. Anggap itu aman, setelah mungkin menghasilkan 30 level anak-anak :) (Tentu saja itu bisa meledak pada tanggal 31)
sumber