Saya telah bersenang-senang akhir-akhir ini mengeksplorasi pengembangan parser bahasa dalam konteks bagaimana mereka cocok dengan Hierarki Chomsky.
Apa contoh dunia nyata yang baik (yaitu tidak teoretis) dari tata bahasa yang peka konteks?
Saya telah bersenang-senang akhir-akhir ini mengeksplorasi pengembangan parser bahasa dalam konteks bagaimana mereka cocok dengan Hierarki Chomsky.
Apa contoh dunia nyata yang baik (yaitu tidak teoretis) dari tata bahasa yang peka konteks?
Jawaban:
Pertanyaan bagus. Meskipun seperti yang disebutkan dalam komentar sangat banyak bahasa pemrograman yang peka konteks, sensitivitas konteks sering tidak diselesaikan dalam fase parsing tetapi dalam fase selanjutnya - yaitu, superset dari bahasa diuraikan menggunakan tata bahasa bebas konteks, dan beberapa pohon parse itu kemudian disaring.
Namun, itu tidak berarti bahwa bahasa-bahasa itu tidak peka terhadap konteks , jadi inilah beberapa contohnya:
Haskell memungkinkan Anda untuk mendefinisikan fungsi-fungsi yang digunakan sebagai operator, dan juga untuk menentukan prioritas dan asosiasi dari operator tersebut. Dengan kata lain, Anda tidak dapat membuat parse tree yang benar untuk ekspresi operator seperti:
a @@ b @@ c ## d ## e
kecuali Anda sudah menguraikan deklarasi presedensi / asosiatif untuk @@
dan ##
:
infixr 8 @@
infixr 6 ##
Contoh kedua adalah Bencode , bahasa data yang mengawali konten dengan panjangnya:
<length>:<contents>
Masalah dengan format ini adalah bahwa hampir tidak mungkin untuk mem-parsing tanpa sesuatu yang peka konteks, karena satu-satunya cara untuk mengetahui ukuran "bidang" adalah dengan ... mem-parsing string.
Contoh ketiga adalah XML, dengan asumsi nama tag sewenang-wenang diizinkan: nama tag pembuka harus memiliki tag penutup yang cocok:
<hi>
<bye>
the closing tag has to match bye
</bye>
</hi> <!-- has to match "hi" -->
Selama aku tahu, tata bahasa konteks-sensitif yang digunakan dalam pengolahan bahasa alami, hanya . Memprogram penerjemah dan kompiler bahasa tidak mencoba untuk menguraikan tata bahasa bebas konteks karena kompleksitas (bahkan jika beberapa upaya telah dilakukan di masa lalu).
Mungkin, Anda dapat menemukan beberapa contoh penggunaan nyata di salah satu perpustakaan ini:
http://en.wikipedia.org/wiki/List_of_natural_language_processing_toolkits
Tata bahasa sensitif konteks kadang-kadang digunakan dalam deskripsi semantik bahasa pemrograman. Mungkin penggunaan tata bahasa sensitif konteks yang paling komprehensif adalah definisi bahasa Algol68. Itu menggunakan grammer konteks gratis dua tingkat (lihat http://en.wikipedia.org/wiki/Two-level_grammar ) untuk menggambarkan sintaks dan semantik program Algol68.
Beberapa rekan saya menggunakan tata bahasa van Wijngaarden untuk mengarahkan implementasi Algol68 (lihat http://en.wikipedia.org/wiki/FLACC ).