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 ;
Pernyataan ini boleh mempunyai dua parse yang berbeza:
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!