Support de cours Compilation           Mastère ProfessionnelEnseignant : Abdelkader Abdelkarim             Abdelkader.abde...
Chapitre 1 : Introduction à la compilation    Définitions :    Compilation : Étude des techniques permettant de traduire ...
Chapitre 1 : Introduction à la compilationHistorique : Dans les années 40, il n’y avait que de la programmation en code m...
Chapitre 1 : Introduction à la compilation Classification par paradigme :  Impératif : Séquence d’instructions à exécuter...
Chapitre 1 : Introduction à la compilationCompilateur :                                                    5
Chapitre 1 : Introduction à la compilationCompilateur / Interprète                                                     6
Chapitre 1 : Introduction à la compilationDéfinition d’un compilateur :     Un compilateur est un programme qui lit un pro...
Chapitre 1 : Introduction à la compilationQualités dun compilateur Correction : le programme cible est équivalent au prog...
Chapitre 1 : Introduction à la compilationStructure dun compilateur       Phases danalyse du texte source      • analyse ...
Chapitre 1 : Introduction à la compilationStructure dun compilateur                                      indépendant du l...
Chapitre 1 : Introduction à la compilation                             programme sourceLes phases d’uncompilateur :       ...
Chapitre 1 : Introduction à la compilationAnalyse lexicaleAnalyse du programme source en constituants minimaux, les lexème...
Chapitre 1 : Introduction à la compilation  Analyse syntaxique On reconstruit la structure syntaxique de la suite de lexèm...
Chapitre 1 : Introduction à la compilationAnalyse sémantique   vérifie que cela a un sens :     position = initial + vites...
Chapitre 1 : Introduction à la compilation Génération de code intermédiaireReprésentations utiliséestemp1 := inttoreal(60)...
Chapitre 1 : Introduction à la compilation "Optimisation" de code   Elimination des opérations inutiles pour produire du c...
Chapitre 1 : Introduction à la compilation  Génération de code cible•   La dernière phase produit du code en langage dasse...
Chapitre 1 : Introduction à la compilation                     position = initial + vitesse*60                 MOVF id3, R...
Chapitre 1 : Introduction à la compilation Outils logiciels :Outils d’aide à la construction de compilateursGénérateurs d’...
Prochain SlideShare
Chargement dans…5
×

Cours compilation

906 vues

Publié le

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
906
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
36
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Cours compilation

  1. 1. Support de cours Compilation Mastère ProfessionnelEnseignant : Abdelkader Abdelkarim Abdelkader.abdelkadrim@aposte.net Faculté des Sciences de Gafsa Année universitaire : 2009 – 2010
  2. 2. Chapitre 1 : Introduction à la compilation Définitions : Compilation : Étude des techniques permettant de traduire un programme source en un programme objet Programme source : écrit dans un langage de programmation Programme objet : dépend de la machine Pré-requis : Algorithmes et structures de données (Piles, arbres, graphes,… ), Théorie des langages (Notion de grammaires et langages, Classification (Chomsky), Les langages réguliers et les automates, Les langages algébriques (contexte libre) et les automates à pile) Structure des machines (Représentation et codage de l’information , Techniques d’adressage, Exécution d’une instruction, Les langages d’assemblage et les assembleurs) Programmation procédurale, programmation objet, quelques langages de programmation (C, Java) 2
  3. 3. Chapitre 1 : Introduction à la compilationHistorique : Dans les années 40, il n’y avait que de la programmation en code machine Dans les années 50, les langages assembleur ralentissaient l’exécution. Difficiles àutiliser dans la pratique Le premier compilateur FORTRAN Heureusement, depuis on a fait beaucoup de progrèsLangages de bas niveaux :  Difficile d’écrire des programmes  Code souvent verbeux (long, fastidieux, etc.)  Risque d’erreurs élevéLangages de haut niveaux :  Rendre la programmation plus facile  Faciles à apprendre et a utiliser  Modularité  Portabilité  Lisibilité  Maintenance plus facile  Nombreux outils de développement associés 3
  4. 4. Chapitre 1 : Introduction à la compilation Classification par paradigme :  Impératif : Séquence d’instructions à exécuter pour obtenir le résultat Cobol (1959), Basic (1965), Pascal (1970), C (1978), etc.  Fonctionnel : Langages basés sur la récursivité (application de fonctions) : LISP (1960), Scheme, CAML, etc.  Logique : Résolution d’un problème à l’aide d’un moteur d’inférence PROLOG (1970)  Objet : C++, Samll Talk, Eiffel, Java, etc.Classification par portée : Langages généralistes : Permet de décrire tout type de programmeréalisant un calcul : C, Java, C++, Pascal, LISP, etc.•Inconvénient : décrire le « comment faire » Langages spécialisés (ou dédiés) : Ne permet de décrire qu’unefamille de programmes pour un domaine particulier exemples : TeX, sh,make 4
  5. 5. Chapitre 1 : Introduction à la compilationCompilateur : 5
  6. 6. Chapitre 1 : Introduction à la compilationCompilateur / Interprète 6
  7. 7. Chapitre 1 : Introduction à la compilationDéfinition d’un compilateur : Un compilateur est un programme qui lit un programme écrit dans un premier langage –le langage source- et le traduit en un programme équivalent écrit dans un autre langage –le lange cibe- . Au cours de ce processus, un rôle important du compilateur est de signaler à son utilisateur la présence d’erreurs dans le programme source. programme programme source compilateur cible messages derreur 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) 7
  8. 8. Chapitre 1 : Introduction à la compilationQualités dun compilateur Correction : le programme cible est équivalent au programme source Rapidité (temps de compilation proportionnel à la taille du programme) Production de code de bonne qualité : les programmes produits doiventêtre efficaces en temps et en espace Bons diagnostiques derreur Possibilité dutiliser un debugger sur le code produit 8
  9. 9. Chapitre 1 : Introduction à la compilationStructure dun compilateur  Phases danalyse du texte source • analyse lexicale • analyse syntaxique • analyse sémantique  Phases de synthèse (génération du programme cible) • génération du code intermédiaire • optimisation du code intermédiaire • génération du code cible Table des symboles (ident. utilisés et leurs attributs) 9
  10. 10. Chapitre 1 : Introduction à la compilationStructure dun compilateur  indépendant du langage source  dépendant du langage source  dépendant du code cible  indépendant du code cible 10
  11. 11. Chapitre 1 : Introduction à la compilation programme sourceLes phases d’uncompilateur : Analyseur lexical Analyseur syntaxique Analyseur sémantique Gestion de latable des symboles Générateur de code intermédiaire Gestion des erreurs « Optimiseur" de code Générateur de code cible programme cible 11
  12. 12. Chapitre 1 : Introduction à la compilationAnalyse lexicaleAnalyse du programme source en constituants minimaux, les lexèmesOn passe deposition = initial + vitesse * 60à[id, 1] [=] [id, 2] [+] [id, 3] [*] [60]Les identificateurs rencontrés sont placés dans la table des symbolesLes blancs et les commentaires sont éliminés 12
  13. 13. Chapitre 1 : Introduction à la compilation Analyse syntaxique On reconstruit la structure syntaxique de la suite de lexèmes fournie par lanalyseur lexical instruction daffectationidentificateur expression position = expression + expression identificateur expression * expression initial identificateur nombre Arbre de dérivation vitesse 60 13
  14. 14. Chapitre 1 : Introduction à la compilationAnalyse sémantique vérifie que cela a un sens : position = initial + vitesse * 60 – les opérandes sont-ils de même type? •60 est un entier et vitesse est un réel •60 devra être converti en réel – les opérateurs sont de quel type? •* et + seront des opérations sur réels – pas est-il une variable modifiable? 14
  15. 15. Chapitre 1 : Introduction à la compilation Génération de code intermédiaireReprésentations utiliséestemp1 := inttoreal(60)temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3 15
  16. 16. Chapitre 1 : Introduction à la compilation "Optimisation" de code Elimination des opérations inutiles pour produire du code plus efficace. temp1 := inttoreal(60) temp1 := id3 * 60.0 temp2 := id3 * temp1 id1 := id2 + temp1 temp3 := id2 + temp2 id1 := temp3La constante est traduite en réel flottant à la compilation, et non à lexécutionLa variable temp3 est éliminée 16
  17. 17. Chapitre 1 : Introduction à la compilation Génération de code cible• La dernière phase produit du code en langage dassemblage Un point important est lutilisation des registrestemp1 := id3 * 60.0 MOVF id3, R2id1 := id2 + temp1 MULF #60.0, R2 MOVF id2,R1 ADDF R2, R1 MOVF R1, id1 F = flottant. La première instruction transfère le contenu de id3 dans le registre R2 La seconde multiplie le contenu du registre R2 par la constante 60.0 • L’assemblage consiste à traduire ce code en code binaire • Les langages d’assemblage ou assembleurs sont des versions un peu plus lisibles du code machine avec des noms symboliques pour les opérations et pour les opérandes MOV a, R1 ADD 2, R1 MOV R1, b • Chaque processeur a son langage dassemblage 17
  18. 18. Chapitre 1 : Introduction à la compilation position = initial + vitesse*60 MOVF id3, R2 MULF #60.0, R2 analyseur lexical MOVF id2,R1Table des symboles ADDF R2, R1 MOVF R1, id1 id1 := id2 + id3*60 1 position ... 2 initial ... 3 vitesse ... analyseur syntaxique générateur de code cible 4 5 = ... id1 + temp1 := id3 * 60.0 id1 := id2 + temp1 id2 * id3 60 optimiseur de code analyseur sémantique temp1 := inttoreal(60) id1 + temp2 := id3 * temp1 temp3 := id2 + temp2 id2 * id1 := temp3 id3 inttoreal 60 générateur de code intermédiaire 18
  19. 19. Chapitre 1 : Introduction à la compilation Outils logiciels :Outils d’aide à la construction de compilateursGénérateurs d’analyseurs lexicauxEngendrent un analyseur lexical ( scanner, lexer) sous forme d’automate fini à partir d’une spécification sous forme d’expressions régulièresFlex, LexGénérateurs d’analyseurs syntaxiquesEngendrent un analyseur syntaxique ( parser) à partir d’une grammaireBison, YaccGénérateurs de traducteursEngendrent un traducteur à partir d’un schéma de traduction (grammaire + règles sémantiques)Bison, Yacc 19

×