Upload
makoto
View
91
Download
7
Tags:
Embed Size (px)
DESCRIPTION
COMPILATION. Élaboré par Mazigh Yosra [email protected] Cours 2 ème année IAG. 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 - PowerPoint PPT Presentation
Citation preview
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
Cours Compilation 3
PREREQUIS
Théorie des langages formels: expressions régulières, automates, grammaires, ambiguïté
Langages de programmationAlgorithmique
Cours Compilation 4
Objectif
COMMENT?
QOUI?
POURQUOI?
Définir la
notion de
compilateur et
les principes
de base
Cours Compilation 5
plan
Définition: compilateurAnalyse lexicale (linéaire)Analyse syntaxique (hiérarchique)Analyse sémantiqueGénération du code intermédiaireOptimisation du codeGénération du code objet
Cours Compilation 6
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 ?
Cours Compilation 7
POURQUOI? (2)
Ecrire des procédures et des fonctions permettant De reconnaitre un entierDe reconnaitre un réelDe reconnaitre une addition...➔ C'est compliqué pour quelque chose de simple
➔ A la moindre modification tout est à reprogrammer
Cours Compilation 8
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
Cours Compilation 9
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
compilateurprogrammesource
messagesd'erreur
programmecible
Cours Compilation 10
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)
Cours Compilation 11
COMMENT? (1)
Et comment ça marche ?Comme un enfant qui apprend à lire...On reconnait d'abord les mots Analyse LexicalePuis, on vérifie que tous les mots sont dans le bon
ordre Analyse SyntaxiqueEnfin, on vérifie que tout ceci a un sens Analyse Sémantique
Cours Compilation 12
Structure Globale
En deux parties :analyse/reconnaissancesynthèse/transformation
Texte source
Texte cible
Partie Avant
(analyse)
Partie Arrière
(synthèse)Rep
sémantique
Cours Compilation 13
Les phases de la compilation
programme cible
gestion de latable des symboles
programme source
analyseur lexical
gestion des erreurs
analyseur syntaxique
analyseur sémantique
générateur de code intermédiaire
"optimiseur" de code
générateur de code cible
Cours Compilation 14
Analyse lexicale (1)
Lit le programme sourceReconnaît les séquences de caractères
significatives appelées lexèmesPour chaque lexème, l’analyseur lexical émet
un couple
Exemple : (NOMBRE, 123)
(type du lexème, valeur du lexème | @ dans la table de symboles)
Cours Compilation 15
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
Cours Compilation 16
Analyse lexicale (3)
nom
Table de symboles
portée
type
@ en mémoire
Cours Compilation 17
Analyse lexicale (4)
Exemple: position := initiale + vitesse*60<id1,1> <aff,:=> <id2,2> <op,+> <id3,3> <op,*>
<nb,60>
Table de symboles1 position …2 initial …3 rate …
Cours Compilation 18
Analyse lexicale(5)Comment reconnaitre les mots?Les lister : avoir un dictionnaire de mots clefsMais 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
Cours Compilation 19
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
Cours Compilation 20
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
Cours Compilation 21
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
Cours Compilation 22
Analyse sémantique(1)Vérifie la cohérence de l'arbre d'analyse Collecte d'informations destinées à la production de
codeL’analyse sémantique utilise l’arbre abstrait, ainsi que
la table de symboles afin d’effectuer un certain nombre de contrôles sémantiques
Analyse Sémantique
l’arbre abstrait
la table de symbolescontrôles sémantiques
Cours Compilation 23
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
Cours Compilation 24
Analyse sémantique(2)Exemple:
:=
id1 + id2 *
id3 60
:=
id1 + id2 *
id3 EntierVersReel 60
Cours Compilation 25
Génération du code intermédiaireProgramme pour une machine abstraite
Code facile à produire, à traduire en langage cibleExemple: code à 3 adresses
temp1:=EntierVersReel(60)
temp2:=id3*temp1
temp3:=id2+temp2
id1:=temp3
:=
id1 + id2 *
id3 EntierVersReel 60
Cours Compilation 26
Optimisation du codeOptimiser 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
temp3:=id2+temp2
id1:=temp3
temp1:= id3 * 60.0
id1:= id2 + temp1
Cours Compilation 27
Génération du code machineObtention du code machine
temp1:= id3 * 60.0
id1:= id2 + temp1
MOVF id3, R2
MULF #60.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
Cours Compilation 28
Récapitulatif...
position := initiale + vitesse * 60
Analyseur lexical
id1 := id2 + id3 * 60
Analyseur syntaxique
:=
id1 + id2 * id3 60
Analyseur sémantique
:=
id1 + id2 *
id3 EntToReel 60
Générateur codeintermédiaire
temp1:=EntierVersReel(60)temp2:=id3*temp1temp3:=id2+temp2id1:=temp3
Optimiseur de code
temp1:= id3 * 60.0id1:= id2 + temp1
Générateur de code
MOVF id3, R2MULF #60.0, R2MOVF id2, R1ADDF R2, R1MOVF R1, id1
Cours Compilation 29
TAF
RECHERCHE
LEX/YACC
ANTLR