الخلاصة:
Ce document se veut une synthèse du cours sur les compilateurs que je dispense
à l’université de Ghardaïa. L’écriture des compilateurs est à la fois un sujet fascinant, fastidieux et complexe. En effet, la conception/réalisation de compilateurs est
classée dans le top topics les plus inextricables en informatique suivant immédiatement celui de l’écriture des systèmes d’exploitation. De ce fait, l’étudiant doit être
pourvu d’un ensemble complet et varié d’outils qui va du pur fondamental (théorie des langages, théories des graphes, des flots de données, optimisation, etc.), au
plus palpable (structures de données, processeurs, jeux d’instructions, caches, etc.).
Ainsi pour maîtriser cette complexité élevée, ce cours est de coutume scindé en deux
grandes parties. La première concerne le travail antérieur accompli par un compilateur dit aussi la partie analyse ou le front-end, qui comprend les phases d’analyse
lexicale, d’analyse syntaxique et l’analyse sémantique. La deuxième partie, quant
à elle s’occupe de la seconde moitie des tâches d’un compilateur, baptisée la partie synthèse ou le back-end, qui prend en charge : l’optimisation indépendante à la
machine, la génération de code et en fin son optimisation au égard de la machine
cible.
Dans cette optique, ce rapport aborde la front-end d’un compilateur, ce qui justifie son titre : « Analyses frontales dans les compilateurs ». Il est destiné aux étudiants de la troisième années LMD de la mention Mathématiques et Informatique. La
deuxième partie (le back-end) est présentement enseignée au niveau première année
Master où un fascicule à part est en cours d’élaboration.
La documentation sur la construction des compilateurs est abondante. Néanmoins, ce manuscrit puise de quelques références de base tel que le fameux dragon
book [1] de l’équipe du professeur Jeff Ullman, des classiques livres de J. P. Tremblay [30], de M.L Scott [27] et de Cooper & Torcson [7]. J’ai aussi beaucoup inspiré
et exploité le cours en ligne du professeur Alex Aiken de l’université de Stanford [2].
Le lecteur trouvera également dans ce document une liste intéressante d’exercices et de projets de programmation par chapitre dont l’accomplissement et l’élaboration confirme le niveau de maîtrise des points abordés. Dans la liste bibliographiques, j’ai veuillé à citer les "seminal" papiers sur les travaux fondateurs de l’ana-
4 Introduction
lyse des langages de programmation, et les liens vers les outils les plus connus dans
ce domaine tel que Flex, Bison, CUP, JavaCC, etc.
L’imperfection est humaine et ce travail ne fait pas l’exception cela d’une part.
D’autre part, je dois avouer que la compilation de ce rapport fait intervenir plusieurs
compétences que parfois m’échappent d’une manière ou d’une autre. Je ne peux
nier, vu la charge qui m’incombe, la précipitation et le stresse qui a accompagné la
préparation de ce travail. Par conséquent, je souhaiterais aimablement inviter les lecteurs de ce document de me signaler toute erreur quelque soit sa nature (orthographe,
typographie, méthodologie-style, fond, etc.