Y avait-il un changement de langue qui l'exigeait ou une raison pratique pour laquelle Bison n'était plus approprié ou optimal?
J'ai vu sur wikipedia qu'ils ont changé, se référant aux notes de publication de GCC 3.4 et GCC 4.1 .
Ces notes de version indiquent:
Un analyseur C ++ descendant récursif manuscrit a remplacé l'analyseur C ++ dérivé de YACC des versions précédentes de GCC. Le nouvel analyseur contient une infrastructure bien améliorée nécessaire pour une meilleure analyse des codes source C ++, la gestion des extensions et une séparation nette (si possible) entre l'analyse sémantique appropriée et l'analyse. Le nouvel analyseur corrige de nombreux bogues trouvés dans l'ancien analyseur.
Et:
L'ancien analyseur C basé sur Bison et Objective-C a été remplacé par un nouvel analyseur de descente récursive manuscrit plus rapide
Ce que j'aimerais savoir, c'est quels problèmes réels rencontraient-ils et pourquoi il était impossible / impossible de résoudre en utilisant Bison
Réponses:
GCC est passé à l'analyse manuscrite car les messages d'erreur sont plus significatifs lors de l'utilisation de techniques de descente récursive, comme je l'ai expliqué ici .
De plus, C ++ devient un langage (syntaxiquement) complexe pour analyser que l'utilisation de générateurs d'analyseurs ne vaut pas la peine.
Enfin, l'essentiel du travail d'un vrai compilateur n'est pas l'analyse, il est l'optimisation. Les passes d'optimisation de milieu de gamme GCC sont beaucoup plus complexes que son analyse.
(BTW vous pouvez personnaliser GCC par exemple avec des plugins ou en utilisant MELT , mais vous ne pouvez pas vraiment étendre la syntaxe du langage qu'il accepte - sauf en ajoutant des attributs et des pragmas).
la source