Chapitre 0 - Introduction À La Compilation
Chapitre 0 - Introduction À La Compilation
Chapitre 0 - Introduction À La Compilation
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
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.
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
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).
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.