Houve uma mudança de idioma que exigia isso ou algum motivo prático pelo qual Bison não era mais apropriado ou ideal?
Vi na wikipedia que eles mudaram, referindo-se às notas de versão do GCC 3.4 e do GCC 4.1 .
Essas notas de versão afirmam:
Um analisador C ++ de descida recursiva manuscrita substituiu o analisador C ++ derivado do YACC de versões anteriores do GCC. O novo analisador contém uma infraestrutura muito melhorada necessária para uma melhor análise dos códigos-fonte C ++, manipulação de extensões e separação limpa (sempre que possível) entre análise semântica e análise adequadas. O novo analisador corrige muitos erros encontrados no analisador antigo.
E:
O antigo analisador C e Objective-C baseado em Bison foi substituído por um novo analisador de descida recursiva à mão, mais rápido e escrito à mão
O que eu gostaria de saber é que problemas reais eles estavam tendo e por que era impossível / impraticável resolver usando o Bison
Respostas:
O GCC mudou para a análise manuscrita porque as mensagens de erro são mais significativas ao usar técnicas de descida recursiva, como expliquei aqui .
Além disso, o C ++ está se tornando uma linguagem tão complexa (sintaticamente) para analisar que o uso de geradores de analisador não vale a pena.
Por fim, a maior parte do trabalho de um compilador real não está analisando, está otimizando. Os passes de otimização de extremidade intermediária do GCC são muito mais complexos que sua análise.
(Você pode personalizar o GCC, por exemplo, com plug-ins ou usando o MELT , mas não pode realmente estender a sintaxe do idioma que está aceitando - exceto adicionando atributos e pragmas).
fonte