EPAL, bahasa bahkan palindrom, didefinisikan sebagai bahasa yang dihasilkan oleh tata bahasa bebas konteks berikut:
EPAL adalah 'kutukan' dari banyak algoritma penguraian: Saya belum menemukan algoritma penguraian untuk CFG yang pasti yang dapat menguraikan tata bahasa apa pun yang menjelaskan bahasa. Ini sering digunakan untuk menunjukkan bahwa ada CFG yang tidak ambigu yang tidak dapat diurai oleh parser tertentu. Ini menginspirasi pertanyaan saya:
Apakah ada beberapa algoritma penguraian yang hanya menerima CFG yang jelas yang bekerja pada EPAL?
Tentu saja, seseorang dapat merancang pengurai dua-jalur ad-hoc untuk tata bahasa yang mem-parsing bahasa dalam waktu linier. Saya tertarik dengan metode parsing yang belum dirancang khusus dengan EPAL dalam pikiran.
sumber
Jawaban:
Pertimbangkan sketsa strategi parsing berikut dengan risiko Anda sendiri.
Alih-alih membaca input hanya dari satu ujung, kami membaca dari kedua sisi dan mencari aturan yang cocok. Kita bisa melakukan ini dalam gaya keturunan rekursif; dalam panggilan ke , cari awalan dan suffix ke input sedemikian rupa sehingga ada aturan , turun ke pada kata yang tersisa. Jika tidak ada aturan yang cocok, tolak kata tersebut.w v A → w B v B ( )A() w v A→wBv B()
Algoritma ini mem-parsing semua tata bahasa linier, tidak ambigu. Dibutuhkan waktu linier jika semua pasangan aturan dan memiliki atau ¹. Ini termasuk EPAL. Kalau tidak, kita perlu melihat ke depan sehingga kita mungkin mengambil waktu.A→wBv A→w′B′v′ w≢pw′ v≢sv′ Θ(n2)
Idenya tidak bekerja untuk tata bahasa non-linear sama sekali. Tata bahasa linier tapi ambigu pada umumnya tidak dapat diuraikan tanpa mundur (setidaknya untuk input negatif).
sumber