Vous êtes sur la page 1sur 27

Techniques 

de compilation

Fadi Kacem
2015­2016
Introduction
• Comment fonctionne un langage de 
programmation ?
Introduction
• Comment fonctionne un langage de 
programmation ?

• Deux approches différentes pour implémenter 
un langage de programmation:

 Les Interpréteurs

 Les Compilateurs
Introduction
• Comment fonctionne un langage de 
programmation ?

• Deux approches différentes pour implémenter un 
langage de programmation:

 Les interpréteurs

Différences ?

 Les compilateurs
Compilateur Vs Interpréteur: 
Quelques analogies
I&T (Interprète et Traducteur) !
Compilateur Vs Interpréteur: 
Quelques analogies
I&T (Interprète et Traducteur) !
Compilateur Vs Interpréteur: 
Quelques analogies
Un vaisseau spatial en panne !

https://youtu.be/_C5AHaS1mOA
Compilateur Vs Interpréteur: 
Comparaison

Interpréteur Compilateur
Une seule instruction à la fois  Tout le code comme entrée.
comme entrée.
Pas de code objet Un code objet intermédiaire 
intermédiaire généré. est généré.
Exécution lente. Exécution rapide après un 
extra temps de pré­processing
Possibilité de voir les résultats  Le résultat est disponible à la 
au fur et à mesure. suite de l’exécution de tout le
programme.
Demande peu de mémoire. Demande plus de mémoire.
Interpréteur

On­line

Programme

Données
I Résultats
Compilateur

Données
Off­line

C
Exécutable
Programme
(Code machine)

Résultats
Un peu d’histoire
• En 1954, IBM construit la «704»: successeur du «701» et premier vrai 
succès commercial des machines IBM.

• Cependant :

Software >> Hardware
Un peu d’histoire
• En 1953, première tentative pour 
améliorer la productivité des 
programmeurs « Speed Coding ».
Premier interpréteur.

+ Rapidité dans le développement 
des programmes.

­ Vitesse d’exécution 10 à 20 fois


moins rapide. 

­ Occupe 30% de la mémoire (300 Octets)
Un peu d’histoire
• En 1954, premier langage compilé: 
FORTRAN I (Formulas Translated).

• Projet réussi : 50% des programmes 
écrits en FORTRAN en 1958.

 Adoption très rapide d’une nouvelle


technologie.
Exemples de langages de programmation
Langage Domaine d'application principal Compilé/interprété
ADA Le temps réel Langage compilé
BASIC Programmation basique à but  Langage interprété
éducatif
C Programmation système Langage compilé
C++ Programmation système objet Langage compilé
Cobol Gestion Langage compilé
Fortran Calcul Langage compilé
Java Programmation orientée internet Langage intermédiaire
MATLAB Calcul mathématique Langage interprété
Mathematica Calcul mathématique Langage interprété
LISP Intelligence artificielle Langage  intermédiaire
Pascal Enseignement Langage compilé
PHP Développement de sites web  Langage interprété
dynamiques
Prolog Intelligence artificielle Langa Langage interprété
Structure d’un compilateur: vue générale
Input : Code source (haut niveau)

 Analyse lexicale

 Analyse syntaxique

 Analyse sémantique

 Optimisation

 Génération de code

Output: Code machine (bas niveau)
Structure d’un compilateur: vue générale
• Analyse lexical
Rôle
Lire le code source caractère par caractère et extraire les mots
(lexèmes) et les classes correspondantes

Exemple
« For i = 1 to 10 do print(i); »
 For : Mot Réservé
 I : Identifiant
 = : Opérateur
 1 : Entier
 To : Mot Réservé
 Etc...
Structure d’un compilateur: vue générale
• Analyse lexical

Reconnaitre les mots, ce n’est pas toujours simple !


Structure d’un compilateur: vue générale
• Analyse lexical

Reconnaitre les mots, ce n’est pas toujours simple !

Les vacances sont terminées.
Structure d’un compilateur: vue générale
• Analyse lexical

Reconnaitre les mots, ce n’est pas toujours simple !

Les vacances sont terminées.

FACILE !
Structure d’un compilateur: vue générale
• Analyse lexical

Reconnaitre les mots, ce n’est pas toujours simple !

Les vacances sont terminées.

Lesva Can ceSsontTe RminéeS.
Structure d’un compilateur: vue générale
• Analyse lexical

Reconnaitre les mots, ce n’est pas toujours simple !

Les vacances sont terminées.

Lesva Can ceSsontTe RminéeS.

MOINS FACILE !
Structure d’un compilateur: vue générale
• Analyse syntaxique
Rôle
Reconstruire la structure syntaxique à partir des
lexèmes reconnus et des classes correspondantes.
Exemple
Structure syntaxique de la phrase suivante  ?

“ Le voisin sort en promenade”
Structure d’un compilateur: vue générale
• Analyse syntaxique
Rôle
Reconstruire la structure syntaxique à partir des
lexèmes reconnus et des classes correspondantes.
Exemple
“ Le voisin sort en promenade.”
article nom verbe préposition nom

Groupe  Groupe verbal Complément Point


nominal
Phrase
Structure d’un compilateur: vue générale
• Analyse sémantique
Rôle
 Extraire le sens du code.
 Vérifier sa cohérence.
Construire la table des symboles.
Exemple
Le crayon mange une pomme.
 Syntaxe : ok
 Sens : pas ok
Structure d’un compilateur: vue générale
• Optimisation
Rôle
Modification automatique du code afin que le programme
s’exécute plus rapidement et occupe moins de mémoire.
Exemple
X = Y * 0 ; est équivalente à X = 0 ;
mais pas toujours : vrai pour des entiers mais pas pour des 
nombres en virgules flottantes.
NaN * 0 = NaN
Structure d’un compilateur: vue générale
• Génération de code
Rôle
Utiliser les résultats des étapes précédentes pour générer
un code assembleur (translation dans un autre langage).
Pourquoi un cours de compilation
• C'est une des branches les plus dynamiques de l'informatique,
et une des plus anciennes à mériter ce qualificatif.

• Son domaine d'application est très large: conversion de


formats; traduction de langages; optimisation de programmes.

• Elle permet de mettre en pratique de nombreux algorithmes


généraux.

• Enfin ça peut aider à devenir un meilleur développeur.

Vous aimerez peut-être aussi