Compilation
Professeur: Youssef MELLAH
1
Compilation
Pourquoi faire de la compilation?
Qu’est ce qu’un compilateur?
Qu’est ce qu’un interpréteur?
La décompilation
Historique
Compilateur/Intérpreteurs.
2
Compilation
la traduction est le fait de traduire d’un langage à un autre
(exemple Pascal C)
La compilation est un cas particulier de la traduction
3
Pourquoi faire de la compilation?
Mener à bien l’écriture d’un programme comme un
compilateur, le tester, le documenter,… a un intérêt en soi.
Un programmeur doit comprendre comment est ce que des
programmes se compilent et s’exécutent. Ceci aide à la
compréhension du comportement du compilateur utilisé,
ainsi que ses limitations, messages d’erreurs,…
4
Pourquoi faire de la compilation?
L’étude du fonctionnement des compilateurs permet de:
- Comprendre les concepts des langages de programmation
- Eviter des erreurs de programmation et optimiser vos
programmes
5
Qu’est ce qu’un compilateur?
Un programme, qui traduit un programme écrit dans un langage L
en un programme écrit dans un langage L’ différent de L (en
général L est un langage évolué et L’ est un langage moins
expressif ).
- Quelques exemples :
- De C vers l’assembleur x86 plus les appels système Unix/Linux
- De C vers l’assembleur x86 plus les appels systèmeWin32
- De LATEX vers Postscript ou HTML (latex2html)
- Minimisation des automates (compilation d’un automate vers un
automate plus efficace)
- On peut « compiler » vers une machine. . . interpretée (ex :
bytecode Java, bytecode OCaml)
6
Ce qui est important dans un compilateur
Le code produit est rapide
Le compilateur est rapide
Les messages d’erreurs sont précis
Le code produit est correct
Il supporte un débogueur
Il sait faire des optimisations poussées
7
Qu’est ce qu’un interpréteur?
Un programme qui prends en entrée un autre programme,
écrit pour une machine virtuelle, et l’exécute sans le
traduire.
Ex : les interpréteurs des langages VisualBasic, PERL,
Python, Bash, PHP, etc.
8
Décompilation
On va dans le sens inverse, d’un langage moins structuré vers
un langage évolué. Ex : retrouver le source C à partir d’un
code compilé (d’un programme C).
Applications :
- récupération de vieux logiciels ;
- découverte d’API cachées ;
9
Langages et compilation
Un ordinateur est une machine conçue pour le traitement
automatique de l’information
Il nécessite un langage informatique
Beaucoup de programmes étaient écrits en langage machine.
Parfois c’est nécessaire pour travailler directement avec des
microprocesseurs.
Un bref coup d’œil sur le code binaire ou hexadécimal rend
compte de la chance de travailler avec des langages de haut
niveau.
10
Langages et compilation
Pour que les langages de haut niveau soient utilisables, on doit
être capable de les convertir en une forme que la machine peut
comprendre et c’est là qu’interviennent les compilateurs.
11
Chronologie des langages
1. Langage machine: suite de 0 et 1 exécutable directement
sur la machine.
inconvénients: pas évident, réservé aux spécialistes et lié au
circuit logique de la machine.
2. Langage Assembleur: dépendant toujours de la machine
mais non directement exécutable sur celle-ci. Ses
instructions se composent de commandes représentant les
adresses symboliques des données et des différents registres.
L’assembleur est assez utilisé pour faire des réalisations en
relations avec le matériel, comme les drivers. C’est aussi un
langage préféré des programmeurs de virus informatique.
12
Chronologie des langages
Langages évolués ou langage de haut niveau(fortran,
Pascal,…): par opposition à l’assembleur qui est considéré de
bas niveau.
Ces langages de haut niveau ont l’avantage d’être
indépendants de la machine (portable) et d’adapter une
forme proche des langages utilisés par les humains.
Ni l’assembleur, ni les langages de haut niveau ne sont
directement exécutables par la machine et donc un
traducteur se trouve être nécessaire.
13
Historique sur l’apparition des
langages évolués
Il existe actuellement plus de 2000. Nous citons:
- 1956: FORmula TRANslator ou FORTRAN, destiné au
calcul scientifique.
- 1958: ALGOrithmic Language ou ALGOL pour la résolution
des pbs mathématiques.
- 1959: Common Business Oriented Language ou COBOL:
adapté à des pbs de nature commerciale ou administrative.
- 1964: PL/I programming Language. C’est un produit de
IBM. C’est un outil pédagogique intéressant par sa facilité
d’apprentissage et son caractère interactif.
14
Historique sur l’apparition des
langages évolués
1970: PASCAL, outil célèbre
15
Outils de génération automatique
La construction des compilateurs obéit à des règles et
méthodes.
Il existe des outils qui s’occupent de la génération
automatique des différentes parties d’un compilateur
(analyseur lexical et syntaxique) à partir d’une description
formelle de la grammaire du langage considéré.
Citons par exemple: Lex/Flex pour la génération
d’analyseurs lexicaux(lexers), Yacc/Bison pour la génération
d’analyseur syntaxiques (parsers).
16
Compilateurs et interpréteurs
En imposant certaines contraintes sur les langages de haut
niveau, le processus de traduction en langage machine (ou
autre langage) pouvait être automatisé
traducteurs: programmes qui acceptent (comme donnée)
une représentation textuelle d’un algorithme exprimée dans
un langage source et qui produit une présentation du même
algo exprimée dans un langage cible
17
Compilateurs et interpréteurs
Programme
Traducteur Produit en
source en
langage
langage
cible
source
18
Compilateurs et interpréteurs
LA définition d’un traducteur est générale: par exemple un
programme qui traduit du Pascal vers C ou Fortran est un
traducteur
Par convention, un compilateur est un traducteur d’un
langage de programmation de haut niveau (c, pascal,…) en
langage machine exécutable par le proc.
19