Vous êtes sur la page 1sur 3

Ecole Normale Supérieure Kouba Module : Compilation

Département Informatique Année : 2023/2024

Introduction à la compilation
I. Introduction
Au début de l'informatique les programmes étaient écrit en langage machine c.-à-d. en une
suite de chiffre 0 et 1. Cette méthode n'était pas pratique car la mise au point et l'écriture de
programmes était assez complexe. Les programmes étaient en suite écrits en langage
assembleur ce qui consiste en l'utilisation de mnémonique (nom d'instruction) ceci était
proche de la machine mais il fallait connaitre la structure interne de celle-ci (par exemple : les
registres, les modes d'adressage, ...).
Les points précédents ont conduit ou développement des langages appelé Langages
Evolués tel que C, C++, Pascal, Java, Fortran, qui sont proches du langage naturelle et sont
alors indépendants de la structure interne de la machine. Le problème qui se pose alors est le
suivant :
Un langage évolué est-il directement compris par la machine ?
La réponse et les détails de cette question font l'objet de notre module. C.-à-d.,
Comment implémenter un langage évolué sur machine ? L'idée consiste à transformer un
programme écrit en langage évolué en un programme ou un code directement exécutable par
la machine.
Programme écrit en Processus de Code Objet
langage évolué transformation

Le processus de transformation est appelé Compilation.

II. Compilateur et translateur


Compilation : elle consiste donc de traduire un programme source écrit en langage
évolue en code directement exécutable par la machine. Il existe d’autres transformations telles
que la Traduction et l'Interprétation.
Traduction : elle consiste à traduire un programme écrit en langage L1 en un
programme écrit en langage L2. Le programme était dans L1 est appelé Programme Source et
celui écrit en L2 est le Programme Objet.
Si le langage L2 est le langage Assembleur on dira que c'est un Compilateur.
Si les deux langages L1 et L2 sont tous les deux des langages évolues on parlera de
prés processeurs ou de prés compilateur.
Interprétation : consiste à traduire et à exécuter un programme écrit en langage
Source instruction par instruction.
La différence entre le compilateur et l'interpréteur se situe dans le faite que
l'interpréteur exécute directement la source et ne produit pas de programme objet.
Ecole Normale Supérieure Kouba Module : Compilation
Département Informatique Année : 2023/2024

Remarque :
À priori le langage dans lequel écrire un compilateur est indépendant des langages source et
cible du compilateur.
On peut choisir un langage de bas niveau pour des raisons d'efficacité, ou bien un langage de
haut niveau afin de mieux contrôler la complexité du développement.
Un compilateur C1 de Source dans Cible écrit dans un langage L peut lui même être compilé
par un compilateur de L dans M. on obtient alors toujours un compilateur de Source dans
Cible mais écrit dans le langage M.

III. Structure logique d’un compilateur


Le processus de compilation est assez complexe. Les différentes phases sont
représentées dans le schéma ci-dessous :

Programme source
Programme source

Analyse lexicale
Analyse lexicale
Entités lexicales
Analyse syntaxique
Phrases ou instructions
Table des Traitement des
Analyse sémantique et génération erreurs
symboles
du code intermédiaire

Instructions élémentaires
Ou Code élémentaire

Optimisation du code

Génération du code

Code objet

Remarque :
Les compilateurs dans lesquels les étapes sont faites séparément sont appelés « les
compilateurs multipasses ». Ceux dans lesquels les étapes sont en une phase sont appelés « les
compilateurs monopasses ».
Ecole Normale Supérieure Kouba Module : Compilation
Département Informatique Année : 2023/2024

IV. Les différentes phases d’un compilateur

1. Analyse lexicale ou lexicographie


Le rôle de cette analyse est de déterminer les mots appartenant au langage à compiler et de
construire la table appelée table des symboles ou dictionnaire.

Programme Source Scanner Entités Lexicales

2. Analyse Syntaxique
Le rôle de l’analyseur syntaxique est de vérifier si la structure ou encore la syntaxe de la
phase de la succession des mots obtenus de l’analyse lexicale est correcte (conforme à la
grammaire du langage source).

3. Analyse Sémantique et Génération de code Intermédiaires


L’analyse sémantique permet de vérifier si la chaine correcte syntaxique est aussi correcte de
point de vue Sens. Cette phase permet de générer à partir d’une entité syntaxique un code
simplifié de bas niveau.

4. Optimisation de code
Cette phase vise à optimiser le code de point de vue place mémoire et rapidité d’exécution.
C’est une étape optionnelle dans le compilateur.

5. Génération de code
Cette phase est la dernière étape de la compilation. Elle permet de traduire le programme en
code directement exécutable par la machine.
Elle nécessite la connaissance de la forme du code objet à générer ainsi que l’architecture de
la machine sur laquelle va s’exécuter le programme, c.-à-d. le jeu d’instruction, registre, mode
d’adressage...
6. Table des symboles ou Dictionnaire
C’est une table contenant les informations concernant les entités du programme à compiler,
elle est construite dans l’analyse lexicale et est mise à jour au fur et à mesure dans les autres
étapes de la compilation.
Mots clés Caractères spéciaux
Identificateurs Constants

Dans la table des symboles, les identificateurs et les constants ne se répètent pas.
7. Traitement des erreurs
Des erreurs peuvent survenir dans n’importe quelle étape de la compilation. Un détecteur
d’erreurs et un traitement d’erreurs peuvent être inclus dans la compilation.

Vous aimerez peut-être aussi