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

Mengapa Penghurai LR(1) Tidak Dapat Mengendalikan Tatabahasa Ambiguous C?

Susan Sarandon
Lepaskan: 2024-12-28 03:02:10
asal
266 orang telah melayarinya

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

Mengapa LR(1) Parsing Falls Pendek untuk C

Banyak bahasa pengaturcaraan boleh dianalisis menggunakan variasi penghurai LR, tetapi C membentangkan pengecualian ketara. Ini kerana C membenarkan peraturan tatabahasa samar-samar, yang penghurai LR(1) direka bentuk untuk dikendalikan.

Pertimbangkan pernyataan C berikut:

x * y ;
Salin selepas log masuk

Pernyataan ini boleh mempunyai dua parse yang berbeza:

  1. Ia boleh mengisytiharkan y sebagai penunjuk untuk menaip x.
  2. Ia boleh mendarab x dan y, membuang keputusan.

Penghurai LR(1) tidak boleh membezakan antara dua tafsiran ini berdasarkan semata-mata pada pandangan hadapan satu token. Kekaburan ini berpunca daripada fakta bahawa C membenarkan ungkapan digunakan sebagai pengisytiharan dan sebagai pernyataan.

Untuk menampung kekaburan ini, penghurai C biasanya menggunakan teknik penghuraian deterministik digabungkan dengan maklumat jadual simbol. Dengan menyemak jenis x, penghurai boleh menentukan sama ada pernyataan itu adalah pengisytiharan atau pendaraban.

Sebagai alternatif, penghurai GLR (Penghurai LR Umum) boleh mengendalikan kekaburan C dengan menerima kedua-dua penghuraian dan mewakilinya dalam struktur graf. Pas seterusnya boleh menyelesaikan sebarang kekaburan yang tidak dapat diselesaikan.

Kesimpulannya, C memerlukan teknik penghuraian yang boleh menampung peraturan tatabahasa yang samar-samar, yang penghurai LR(1) tidak dapat mengendalikan dengan berkesan.

Atas ialah kandungan terperinci Mengapa Penghurai LR(1) Tidak Dapat Mengendalikan Tatabahasa Ambiguous 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