Les 9 "phases de la traduction" sont énumérées dans la norme à l'adresse suivante [lex.phases]
(2,2 en C++11, 2,1 en C++03).
Le niveau de détail exigé dans la norme varie : le prétraitement est divisé en plusieurs phases, car il est important, à différents moments de la norme, de savoir exactement ce qui a "déjà été fait" et ce qui "reste à faire" lorsqu'un comportement particulier est défini. Ainsi, bien que la norme ne vous dise pas comment écrire un lexer, elle vous donne une feuille de route assez claire.
La liaison, quant à elle, est laissée à l'implémentation qui décide de la manière dont elle est réalisée, car la norme ne s'y intéresse pas. comment un nom donné est recherché, juste ce à quoi il se réfère.
Il ne donne pas non plus de détails sur l'analyse syntaxique, il dit simplement "Les tokens résultants sont analysés et traduits syntaxiquement et sémantiquement". C'est parce que l'ensemble des chapitres 3 à 15 sont nécessaires pour remplir ce détail.
Elle ne mentionne pas du tout les représentations internes pendant l'analyse/la traduction, ni les phases d'optimisation - elles sont importantes pour la conception des compilateurs, mais pas pour la norme. L'optimisation peut intervenir à différents endroits dans différents compilateurs. Pendant longtemps, l'optimisation était presque entièrement dans la phase de compilation, avant l'émission des fichiers objets, et les linkers étaient stupides comme tout. Je pense que maintenant les implémentations C++ sérieuses peuvent toutes faire au moins une certaine optimisation à travers plusieurs UT. Ainsi, "les autres" ne sont pas simplement laissés de côté dans la norme, ils changent réellement au fil du temps.