371 likes | 810 Views
COMPILATION. Élaboré par Mazigh Yosra yosramazigh@yahoo.fr 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
E N D
COMPILATION Élaboré par MazighYosrayosramazigh@yahoo.fr 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 • Introduction à la compilation: Cours 1 – Yann Régis-GianasPPS – 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 HammemiMoez - 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 Cours Compilation
PREREQUIS • Théorie des langages formels: expressions régulières, automates, grammaires, ambiguïté • Langages de programmation • Algorithmique Cours Compilation
Objectif Définir la notion de compilateur et les principes de base POURQUOI? QOUI? COMMENT? 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 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 ? 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 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 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 source programme cible compilateur messages d'erreur 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) 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 Cours Compilation
Structure Globale En deux parties : • analyse/reconnaissance • synthèse/transformation Partie Avant (analyse) Partie Arrière (synthèse) Rep sémantique Texte source Texte cible 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 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 • Exemple : (NOMBRE, 123) (type du lexème, valeur du lexème | @ dans la table de symboles) 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 syntaxiqueLes types de lexèmes doivent être connus des deux Cours Compilation
@ en mémoire portée nom type Table de symboles Analyse lexicale (3) Cours Compilation
Analyse lexicale (4) • Exemple: position := initiale + vitesse*60 <id1,1> <aff,:=> <id2,2> <op,+> <id3,3> <op,*> <nb,60> 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 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 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 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 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 Sémantique contrôles sémantiques la table de symboles 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 Cours Compilation
Analyse sémantique(2) • Exemple: := id1 + id2 * id3 EntierVersReel 60 := id1 + id2 * id3 60 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 := id1 + id2 * id3 EntierVersReel 60 temp1:=EntierVersReel(60) temp2:=id3*temp1 temp3:=id2+temp2 id1:=temp3 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 temp3:=id2+temp2 id1:=temp3 temp1:= id3 * 60.0 id1:= id2 + temp1 Cours Compilation
Génération du code machine • Obtention du code machine MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 temp1:= id3 * 60.0 id1:= id2 + temp1 Cours Compilation
Récapitulatif... temp1:=EntierVersReel(60) temp2:=id3*temp1 temp3:=id2+temp2 id1:=temp3 Analyseur sémantique position := initiale + vitesse * 60 Analyseur lexical := id1 + id2 * id3 EntToReel 60 := id1 + id2 * id3 60 Optimiseur de code id1 := id2 + id3 * 60 temp1:= id3 * 60.0 id1:= id2 + temp1 Analyseur syntaxique Générateur de code Générateur code intermédiaire MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 Cours Compilation
TAF RECHERCHE LEX/YACC ANTLR Cours Compilation