Saya ingin mengubah pengguna memasukkan ekspresi reguler ke NFA sehingga saya kemudian dapat menjalankan NFA terhadap string untuk tujuan yang cocok. Apa mesin minimum yang dapat digunakan untuk mem-parsing ekspresi reguler?
Saya menganggap itu harus berupa push down automaton karena keberadaan kurung berarti kebutuhan untuk menghitung dan DFA / NFA tidak dapat melakukan penghitungan yang sewenang-wenang. Apakah asumsi ini benar? Sebagai contoh, ekspresi a (bc *) d akan membutuhkan PDA sehingga sub-ekspresi dalam kurung ditangani dengan benar.
Jawaban:
Anda benar. Sangat mudah untuk menunjukkan bahwa sintaks ekspresi reguler tidak teratur menggunakan teknik standar .
Yang mengatakan, Anda mungkin tidak ingin kode PDA dengan tangan. Pertimbangkan untuk menggunakan generator pengurai seperti ANTLR atau byacc . Jika, di sisi lain, Anda ingin menyelidiki parsing bahasa dengan memprogram parser sendiri, Anda harus melanjutkan dengan algoritma parsing dasar lainnya seperti CYK , Earley , keturunan rekursif dan LR .
sumber
Saya sarankan Anda untuk membaca jawaban Jukka yang bagus untuk pertanyaan " Mencocokkan ekspresi reguler dengan ekspresi reguler " di cstheory, juga. Kutipan:
Ini hanya tautan ke "pandangan berbeda" yang menarik (menurut saya) tentang bahasa ekspresi reguler; seperti yang digarisbawahi dalam komentar di bawah ini, tidak berguna untuk membangun pohon sintaks. Jika Anda ingin memberikan kode parser Anda, saya akan menyarankan Anda artikel sederhana ini pada codeproject " Writing-own-regular-expression-parser ".
sumber