Sind GCC- und Clang-Parser wirklich handgeschrieben?

Sind GCC- und Clang-Parser wirklich handgeschrieben?


Es scheint, dass GCC und LLVM-Clang handgeschriebene rekursive Abstiegsparser verwenden , und nicht maschinengeneriert, Bison-Flex-basiert, Bottom-Up-Parsing.


Könnte hier bitte jemand bestätigen, dass dies der Fall ist?
Und wenn ja, warum verwenden Mainstream-Compiler-Frameworks handschriftliche Parser?


Aktualisieren :interessanter Blog zu diesem Thema hier


Antworten:


Ja:



  • GCC verwendete einmal einen yacc (Bison)-Parser, aber er wurde irgendwann in der 3.x-Serie durch einen handgeschriebenen rekursiven Abstiegsparser ersetzt:siehe http://gcc.gnu.org/wiki/New_C_Parser für Links zu relevanten Patch-Einreichungen.


  • Clang verwendet auch einen handgeschriebenen Parser mit rekursivem Abstieg:siehe Abschnitt "Ein einzelner einheitlicher Parser für C, Objective C, C++ und Objective C++" am Ende von http://clang.llvm.org/features.html .