SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Support de cours Compilation

           Mastère Professionnel

Enseignant : Abdelkader Abdelkarim
             Abdelkader.abdelkadrim@aposte.net


     Faculté des Sciences de Gafsa
    Année universitaire : 2009 – 2010
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
Chapitre 1 : Introduction à la compilation

Historique :
 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ès

Langages 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
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 programme
ré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’une
famille de programmes pour un domaine particulier exemples : TeX, sh,
make




                                                                             4
Chapitre 1 : Introduction à la compilation
Compilateur :




                                                    5
Chapitre 1 : Introduction à la compilation
Compilateur / Interprète




                                                     6
Chapitre 1 : Introduction à la compilation
Dé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
                                         d'erreur
 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
Chapitre 1 : Introduction à la compilation
Qualités d'un 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 d'erreur

 Possibilité d'utiliser un debugger sur le code produit




                                                                           8
Chapitre 1 : Introduction à la compilation
Structure d'un compilateur

       Phases d'analyse 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
Chapitre 1 : Introduction à la compilation
Structure d'un compilateur




                                      indépendant du langage source
     dépendant du langage source     dépendant du code cible
     indépendant du code cible




                                                                       10
Chapitre 1 : Introduction à la compilation
                             programme source
Les phases d’un
compilateur :
                              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                                 11
Chapitre 1 : Introduction à la compilation

Analyse lexicale

Analyse du programme source en constituants minimaux, les lexèmes
On passe de
position = initial + vitesse * 60
à
[id, 1] [=] [id, 2] [+] [id, 3] [*] [60]

Les identificateurs rencontrés sont placés dans la table des symboles
Les blancs et les commentaires sont éliminés




                                                                        12
Chapitre 1 : Introduction à la compilation
  Analyse syntaxique
 On reconstruit la structure syntaxique de la suite de lexèmes fournie par l'analyseur lexical

                           instruction
                           d'affectation



identificateur                                     expression
   position                      =


                                     expression              +               expression



                                identificateur                expression             *           expression
                                initial


                                                            identificateur                         nombre
 Arbre de dérivation                                           vitesse                               60
                                                                                                              13
Chapitre 1 : Introduction à la compilation

Analyse 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
Chapitre 1 : Introduction à la compilation

 Génération de code intermédiaire

Représentations utilisées
temp1 := inttoreal(60)
temp2 := id3 * temp1
temp3 := id2 + temp2
id1 := temp3




                                                   15
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 := temp3




La constante est traduite en réel flottant à la compilation, et non à l'exécution
La variable temp3 est éliminée




                                                                                    16
Chapitre 1 : Introduction à la compilation

  Génération de code cible
•   La dernière phase produit du code en langage d'assemblage
    Un point important est l'utilisation des registres
temp1 := id3 * 60.0                               MOVF id3, R2
id1 := 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 d'assemblage
                                                                                               17
Chapitre 1 : Introduction à la compilation
                     position = initial + vitesse*60                 MOVF id3, R2
                                                                     MULF #60.0, R2
                             analyseur lexical                       MOVF id2,R1
Table 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
Chapitre 1 : Introduction à la compilation

 Outils logiciels :

Outils d’aide à la construction de compilateurs

Générateurs d’analyseurs lexicaux
Engendrent un analyseur lexical ( scanner, lexer) sous forme d’automate fini à partir d’une
    spécification sous forme d’expressions régulières
Flex, Lex

Générateurs d’analyseurs syntaxiques
Engendrent un analyseur syntaxique ( parser) à partir d’une grammaire
Bison, Yacc

Générateurs de traducteurs
Engendrent un traducteur à partir d’un schéma de traduction (grammaire + règles sémantiques)
Bison, Yacc



                                                                                               19

Weitere ähnliche Inhalte

Was ist angesagt?

Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
pierrepo
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigés
Majid CHADAD
 

Was ist angesagt? (20)

Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Cours de c
Cours de cCours de c
Cours de c
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
 
Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
Formation python
Formation pythonFormation python
Formation python
 
cours algorithme et structure de données 1er année
cours algorithme et structure de données 1er annéecours algorithme et structure de données 1er année
cours algorithme et structure de données 1er année
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
 
Chp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat TransitionChp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat Transition
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigés
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court chemin
 
UML Part1-Introduction Mansouri
UML Part1-Introduction MansouriUML Part1-Introduction Mansouri
UML Part1-Introduction Mansouri
 
diagramme d'activité
diagramme d'activitédiagramme d'activité
diagramme d'activité
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Corrige tp java
Corrige tp javaCorrige tp java
Corrige tp java
 
Analyse merise Prof. Khalifa MANSOURI
Analyse merise Prof. Khalifa MANSOURIAnalyse merise Prof. Khalifa MANSOURI
Analyse merise Prof. Khalifa MANSOURI
 

Andere mochten auch

Ch3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes RécursivesCh3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes Récursives
lotfibenromdhane
 
Rapport groupe-travail-sur-apprentissage-en-ligne 3
Rapport groupe-travail-sur-apprentissage-en-ligne 3Rapport groupe-travail-sur-apprentissage-en-ligne 3
Rapport groupe-travail-sur-apprentissage-en-ligne 3
Riadh Harizi
 
Ch7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-CopmlétudeCh7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-Copmlétude
lotfibenromdhane
 
Ch2 Algorthmique Avancée - Récursivité
Ch2 Algorthmique Avancée - RécursivitéCh2 Algorthmique Avancée - Récursivité
Ch2 Algorthmique Avancée - Récursivité
lotfibenromdhane
 
Ch1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de BaseCh1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de Base
lotfibenromdhane
 
Ch5 Algorthmique Avancée - Algorithme de Tri
Ch5 Algorthmique Avancée - Algorithme de TriCh5 Algorthmique Avancée - Algorithme de Tri
Ch5 Algorthmique Avancée - Algorithme de Tri
lotfibenromdhane
 
Serie tri revision_3si
Serie tri revision_3siSerie tri revision_3si
Serie tri revision_3si
Riadh Harizi
 
Le livre du_c_pour_les_vrais_d%c3%a9butants_en_programmation
Le livre du_c_pour_les_vrais_d%c3%a9butants_en_programmationLe livre du_c_pour_les_vrais_d%c3%a9butants_en_programmation
Le livre du_c_pour_les_vrais_d%c3%a9butants_en_programmation
Chingongou ­
 
Cours access
Cours accessCours access
Cours access
msodjinou
 

Andere mochten auch (20)

Ch3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes RécursivesCh3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes Récursives
 
Rapport groupe-travail-sur-apprentissage-en-ligne 3
Rapport groupe-travail-sur-apprentissage-en-ligne 3Rapport groupe-travail-sur-apprentissage-en-ligne 3
Rapport groupe-travail-sur-apprentissage-en-ligne 3
 
Ch7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-CopmlétudeCh7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-Copmlétude
 
Cats
CatsCats
Cats
 
Ch2 Algorthmique Avancée - Récursivité
Ch2 Algorthmique Avancée - RécursivitéCh2 Algorthmique Avancée - Récursivité
Ch2 Algorthmique Avancée - Récursivité
 
Cours as dch3
Cours as dch3Cours as dch3
Cours as dch3
 
Coursasdch3
Coursasdch3Coursasdch3
Coursasdch3
 
Ch1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de BaseCh1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de Base
 
Ch5 Algorthmique Avancée - Algorithme de Tri
Ch5 Algorthmique Avancée - Algorithme de TriCh5 Algorthmique Avancée - Algorithme de Tri
Ch5 Algorthmique Avancée - Algorithme de Tri
 
Algo tri
Algo triAlgo tri
Algo tri
 
Chap04 les-algorithme-de-tri-et-de-recherche
Chap04 les-algorithme-de-tri-et-de-rechercheChap04 les-algorithme-de-tri-et-de-recherche
Chap04 les-algorithme-de-tri-et-de-recherche
 
GP TDI
GP TDIGP TDI
GP TDI
 
Serie tri revision_3si
Serie tri revision_3siSerie tri revision_3si
Serie tri revision_3si
 
TP 3 ACCESS
TP 3 ACCESSTP 3 ACCESS
TP 3 ACCESS
 
Le livre du_c_pour_les_vrais_d%c3%a9butants_en_programmation
Le livre du_c_pour_les_vrais_d%c3%a9butants_en_programmationLe livre du_c_pour_les_vrais_d%c3%a9butants_en_programmation
Le livre du_c_pour_les_vrais_d%c3%a9butants_en_programmation
 
M01 Metier et Formation
M01 Metier et FormationM01 Metier et Formation
M01 Metier et Formation
 
TP 2 ACCESS
TP 2 ACCESSTP 2 ACCESS
TP 2 ACCESS
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
 
Cours access
Cours accessCours access
Cours access
 
TP 1 ACCESS
TP 1 ACCESSTP 1 ACCESS
TP 1 ACCESS
 

Ähnlich wie Cours compilation

Chapitre 0_ Introduction à la compilation.pdf
Chapitre 0_ Introduction à la compilation.pdfChapitre 0_ Introduction à la compilation.pdf
Chapitre 0_ Introduction à la compilation.pdf
benfifiaymen36
 
Cours VB 2012 seance 1
Cours VB 2012 seance 1Cours VB 2012 seance 1
Cours VB 2012 seance 1
ISIG
 
COURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptxCOURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptx
LuneSabsPericolo1
 
Programmation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxProgrammation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptx
OlyvierNzighou1
 
Cours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfCours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdf
Hailisara
 

Ähnlich wie Cours compilation (20)

Chapitre 0_ Introduction à la compilation.pdf
Chapitre 0_ Introduction à la compilation.pdfChapitre 0_ Introduction à la compilation.pdf
Chapitre 0_ Introduction à la compilation.pdf
 
compilation1-2020.pdf
compilation1-2020.pdfcompilation1-2020.pdf
compilation1-2020.pdf
 
Le langage C.pdf
Le langage C.pdfLe langage C.pdf
Le langage C.pdf
 
1758yyui3-jjjujujjiopoooooAcetatesA0.ppt
1758yyui3-jjjujujjiopoooooAcetatesA0.ppt1758yyui3-jjjujujjiopoooooAcetatesA0.ppt
1758yyui3-jjjujujjiopoooooAcetatesA0.ppt
 
Cours VB 2012 seance 1
Cours VB 2012 seance 1Cours VB 2012 seance 1
Cours VB 2012 seance 1
 
COURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptxCOURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptx
 
presentation-compilateur.pptx
presentation-compilateur.pptxpresentation-compilateur.pptx
presentation-compilateur.pptx
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Compilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
CompilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnCompilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
Compilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
 
C#
C#C#
C#
 
Programmation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptxProgrammation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptx
 
Programmation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxProgrammation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptx
 
cours fortran.pptx
cours fortran.pptxcours fortran.pptx
cours fortran.pptx
 
Dans les entrailles du langage C
Dans les entrailles du langage CDans les entrailles du langage C
Dans les entrailles du langage C
 
Cours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfCours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdf
 
Chap1compil
Chap1compilChap1compil
Chap1compil
 
Cours langage-c
Cours langage-cCours langage-c
Cours langage-c
 
Introduction à ASP.NET
Introduction à ASP.NETIntroduction à ASP.NET
Introduction à ASP.NET
 
Cours langage C et C++
Cours langage C et C++Cours langage C et C++
Cours langage C et C++
 
Langage C
Langage CLangage C
Langage C
 

Cours compilation

  • 1. Support de cours Compilation Mastère Professionnel Enseignant : Abdelkader Abdelkarim Abdelkader.abdelkadrim@aposte.net Faculté des Sciences de Gafsa Année universitaire : 2009 – 2010
  • 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. Chapitre 1 : Introduction à la compilation Historique :  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ès Langages 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. 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 programme ré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’une famille de programmes pour un domaine particulier exemples : TeX, sh, make 4
  • 5. Chapitre 1 : Introduction à la compilation Compilateur : 5
  • 6. Chapitre 1 : Introduction à la compilation Compilateur / Interprète 6
  • 7. Chapitre 1 : Introduction à la compilation Dé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 d'erreur 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. Chapitre 1 : Introduction à la compilation Qualités d'un 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 d'erreur  Possibilité d'utiliser un debugger sur le code produit 8
  • 9. Chapitre 1 : Introduction à la compilation Structure d'un compilateur  Phases d'analyse 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. Chapitre 1 : Introduction à la compilation Structure d'un compilateur  indépendant du langage source  dépendant du langage source  dépendant du code cible  indépendant du code cible 10
  • 11. Chapitre 1 : Introduction à la compilation programme source Les phases d’un compilateur : 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 11
  • 12. Chapitre 1 : Introduction à la compilation Analyse lexicale Analyse du programme source en constituants minimaux, les lexèmes On passe de position = initial + vitesse * 60 à [id, 1] [=] [id, 2] [+] [id, 3] [*] [60] Les identificateurs rencontrés sont placés dans la table des symboles Les blancs et les commentaires sont éliminés 12
  • 13. Chapitre 1 : Introduction à la compilation Analyse syntaxique On reconstruit la structure syntaxique de la suite de lexèmes fournie par l'analyseur lexical instruction d'affectation identificateur expression position = expression + expression identificateur expression * expression initial identificateur nombre Arbre de dérivation vitesse 60 13
  • 14. Chapitre 1 : Introduction à la compilation Analyse 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. Chapitre 1 : Introduction à la compilation Génération de code intermédiaire Représentations utilisées temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 15
  • 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 := temp3 La constante est traduite en réel flottant à la compilation, et non à l'exécution La variable temp3 est éliminée 16
  • 17. Chapitre 1 : Introduction à la compilation Génération de code cible • La dernière phase produit du code en langage d'assemblage Un point important est l'utilisation des registres temp1 := id3 * 60.0 MOVF id3, R2 id1 := 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 d'assemblage 17
  • 18. Chapitre 1 : Introduction à la compilation position = initial + vitesse*60 MOVF id3, R2 MULF #60.0, R2 analyseur lexical MOVF id2,R1 Table 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. Chapitre 1 : Introduction à la compilation Outils logiciels : Outils d’aide à la construction de compilateurs Générateurs d’analyseurs lexicaux Engendrent un analyseur lexical ( scanner, lexer) sous forme d’automate fini à partir d’une spécification sous forme d’expressions régulières Flex, Lex Générateurs d’analyseurs syntaxiques Engendrent un analyseur syntaxique ( parser) à partir d’une grammaire Bison, Yacc Générateurs de traducteurs Engendrent un traducteur à partir d’un schéma de traduction (grammaire + règles sémantiques) Bison, Yacc 19