Apakah ada perubahan bahasa yang mengharuskannya atau alasan praktis mengapa Bison tidak lagi sesuai atau optimal?
Saya melihat di wikipedia bahwa mereka beralih, merujuk pada catatan rilis GCC 3.4 dan GCC 4.1 .
Catatan rilis ini menyatakan:
Pengurai C ++ recursive-descent yang ditulis tangan telah menggantikan pengurai C ++ yang diturunkan dari YACC dari rilis GCC sebelumnya. Parser baru berisi banyak infrastruktur yang ditingkatkan yang diperlukan untuk penguraian kode sumber C ++ yang lebih baik, penanganan ekstensi, dan pemisahan bersih (jika mungkin) antara analisis semantik yang tepat dan penguraian. Parser baru memperbaiki banyak bug yang ditemukan di Parser lama.
Dan:
Parser C dan Objective-C berbasis Bison yang lama telah digantikan oleh pengurai turunan rekursif-keturunan baru yang lebih cepat.
Yang ingin saya ketahui adalah masalah aktual apa yang mereka hadapi dan mengapa tidak mungkin / tidak praktis untuk diselesaikan menggunakan Bison
Jawaban:
GCC beralih ke penguraian tulisan tangan karena pesan kesalahan lebih bermakna ketika menggunakan teknik keturunan rekursif, seperti yang saya jelaskan di sini .
Juga, C ++ menjadi bahasa yang kompleks (secara sintaksis) untuk mem-parsing sehingga penggunaan generator parser tidak berguna untuk itu.
Akhirnya, sebagian besar pekerjaan kompiler nyata tidak parsing, itu mengoptimalkan. Pass optimasi GCC middle end jauh lebih kompleks daripada parsingnya.
(BTW Anda dapat menyesuaikan GCC misalnya dengan plugin atau menggunakan MELT , tetapi Anda tidak dapat benar-benar memperpanjang sintaks bahasa yang diterima - kecuali dengan menambahkan atribut dan pragma).
sumber