Vous êtes sur la page 1sur 6

Ministre de l’enseignement supérieur et de la recherche scientifique

Université Abderrahmane Mira Bejaia


Faculté des sciences exactes
Département d’informatique

Licence Académique 3ème année

Cours compilation
Chapitre 1 : Introduction

1
Licence 3 Cours compilation Chapitre 1

1. Introduction
Ce chapitre présente brièvement le sujet principal du cours (les compilateurs avec
leurs structures ordinaires à laquelle nous ferons référence dans la suite du cours.
1.1 . Prérequis pour suivre le cours
Le cours suppose que l’étudiant s’est familiarisé avec la programmation (langage
algorithmique) et les concepts de la théorie des langages tels que les automates d’état fini,
les grammaires et leurs types ainsi que les transformations de grammaires et d’automates.
Il n’y a aucun rappel sur ces notions.
1.2. Intérêt de l’étude de la compilation
 Ça permet de voir en détail le fonctionnement d’un langage de programmation, y
compris dans des aspects obscurs et peu étudiés
 Pour écrire de bon code, il faut avoir une idée de la façon dont il est traduit.
 Ça permet d’étudier des algorithmes d’intérêt général et des objets abstraits comme
les automates d’état finis et les expressions régulières qui sont utiles dans d’autres
contextes.
 Ça permet de traduire un langage de programmation vers un autre langage de
programmation.
2. Définitions générales
2.2.Compiler
Signifie, analyser une description d’information et synthétiser un autre forme
adaptée à ce que l’on veut faire, tout en maintenant le sens de l’information.
2.3.Compilation
La compilation est définie comme un traducteur automatique d’une forme source en
une forme cible. Dans ce cas, la forme source est le programme introduit par l’utilisateur
(haut niveau) et la forme cible représente le code objet exécutable par l’ordinateur.

Sommairement, un compilateur est constitué de deux parties.

Données

Code source Compilateur Code objet

Résultat

Fig. 1 : Fonctionnement d’un compilateur

2
Licence 3 Cours compilation Chapitre 1

a. La partie analyse : Consiste à partitionner le programme source en ces différentes


constituantes et en créer une représentation intermédiaire. Elle vérifie avant si le
programme est écrit selon les spécifications du programme source.

b. La partie synthèse : Construit le code objet à partie de cette représentation intermédiaire.

2.4. Interpréteur
Un interpréteur est un logiciel qui interprète le programme source, c’est-à-dire
qu’il analyse les instructions du programme source les unes après les autres, et exécute
chacune d’elles immédiatement. Dans ce cas, il n’y a pas de création d’un programme
objet équivalent. On peut citer comme exemple, le langage HTML.

Données

Code source Interpréteur Résultat

Fig. 2 : Fonctionnement d’un interpréteur

3. Phases de compilation
Les phases de compilation sont représentées dans le schéma suivant :

3
Licence 3 Cours compilation Chapitre 1

Programme source

Analyse lexicale

Séquence d’unités lexicales


Analyse
Table des symboles Analyse syntaxique Erreurs

Arbre syntaxique

Analyse sémantique

Génération du code intermédiaire

Code intermédiaire

Optimisation du code Synthèse


intermédiaire

Génération du code objet

Code objet

Fig. 3 : Phases de compilation

4. Rôle des phases de compilation


4.1. Analyse lexicale
Son rôle consiste :

 Lire le programme source caractère par caractère ;


 Regrouper les caractères en une séquence d’unités lexicales ;
 Sauter les blancs et les commentaires ;
 Construire et mettre à jour la table des symboles
Remarque : l’analyse lexicale est basée sur une grammaire de type 3
Exemple : l’analyse lexicale du fragment du programme suivant

4
Licence 3 Cours compilation Chapitre 1

Begin
i:=5;
End ;

Le fragment ci-dessus peut être regroupé en unités lexicales suivantes :


Begin : mot clé
i : identificateur ;
:= : opérateur d’affectation
5 : constante entière
; : séparateur d’instruction ;
End : mot clé

4.2. Analyse syntaxique.


Celle-ci permet de :

 Structurer la séquence d’unités lexicales issues de l’analyse lexicale conformément


à la syntaxe du langage, décrite par une grammaire non contextuelle de type (2).
 Construire un arbre syntaxique qui représente la syntaxe du programme source.
4.3. Analyse sémantique
Son rôle consiste à

 vérifier que les composants du programme source sont agencés d’une façon significative ;
 Recueillir les informations sur les types des identificateurs et mettre à jour la table des
symboles ;
 Assurer le contrôle des types ;
 Vérifier le nombre et les types des arguments lors des appels de procédures et de
fonctions.

4.4. Génération du code intermédiaire


Après les trois phases d’analyse, le compilateur génère une représentation ente le
programme source et le programme cible. Cette représentation doit être facile à produire et facile
à traduire en code cible.
Exemple :
La forme post-fixée :
I=5+i*3 => i5i3*+=

5
Licence 3 Cours compilation Chapitre 1

4.5. Optimisation du code intermédiaire


Le rôle de cette phase consiste à améliorer le code intermédiaire de tel sort qu’il en
résulte un code cible :

 Rapide à exécuter ;
 Qui occupe moins d’espace.

4.6. Génération du code objet


Son rôle est de traduire la forme intermédiaire en un code objet, en tenant compte de
l’adressage.

Remarques
 La table des symboles est utilisée par le compilateur pour enregistrer les identificateurs et
leurs attributs, ces attributs peuvent être des informations d’emplacement, de type
visibilité .etc.
 Quand une erreur est détectée par le compilateur, la phase concernée doit établir un
diagnostic et doit s’adapter pour que le compilateur poursuit l'exécution, et afin de
permettre la détection d’autres éventuelles erreurs.