Rumah > pembangunan bahagian belakang > C++ > Mengapa Penghurai LR(1) Tidak Boleh Mengendalikan C ?

Mengapa Penghurai LR(1) Tidak Boleh Mengendalikan C ?

Barbara Streisand
Lepaskan: 2024-12-23 00:53:09
asal
883 orang telah melayarinya

Why Can't LR(1) Parsers Handle C  ?

Menghuraikan C dengan Penghurai LR(1): Satu Usaha Yang Mustahil

Penghuraian LR ialah teknik yang berkuasa untuk menghuraikan tatabahasa tanpa konteks. Walau bagaimanapun, seperti yang dinyatakan oleh Wikipedia, C menimbulkan cabaran penting kepada penghurai LR. Artikel ini menyelidiki ciri khusus C yang menjadikannya tidak sesuai untuk menghuraikan dengan penghurai LR(1).

Peraturan Tatabahasa Ambiguous

Penghurai LR tidak direka untuk mengendalikan peraturan tatabahasa yang tidak jelas. Namun, C mengandungi pernyataan yang terkenal yang memperkenalkan kekaburan:

x * y ;
Salin selepas log masuk

Pernyataan ini boleh ditafsirkan sebagai sama ada pengisytiharan y sebagai penunjuk untuk menaip x atau pendaraban x dan y, membuang hasilnya.

Terdapat Penghurai LR Pengehadan

Penghurai LR(1) hanya boleh melihat ke hadapan pada bilangan token yang terhad, biasanya satu atau dua. Had ini menghalang mereka daripada menyelesaikan kekaburan dalam kenyataan yang disebutkan di atas. Mereka perlu melihat maklumat yang datang kemudian dalam kod untuk membuat penentuan muktamad.

Pendekatan Alternatif

Penyusun yang berjaya menghuraikan C menggunakan pelbagai strategi untuk mengatasi batasan daripada penghurai LR tulen. Teknik ini termasuk:

  • Penghuraian Jalinan dan Koleksi Jadual Simbol: Dengan mengumpul maklumat tentang simbol semasa penghuraian diteruskan, penyusun boleh menyahkekaburan kenyataan seperti perisytiharan penuding-ke-penunjuk yang terkenal berbanding pendaraban.
  • Semakan Semantik: Penghurai LR boleh ditambah dengan semakan semantik untuk mengesahkan kesahihan tafsiran berbeza pada masa jalan. Walau bagaimanapun, pendekatan ini boleh memperkenalkan kerumitan tambahan.
  • Penghurai GLR: Penghurai yang lebih canggih ini boleh mengendalikan tatabahasa yang samar-samar dengan menerima semua penghuraian yang mungkin dan mewakilinya dalam graf akiklik terarah.

Kesimpulan

Kesimpulannya sifat samar-samar peraturan tatabahasa tertentu dalam C menjadikannya mustahil untuk menghuraikan bahasa dengan pasti menggunakan penghurai LR(1). Penyusun yang berjaya menghuraikan C menggunakan teknik alternatif untuk menangani cabaran khusus yang ditimbulkan oleh bahasa tersebut.

Atas ialah kandungan terperinci Mengapa Penghurai LR(1) Tidak Boleh Mengendalikan C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan