Apakah ada algoritma / prosedur sistematis untuk menguji apakah suatu bahasa bebas konteks?
Dengan kata lain, diberikan bahasa yang ditentukan dalam bentuk aljabar (pikirkan sesuatu seperti ), uji apakah bahasa tersebut bebas konteks atau tidak. Bayangkan kita sedang menulis layanan web untuk membantu siswa dengan semua pekerjaan rumah mereka; Anda menentukan bahasa, dan layanan web menghasilkan "bebas konteks" atau "tidak bebas konteks". Apakah ada pendekatan yang baik untuk mengotomatisasi ini?
Tentu saja ada teknik untuk bukti manual, seperti lemma pemompaan, lemma Ogden, lemma Parikh, lemma Interchange, dan banyak lagi di sini . Namun, mereka masing-masing memerlukan wawasan manual di beberapa titik, jadi tidak jelas bagaimana mengubahnya menjadi sesuatu yang algoritmik.
Saya melihat Kaveh telah menulis di tempat lain bahwa himpunan bahasa bebas-konteks tidak dihitung secara rekursif, jadi sepertinya tidak ada harapan untuk algoritma apa pun untuk bekerja pada semua bahasa yang mungkin. Oleh karena itu, saya kira layanan web harus dapat menghasilkan "bebas konteks", "tidak bebas konteks", atau "Saya tidak tahu". Apakah ada algoritma yang sering dapat memberikan jawaban selain "Saya tidak tahu", pada banyak bahasa yang cenderung dilihat di buku teks? Bagaimana Anda membangun layanan web seperti itu?
Untuk membuat pertanyaan ini diajukan dengan baik, kita perlu memutuskan bagaimana pengguna akan menentukan bahasa. Saya terbuka untuk saran, tetapi saya memikirkan sesuatu seperti ini:
di mana adalah ekspresi kata dan S adalah sistem ketidaksetaraan linear atas variabel panjang, dengan definisi berikut:
Setiap adalah ekspresi kata. (Ini mewakili variabel yang dapat menyimpan kata apa pun di Σ ∗ .)
Masing-masing adalah ekspresi kata. (Secara implisit, Σ = { a , b , c , ... } , jadi a , b , c mewakili simbol tunggal dalam alfabet yang mendasarinya.)
Masing-masing adalah kata-ekspresi, jika adalah panjang-variabel.
Rangkaian ekspresi kata adalah ekspresi kata.
Setiap adalah variabel panjang. (Ini mewakili variabel yang dapat menampung bilangan asli apa pun.)
Masing-masing adalah variabel panjang. (Ini mewakili panjang kata yang sesuai.)
Ini tampaknya cukup luas untuk menangani banyak kasus yang kita lihat dalam latihan buku teks. Tentu saja, Anda dapat mengganti metode tekstual lainnya untuk menentukan bahasa dalam bentuk aljabar, jika Anda mau.
Jawaban:
Oleh teorema Rice , untuk melihat apakah bahasa yang diterima oleh mesin Turing memiliki properti non-sepele (di sini: menjadi bebas konteks) tidak dapat ditentukan. Jadi, Anda harus membatasi kekuatan mesin pengenalan Anda (atau deskripsi) untuk membuatnya tidak Turing lengkap untuk berharap jawaban.
Untuk beberapa deskripsi bahasa, jawabannya adalah sepele: Jika itu dengan ekspresi reguler, itu teratur, sehingga bebas konteks. Jika berdasarkan konteks, tata bahasa gratis, apalagi.
sumber
Bahasa apa pun diterima oleh Push Down Automata, adalah CFL. Berikut ini rincian terperinci untuk menentukan apakah suatu bahasa CFL atau tidak. periksa apakah bahasa CFL atau tidak
sumber
Coba perangkat lunak JFLAP jika Anda hanya ingin memeriksa CFG. Anda bahkan dapat meminta pengembang JFLAP untuk memberikan kode atau algoritma untuk perangkat lunak tersebut. Anda bisa mendapatkan JFLAP dari sini http://www.jflap.org/jflaptmp/ gratis tetapi memerlukan JDK atau JRE atau sesuatu. Atau mungkin Anda dapat mencoba beberapa perangkat lunak serupa lainnya dan pengembangnya.
sumber