1 / 29

COMPILATION

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

makoto
Download Presentation

COMPILATION

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. COMPILATION Élaboré par MazighYosrayosramazigh@yahoo.fr Cours 2ème année IAG

  2. 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

  3. PREREQUIS • Théorie des langages formels: expressions régulières, automates, grammaires, ambiguïté • Langages de programmation • Algorithmique Cours Compilation

  4. Objectif Définir la notion de compilateur et les principes de base POURQUOI? QOUI? COMMENT? Cours Compilation

  5. 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

  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 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

  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 programme source programme cible compilateur messages d'erreur 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 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

  12. 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

  13. 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

  14. 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

  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 syntaxiqueLes types de lexèmes doivent être connus des deux Cours Compilation

  16. @ en mémoire portée nom type Table de symboles Analyse lexicale (3) Cours Compilation

  17. Analyse lexicale (4) • Exemple: position := initiale + vitesse*60 <id1,1> <aff,:=> <id2,2> <op,+> <id3,3> <op,*> <nb,60> Cours Compilation

  18. 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

  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 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

  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 EntierVersReel 60 := id1 + id2 * id3 60 Cours Compilation

  25. 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

  26. 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

  27. 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

  28. 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

  29. TAF RECHERCHE LEX/YACC ANTLR Cours Compilation

More Related