29
LOGO COMPILATION Élaboré par Mazigh Yosra [email protected] Cours 2 ème année IAG

COMPILATION

  • Upload
    makoto

  • View
    91

  • Download
    7

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

Page 1: COMPILATION

LOGO

COMPILATION

Élaboré par Mazigh Yosra [email protected] 2ème année IAG

Page 2: COMPILATION

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

Page 3: COMPILATION

Cours Compilation 3

PREREQUIS

Théorie des langages formels: expressions régulières, automates, grammaires, ambiguïté

Langages de programmationAlgorithmique

Page 4: COMPILATION

Cours Compilation 4

Objectif

COMMENT?

QOUI?

POURQUOI?

Définir la

notion de

compilateur et

les principes

de base

Page 5: COMPILATION

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

Page 6: COMPILATION

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 ?

Page 7: COMPILATION

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

Page 8: COMPILATION

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

Page 9: 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

Page 10: COMPILATION

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)

Page 11: COMPILATION

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

Page 12: COMPILATION

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

Page 13: COMPILATION

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

Page 14: COMPILATION

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)

Page 15: COMPILATION

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

Page 16: COMPILATION

Cours Compilation 16

Analyse lexicale (3)

nom

Table de symboles

portée

type

@ en mémoire

Page 17: COMPILATION

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 …

Page 18: COMPILATION

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

Page 19: COMPILATION

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

Page 20: COMPILATION

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

Page 21: COMPILATION

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

Page 22: COMPILATION

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

Page 23: COMPILATION

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

Page 24: COMPILATION

Cours Compilation 24

Analyse sémantique(2)Exemple:

:=

id1 + id2 *

id3 60

:=

id1 + id2 *

id3 EntierVersReel 60

Page 25: COMPILATION

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

Page 26: COMPILATION

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

Page 27: COMPILATION

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

Page 28: COMPILATION

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

Page 29: COMPILATION

Cours Compilation 29

TAF

RECHERCHE

LEX/YACC

ANTLR