INTRODUCTION
Un compilateur est un programme qui lit un autre programme, écrit dans un langage source, et
le transforme en un programme équivalent, écrit dans un langage cible, compréhensible par le
microprocesseur.
Fig. 1. Chaîne de développement d'un programme
Tout programme écrit dans un langage de haut niveau, dans lequel il est fait abstraction de la
structure et des détails de l’ordinateur sur lequel les programmes sont destinés à être exécutés, ne
peut être exécuté par un ordinateur que s'il est traduit en instructions exécutables. Ces instructions
sont écrites en langage machine, ceux sont des instructions élémentaires directement exécutables
par le microprocesseur.
Une phase importante qui intervient après la compilation est la phase d'éditions de liens. Un
Publicité
éditeur de liens est un programme qui résout, entre autres, les références à des appels de routines
dont le code est conservé dans des librairies. L'édition de liens est faite avant l'exécution du
programme.
Introduction
2
Il ne faut pas confondre compilateurs et interpréteurs. En effet, en utilisant un compilateur, le
traitement d'un programme se fait en bloc: on lit tout le programme, on le traduit, et enfin, on
l'exécute. Par contre, en utilisant un interpréteur, le traitement d'un programme se fait instruction
par instruction: on lit l'instruction, on la traduit, puis, on l'exécute. A l'inverse d'un compilateur, un
interpréteur travaille simultanément sur le programme et sur les données. L'interpréteur doit être
présent sur le système à chaque fois que le programme est exécuté, ce qui n'est pas le cas avec un
Publicité
compilateur. Généralement, les interpréteurs sont assez petits mais le programme est plus lent
qu'avec un langage compilé. Autre inconvénient des interpréteurs, on ne peut pas cacher le code, et
donc garder des secrets de fabrication: toute personne ayant accès au programme peut le consulter
et le modifier comme elle le veut. Les langages interprétés sont souvent plus simples à utiliser et
tolèrent plus d'erreurs de codage que les langages compilés. Parmi les langages compilés, nous
citons Pascal, C, C++, ADA, Fortran et Cobol. Parmi les langages interprétés, nous citons Basic,
CaML, Lisp, Perl et Prolog.
Il existe des langages qui sont à mi-chemin entre l'interprétation et la compilation. On les
appelle langages p-code. Le code source est traduit dans une forme binaire compacte, en pseudo-
code ou p-code, qui n'est pas encore du code machine. Lorsqu’on exécute le programme, ce p-code
est interprété. A titre d’exemple, en Java, le programme source est compilé pour obtenir un fichier
Publicité
en byte code (.class) qui sera interprété par une machine virtuelle. Autre langage p-code: Python.
Les interpréteurs de p-code peuvent être relativement petits et rapides, si bien que le p-code peut
s'exécuter presque aussi rapidement que du binaire compilé. En outre, les langages p-code peuvent
garder la flexibilité et la puissance des langages interprétés.
La compilation n'est pas limitée à la traduction d'un programme écrit dans un langage de haut
niveau en un programme écrit dans un langage machine. Cela peut être aussi :
(i) La traduction d'un programme écrit dans un langage de haut niveau vers un programme
écrit dans un autre langage de haut niveau. Par exemple, une traduction de Pascal vers C, ou de
Java vers C++.
(ii) La traduction d'un programme écrit dans un langage de bas niveau vers un programme
écrit dans un langage de haut niveau. Dans ce cas, on parle de décompilation. Par exemple,
Publicité
retrouver le code C à partir d'un code machine.
(iii) La traduction d'un texte écrit dans un langage quelconque vers un texte écrit dans un
autre langage quelconque. Par exemple, une traduction de word vers html ou de pdf vers ps.
Cependant, dans ce cours nous nous intéressons uniquement au cas de la traduction d'un
programme écrit dans un langage de haut niveau en un programme écrit dans un langage machine.
*