Vous êtes sur la page 1sur 4

Introduction à la Compilation

Les programmes étaient écrits en langage machine, c’est à dire en une suite de chiffres de 0 et
de 1. Cette méthode n’était pas pratique, vu que la mise au point et l’écriture des programmes
étaient assez complexes.
Les programmes étaient ensuite écrits en langage assembleur, ce qui consistait en l’utilisation
de mnémoniques (noms d’instructions). Ceci était proche de la machine, mais il fallait
connaître la structure interne de celle-ci (les modes d’adressage, les registres, … ).
Les points précédents ont conduit au développement de langages, appelés langages évolués,
tels que le FORTRAN, ALGOL, … , qui sont proches du langage naturel, 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 cours. Comment implémenter un langage évolué
sur machine ?

L’idée consiste à transformer un programme écrit en langage évolué en un programme ou


code directement exécutable par la machine.

programme écrit en processus de


code objet
Langage évolué transformation

Le processus de transformation est appelé compilation.

1. Qu’est ce exactement un compilateur ?


La compilation est un processus de traduction du langage source vers des instructions
machine, plus précisément vers l’assembleur.
Le compilateur produit donc un programme cible à partir du code source.
C’est ensuite ce programme qui va fournir à l’utilisateur un résultat.

Il existe d’autres transformations telles que la traduction et l’interprétation.

La traduction
Elle consiste à traduire un programme écrit dans un langage (L1) en un programme écrit
en langage (L2).
Le programme écrit dans (L1) est appelé le source, celui écrit en (L2) est appelé l’objet.

Remarques :
- Si le langage (L2) est le langage machine ou l’assembleur, on dira que c’est un
compilateur.
- Si les langages (L1) et (L2) sont tous les deux, des langages évolués, on parlera de
préprocesseur ou de précompilateur.

L’interprétation
L’interprétation consiste à traduire et à exécuter un programme écrit en langage source,
instruction par instruction. C’est à dire à partir du source, on donne directement le résultat.

Le compilateur est plus rapide, mais il est plus difficile à écrire. L’interpréteur traite les
instructions au vol (ne produit pas de code objet), on peut donc tracer l’exécution, et il est plus
sécuritaire.

La chaîne de compilation
Le processus de compilation est complexe. On décompose cette traduction en traductions plus
élémentaires. Tout ceci est idéalement représenté par le schéma suivant :
Les différentes phases d’un compilateur
a. Analyse lexicale

analyse
Code Source lexicale entités lexicales

Le rôle de cette analyse est de déterminer les mots ou entités appartenant au langage à
compiler et de construire le dictionnaire des entités appelé table des symboles.
Le résultat de cette analyse est une succession d’entités lexicales appelée chaîne codée.

Exemple : if c > 0 then x := 0.


Les différentes entités lexicales sont if, c, >, 0, then, x, :=
la chaîne codée obtenue : mot clé identificateur séparateur constante mot clé identificateur
séparateur constante .

b. Analyse syntaxique
Le rôle de l’analyseur syntaxique est de vérifier si la structure de la chaîne codée obtenue de
l’analyse lexicale est conforme à la grammaire syntaxique du langage considéré. Dans
l'exemple précédent, nous reconnaissons la syntaxe de l'instruction if.

c. Génération du code intermédiaire et analyse sémantique


La génération de code intermédiaire permet de générer, à partir d’une entité syntaxique, un
code simplifié de bas niveau.
L’analyse sémantique permet de vérifier si la chaîne correcte syntaxiquement est aussi
correcte du point de vue sens.

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

e. Génération du code objet


Dans cette étape, il faudrait connaître la forme du code objet à générer, ainsi que l’architecture
de la machine sur laquelle s’exécutera le programme (jeu d’instructions, registres, modes
d’adressage, ... ).

Table des symboles


C’est une table contenant les mots clés, les caractères spéciaux ainsi que 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.

Traitement des erreurs


Des erreurs peuvent survenir dans n’importe quelle étape de la compilation. Un détecteur et
un traitement d’erreurs peuvent être inclus dans le compilateur.

Remarque : Il existe des compilateurs monopasse et des compilateurs multipasses.

Vous aimerez peut-être aussi