Vous êtes sur la page 1sur 29

Programme GIT

ENI-ABT BAMAKO 2020

SPECIFICATION ET TRADUCTION DES


LANGAGES
COMPILATION
Module1a
Chargé de cours:
Dr Yacouba GOÏTA
Tél : 72.21.09.60
Email : goita_yacouba@yahoo.fr
WEBOGRAPHIE
❖ Algorithmique et bases de la programmation : Introduction à la
Compilation - Nicolas Delestre - INSA ROUEN
https://moodle.insa-rouen.fr/file.php/698/CM/Compilation.pdf
❖ Introduction à la compilation: Cours 1 – Yann Régis-Gianas PPS –
Université Denis Diderot – Paris 7 (2010)
http://www.pps.jussieu.fr/~yrg/compil/compilation-slides-cours-1.pdf
❖ Introduction à la compilation Christine Paulin-Mohring – Université Paris
Sud – Master Informatique 2009-2010
http://www.lri.fr/~paulin/COMPIL/slides-2009-1.pdf
❖ Compilation – Alexis Nasr – http://pageperso.lif.univ-
mrs.fr/~alexis.nasr/Ens/Compilation/intro_compil.pdf
❖ Cours M Hammemi Moez - ISG de Tunis (2007)
❖ Cours Mme El Abed Lamia - ISG de Tunis (2007)
❖ Cours – Annie Corbel 1999
http://www.emse.fr/~corbel/COMPIL/index.html
2 Cours Compilation
PREREQUIS

❖Théorie des langages formels: expressions


régulières, automates, grammaires, ambiguïté
❖Langages de programmation
❖Algorithmique

3 Cours Compilation
Objectif

POURQUOI?

QUOI?

COMMENT?

4 Cours Compilation
plan

❖Définition: compilateur
❖Analyse lexicale (linéaire)
❖Analyse syntaxique (hiérarchique)
❖Analyse sémantique
❖Génération du code intermédiaire
❖Optimisation du code
❖Génération du code objet

5 Cours Compilation
POURQUOI? (1)

❖Si vous deviez écrire un programme capable


d‘évaluer (au sens de calculer) des expressions
arithmétiques qu'un utilisateur aurait saisies au
clavier
❖Par exemple : ≪ (24+45.5)/87*1.2E3 ≫

❖Comment procéder ?

6 Cours Compilation
POURQUOI? (2)

❖Ecrire des procédures et des fonctions permettant


❑De reconnaitre un entier
❑De reconnaitre un réel
❑De reconnaitre une addition
❑...
➔ C'est compliqué pour quelque chose de simple
➔ A la moindre modification tout est à
reprogrammer
7 Cours Compilation
POURQUOI? (3)

❖Il faut suivre des méthodes et des


techniques afin de résoudre ce type de
problème :

➔C'est le rôle de la COMPILATION

8 Cours Compilation
QUOI? (1)

❖C'est un programme qui traduit un


programme écrit dans un langage source
vers un langage cible en indiquant les
erreurs éventuelles que pourrait contenir le
programme source
programme programme
compilateur
source cible

messages
d'erreur

9 Cours Compilation
QUOI? (2)

❖Premier compilateur : compilateur Fortran de


J. Backus (1957)
❖Langage source : langage de haut niveau (C,
C++, Java, Pascal, Fortran...)
❖Langage cible : langage de bas niveau
(assembleur, langage machine)

10 Cours Compilation
COMMENT? (1)

Et comment ça marche ?
Comme un enfant qui apprend à lire...
❖On reconnait d'abord les mots
➔Analyse Lexicale
❖Puis, on vérifie que tous les mots sont dans le bon
ordre
➔Analyse Syntaxique
❖Enfin, on vérifie que tout ceci a un sens
➔Analyse Sémantique

11 Cours Compilation
Structure Globale

En deux parties :
❖analyse/reconnaissance
❖synthèse/transformation

Partie Partie
Texte Rep Texte
Avant Arrière
source sémantique cible
(analyse) (synthèse)

12 Cours Compilation
Les phases de la compilation
programme source

analyseur lexical

analyseur syntaxique

analyseur sémantique
gestion de la
table des symboles générateur de code intermédiaire gestion des erreurs

"optimiseur" de code

générateur de code cible

programme cible
13 Cours Compilation
Analyse lexicale (1)

❖Lit le programme source


❖Reconnaît les séquences de caractères
significatives appelées lexèmes
❖Pour chaque lexème, l’analyseur lexical émet
un couple
(type du lexème, valeur du lexème | @ dans la table de symboles)

❖Exemple : (NOMBRE, 123)

14 Cours Compilation
Analyse lexicale (2)

❖Les types de lexèmes sont des symboles, ils


constituent les symboles terminaux de la
grammaire du langage

❖ Les symboles terminaux de la grammaire (ou


types de lexèmes) constituent l’interface entre
l’analyseur lexical et l’analyseur syntaxique
Les types de lexèmes doivent être connus des
deux

15 Cours Compilation
Analyse lexicale (3)

Table de
symboles

16 Cours Compilation
Analyse lexicale (4)

❖Exemple:
position := initiale + vitesse*60
<id1,1> <aff,:=> <id2,2> <op,+> <id3,3> <op,*>
<nb,60>

Table de symboles
1 position …
2 initial …
3 rate …

17 Cours Compilation
Analyse lexicale(5)

❖Comment reconnaitre les mots?


❖Les lister : avoir un dictionnaire de mots clefs
❖Mais certains mots sont génériques :
✓ Les nombres
✓ Les identifiants des programmes (variable,
fonction/procédure, etc.)
❖Il faut avoir un outil permettant de les caractériser

expressions régulières

18 Cours Compilation
Analyse lexicale(6)

Comment on implante tout ça ?

❖La théorie montre que toute expression régulière peut


être représentée à l'aide d'un automate (et inversement)

❖Problème de différenciation entre identificateurs et


mots clés

19 Cours Compilation
Analyse syntaxique(1)

❖Vérifie que la suite des unités lexicales (lexèmes)


fournie par l’analyseur lexical est compatible avec
une grammaire et produit en sortie un arbre d'analyse
(arbre syntaxique)

❖grammaire hors contexte (ou notation BNF) qui sert à


décrire la syntaxe du langage

❖Deux types d'analyse : Ascendante ou Descendante

20 Cours Compilation
Analyse syntaxique(2)
❖ Exemple: (Arbre d’Analyse Descendante )

<id1,1> <aff,:=> <id2,2> <op,+> <id3,3> <op,*> <nb,60>

Affectation

id := expr

position expr + expr

id expr * expr

initiale id nombre

vitesse 60

21 Cours Compilation
Analyse sémantique(1)

❖Vérifie la cohérence de l'arbre d'analyse


❖Collecte d'informations destinées à la production de
code
❖L’analyse sémantique utilise l’arbre abstrait, ainsi que
la table de symboles afin d’effectuer un certain
nombre de contrôles sémantiques

l’arbre abstrait
Analyse contrôles
la table de symboles Sémantique sémantiques

22 Cours Compilation
Analyse sémantique(2)

parmi lesquels :

❖Vérifier que les variables utilisées ont bien été


déclarées

❖Au contrôle de type : le compilateur vérifie que les


opérandes d’un opérateur possèdent bien le bon type

❖conversions automatiques de types

23 Cours Compilation
Analyse sémantique(2)

❖Exemple:

:= :=

id1 + id1 +

id2 * id2 *

id3 60 id3 EntierVersReel

60

24 Cours Compilation
Génération du code intermédiaire

❖Programme pour une machine abstraite


✓Code facile à produire, à traduire en langage
cible
❖Exemple: code à 3 adresses
:=
temp1:=EntierVersReel(60)
id1 +
temp2:=id3*temp1
id2 *
temp3:=id2+temp2
id3 EntierVersReel id1:=temp3
60

25 Cours Compilation
Optimisation du code

❖Optimiser le code intermédiaire en éliminant


les opérations inutiles pour produire du code
plus efficace et pour une exécution machine
plus rapide
❖Exemple:

temp1:=EntierVersReel(60)
temp2:=id3*temp1 temp1:= id3 * 60.0
temp3:=id2+temp2 id1:= id2 + temp1
id1:=temp3

26 Cours Compilation
Génération du code machine

❖Obtention du code machine

MOVF id3, R2
MULF #60.0, R2
temp1:= id3 * 60.0 MOVF id2, R1
id1:= id2 + temp1 ADDF R2, R1
MOVF R1, id1

27 Cours Compilation
Récapitulatif...
temp1:=EntierVersReel(60)
temp2:=id3*temp1
position := initiale + vitesse * 60 Analyseur
temp3:=id2+temp2
sémantique
id1:=temp3
Analyseur lexical :=

id1 + Optimiseur de
id1 := id2 + id3 * 60 code
id2 *
Analyseur temp1:= id3 * 60.0
syntaxique id3 EntToReel id1:= id2 + temp1

60
Générateur de
:= code
Générateur code
id1 + intermédiaire MOVF id3, R2
MULF #60.0, R2
id2 * MOVF id2, R1
ADDF R2, R1
id3 60 MOVF R1, id1
28 Cours Compilation
TAF

RECHERCHE

LEX/YACC

ANTLR

29 Cours Compilation

Vous aimerez peut-être aussi