1. Chapitre 1
Introduction à la compilation
1.1 Motivation
La compilation est l'un des maillons de la chaine de développement d'un programme in-
formatique (voir Figure 1).
Au début de l'aire informatique, on n'avait pas besoin de la compilation car les tous pre-
miers langages de programmation (langage A-0, langage assembleur) étaient très proches
du langage machine. Il susait donc d'appliquer de simples algorithmes de transcodage
pour avoir un programme exécutable. Depuis, les langages de programmation n'ont cessés
d'évoluer, et on parle désormais de langage de haut niveau.
La compilation est née de la complexité de la tache qui consiste de passer d'un pro-
gramme écrit dans un langage de haut niveau vers un programme exécutable. Cette tâche
est réalisée par un programme informatique appelé compilateur.
1.2 Compilateur
Un compilateur est un programme particulier qui lit un programme écrit dans un langage
source et le traduit en un programme écrit dans un langage cible (voir Figure 2).
Au cours du processus de compilation, l'un des rôles importants des compilateurs est
de signaler à l'utilisateur la présence d'erreurs dans le programme source.
Exemples : Compilateur de
C vers langage machine ;
C++ vers C ;
JAVA vers C++ ;
Matlab vers JAVA ;
Word vers html ;
Latex vers PDF ;
1
2. 2 CHAPITRE 1. INTRODUCTION À LA COMPILATION
Figure 1.1 Chaine de développement d'un programme informatique.
Figure 1.2 Rôle du compilateur.
1.3 Phases de la compilation
Le processus de compilation se déroule en deux grandes étapes : l'étape d'analyse du
programme source et l'étape de la synthèse du programme cible.
1.3.1 L'analyse du programme source
Cette étape partitionne le programme source en plusieurs constituants et en crée une re-
présentation intermédiaire.
L'analyse comprend trois phases :
1. L'analyse lexicale, où le ot de caractères formant le programme source est lu de
gauche à droite et groupé en unités lexicales qui sont des suites de caractères ayant
une signication collective. Cette phase répond à la question : est-ce que les mots
qui existent dans le programme source sont corrects ?
3. 1.3. PHASES DE LA COMPILATION 3
2. L'analyse syntaxique : cette phase permet de dire si la séquence des mots résultant
de l'analyse lexicale forme bien des phrases cohérentes. Si oui, ces unités lexicales se-
ront groupées hiérarchiquement dans des structures imbriquées, ( arbre syntaxique),
ayant une signication collective.
3. L'analyse sémantique : au cours de cette phase, on opère certains contrôles pour
s'assurer que l'assemblage des constituants d'un programme a un sens. La phase
d'analyse sémantique répond, entre autres, aux questions : Est-ce que les opérandes
de toutes les opérations sont correctes (types), faut-il faire une conversion, est-ce que
les indices d'un tableau sont corrects. Si oui, le compilateur extrait un programme
écrit dans un autre langage.
1.3.2 La synthèse du programme cible
Cette étape construit le programme cible désiré à partir de la représentation intermédiaire
générée dans l'étape d'analyse. La synthèse se compose de trois phases :
1. Génération du code intermédiaire : on peut considérer le code intermédiaire comme
un programme pour une machine qui a une innité de registres. Cette représentation
doit avoir deux propriétés importantes : elle doit être facile à produire à partir de
l'arbre syntaxique et facile à traduire en langage cible.
2. Optimisation du code : cette phase tente d'améliorer le code intermédiaire de façon
que le code machine résultant s'exécute plus rapidement.
3. Génération du code cible : la génération du code cible est l'étape du processus de
compilation transformant l'arbre syntaxique (enrichi d'informations sémantiques)
en code machine pour la machine cible. La phase de génération de code cible inclut
généralement :
Le choix des instructions à émettre.
L'ordonnancement des instructions en vue d'accélérer l'exécution
l'allocation de registres : l'allocation des variables aux registres du processeur.