SlideShare une entreprise Scribd logo
1  sur  3
Télécharger pour lire hors ligne
Ecole Normale Supérieure Kouba Module : Compilation
Département Informatique Année : 2023/2024
Introduction à la compilation
I. Introduction
Au début de l'informatique les programmes étaient écrit en langage machine c.-à-d. en une
suite de chiffre 0 et 1. Cette méthode n'était pas pratique car la mise au point et l'écriture de
programmes était assez complexe. Les programmes étaient en suite écrits en langage
assembleur ce qui consiste en l'utilisation de mnémonique (nom d'instruction) ceci était
proche de la machine mais il fallait connaitre la structure interne de celle-ci (par exemple : les
registres, les modes d'adressage, ...).
Les points précédents ont conduit ou développement des langages appelé Langages
Evolués tel que C, C++, Pascal, Java, Fortran, qui sont proches du langage naturelle et sont
alors indépendants de la structure interne de la machine. Le problème qui se pose alors est le
suivant :
Un langage évolué est-il directement compris par la machine ?
La réponse et les détails de cette question font l'objet de notre module. C.-à-d.,
Comment implémenter un langage évolué sur machine ? L'idée consiste à transformer un
programme écrit en langage évolué en un programme ou un code directement exécutable par
la machine.
Le processus de transformation est appelé Compilation.
II. Compilateur et translateur
Compilation : elle consiste donc de traduire un programme source écrit en langage
évolue en code directement exécutable par la machine. Il existe d’autres transformations telles
que la Traduction et l'Interprétation.
Traduction : elle consiste à traduire un programme écrit en langage L1 en un
programme écrit en langage L2. Le programme était dans L1 est appelé Programme Source et
celui écrit en L2 est le Programme Objet.
Si le langage L2 est le langage Assembleur on dira que c'est un Compilateur.
Si les deux langages L1 et L2 sont tous les deux des langages évolues on parlera de
prés processeurs ou de prés compilateur.
Interprétation : consiste à traduire et à exécuter un programme écrit en langage
Source instruction par instruction.
La différence entre le compilateur et l'interpréteur se situe dans le faite que
l'interpréteur exécute directement la source et ne produit pas de programme objet.
Programme écrit en
langage évolué
Processus de
transformation
Code Objet
Ecole Normale Supérieure Kouba Module : Compilation
Département Informatique Année : 2023/2024
Remarque :
À priori le langage dans lequel écrire un compilateur est indépendant des langages source et
cible du compilateur.
On peut choisir un langage de bas niveau pour des raisons d'efficacité, ou bien un langage de
haut niveau afin de mieux contrôler la complexité du développement.
Un compilateur C1 de Source dans Cible écrit dans un langage L peut lui même être compilé
par un compilateur de L dans M. on obtient alors toujours un compilateur de Source dans
Cible mais écrit dans le langage M.
III. Structure logique d’un compilateur
Le processus de compilation est assez complexe. Les différentes phases sont
représentées dans le schéma ci-dessous :
Remarque :
Les compilateurs dans lesquels les étapes sont faites séparément sont appelés « les
compilateurs multipasses ». Ceux dans lesquels les étapes sont en une phase sont appelés « les
compilateurs monopasses ».
Phrases ou instructions
Instructions élémentaires
Ou Code élémentaire
Programme source
Analyse lexicale
Table des
symboles
Analyse syntaxique
Analyse sémantique et génération
du code intermédiaire
Optimisation du code
Génération du code
Code objet
Programme source
Analyse lexicale
Traitement des
erreurs
Entités lexicales
Instructions élémentaires
Ou Code élémentaire
Phrases ou instructions
Traitement des
erreurs
Analyse syntaxique
Analyse sémantique et génération
du code intermédiaire
Optimisation du code
Génération du code
Code objet
Programme source
Analyse lexicale
Table des
symboles
Ecole Normale Supérieure Kouba Module : Compilation
Département Informatique Année : 2023/2024
IV. Les différentes phases d’un compilateur
1. Analyse lexicale ou lexicographie
Le rôle de cette analyse est de déterminer les mots appartenant au langage à compiler et de
construire la table appelée table des symboles ou dictionnaire.
2. Analyse Syntaxique
Le rôle de l’analyseur syntaxique est de vérifier si la structure ou encore la syntaxe de la
phase de la succession des mots obtenus de l’analyse lexicale est correcte (conforme à la
grammaire du langage source).
3. Analyse Sémantique et Génération de code Intermédiaires
L’analyse sémantique permet de vérifier si la chaine correcte syntaxique est aussi correcte de
point de vue Sens. Cette phase permet de générer à partir d’une entité syntaxique un code
simplifié de bas niveau.
4. Optimisation de code
Cette phase vise à optimiser le code de point de vue place mémoire et rapidité d’exécution.
C’est une étape optionnelle dans le compilateur.
5. Génération de code
Cette phase est la dernière étape de la compilation. Elle permet de traduire le programme en
code directement exécutable par la machine.
Elle nécessite la connaissance de la forme du code objet à générer ainsi que l’architecture de
la machine sur laquelle va s’exécuter le programme, c.-à-d. le jeu d’instruction, registre, mode
d’adressage...
6. Table des symboles ou Dictionnaire
C’est une table contenant les informations concernant les entités du programme à compiler,
elle est construite dans l’analyse lexicale et est mise à jour au fur et à mesure dans les autres
étapes de la compilation.
Mots clés Caractères spéciaux
Identificateurs Constants
Dans la table des symboles, les identificateurs et les constants ne se répètent pas.
7. Traitement des erreurs
Des erreurs peuvent survenir dans n’importe quelle étape de la compilation. Un détecteur
d’erreurs et un traitement d’erreurs peuvent être inclus dans la compilation.
Programme Source Scanner Entités Lexicales

Contenu connexe

Similaire à Chapitre 0_ Introduction à la compilation.pdf

Similaire à Chapitre 0_ Introduction à la compilation.pdf (20)

Compilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
CompilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnCompilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
Compilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
 
Pl 2-bis
Pl 2-bisPl 2-bis
Pl 2-bis
 
Chapitre 01 - Notions de base
Chapitre 01 - Notions de baseChapitre 01 - Notions de base
Chapitre 01 - Notions de base
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
Introduction à ASP.NET
Introduction à ASP.NETIntroduction à ASP.NET
Introduction à ASP.NET
 
43_pps.pdf
43_pps.pdf43_pps.pdf
43_pps.pdf
 
Algorithme et Programmation
Algorithme et ProgrammationAlgorithme et Programmation
Algorithme et Programmation
 
Cours langage C et C++
Cours langage C et C++Cours langage C et C++
Cours langage C et C++
 
Chapitre 1
Chapitre 1Chapitre 1
Chapitre 1
 
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfLUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
 
C#
C#C#
C#
 
c1.pdf
c1.pdfc1.pdf
c1.pdf
 
Cours Visual Basic.NET
Cours Visual Basic.NETCours Visual Basic.NET
Cours Visual Basic.NET
 
Asd
AsdAsd
Asd
 
Ktab asd
Ktab asdKtab asd
Ktab asd
 
Microsoft07coursbaptiste
Microsoft07coursbaptisteMicrosoft07coursbaptiste
Microsoft07coursbaptiste
 
Cours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfCours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdf
 
Algorithme et programmation.pdf
Algorithme et programmation.pdfAlgorithme et programmation.pdf
Algorithme et programmation.pdf
 
SystemC
SystemCSystemC
SystemC
 
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
 

Chapitre 0_ Introduction à la compilation.pdf

  • 1. Ecole Normale Supérieure Kouba Module : Compilation Département Informatique Année : 2023/2024 Introduction à la compilation I. Introduction Au début de l'informatique les programmes étaient écrit en langage machine c.-à-d. en une suite de chiffre 0 et 1. Cette méthode n'était pas pratique car la mise au point et l'écriture de programmes était assez complexe. Les programmes étaient en suite écrits en langage assembleur ce qui consiste en l'utilisation de mnémonique (nom d'instruction) ceci était proche de la machine mais il fallait connaitre la structure interne de celle-ci (par exemple : les registres, les modes d'adressage, ...). Les points précédents ont conduit ou développement des langages appelé Langages Evolués tel que C, C++, Pascal, Java, Fortran, qui sont proches du langage naturelle et sont alors indépendants de la structure interne de la machine. Le problème qui se pose alors est le suivant : Un langage évolué est-il directement compris par la machine ? La réponse et les détails de cette question font l'objet de notre module. C.-à-d., Comment implémenter un langage évolué sur machine ? L'idée consiste à transformer un programme écrit en langage évolué en un programme ou un code directement exécutable par la machine. Le processus de transformation est appelé Compilation. II. Compilateur et translateur Compilation : elle consiste donc de traduire un programme source écrit en langage évolue en code directement exécutable par la machine. Il existe d’autres transformations telles que la Traduction et l'Interprétation. Traduction : elle consiste à traduire un programme écrit en langage L1 en un programme écrit en langage L2. Le programme était dans L1 est appelé Programme Source et celui écrit en L2 est le Programme Objet. Si le langage L2 est le langage Assembleur on dira que c'est un Compilateur. Si les deux langages L1 et L2 sont tous les deux des langages évolues on parlera de prés processeurs ou de prés compilateur. Interprétation : consiste à traduire et à exécuter un programme écrit en langage Source instruction par instruction. La différence entre le compilateur et l'interpréteur se situe dans le faite que l'interpréteur exécute directement la source et ne produit pas de programme objet. Programme écrit en langage évolué Processus de transformation Code Objet
  • 2. Ecole Normale Supérieure Kouba Module : Compilation Département Informatique Année : 2023/2024 Remarque : À priori le langage dans lequel écrire un compilateur est indépendant des langages source et cible du compilateur. On peut choisir un langage de bas niveau pour des raisons d'efficacité, ou bien un langage de haut niveau afin de mieux contrôler la complexité du développement. Un compilateur C1 de Source dans Cible écrit dans un langage L peut lui même être compilé par un compilateur de L dans M. on obtient alors toujours un compilateur de Source dans Cible mais écrit dans le langage M. III. Structure logique d’un compilateur Le processus de compilation est assez complexe. Les différentes phases sont représentées dans le schéma ci-dessous : Remarque : Les compilateurs dans lesquels les étapes sont faites séparément sont appelés « les compilateurs multipasses ». Ceux dans lesquels les étapes sont en une phase sont appelés « les compilateurs monopasses ». Phrases ou instructions Instructions élémentaires Ou Code élémentaire Programme source Analyse lexicale Table des symboles Analyse syntaxique Analyse sémantique et génération du code intermédiaire Optimisation du code Génération du code Code objet Programme source Analyse lexicale Traitement des erreurs Entités lexicales Instructions élémentaires Ou Code élémentaire Phrases ou instructions Traitement des erreurs Analyse syntaxique Analyse sémantique et génération du code intermédiaire Optimisation du code Génération du code Code objet Programme source Analyse lexicale Table des symboles
  • 3. Ecole Normale Supérieure Kouba Module : Compilation Département Informatique Année : 2023/2024 IV. Les différentes phases d’un compilateur 1. Analyse lexicale ou lexicographie Le rôle de cette analyse est de déterminer les mots appartenant au langage à compiler et de construire la table appelée table des symboles ou dictionnaire. 2. Analyse Syntaxique Le rôle de l’analyseur syntaxique est de vérifier si la structure ou encore la syntaxe de la phase de la succession des mots obtenus de l’analyse lexicale est correcte (conforme à la grammaire du langage source). 3. Analyse Sémantique et Génération de code Intermédiaires L’analyse sémantique permet de vérifier si la chaine correcte syntaxique est aussi correcte de point de vue Sens. Cette phase permet de générer à partir d’une entité syntaxique un code simplifié de bas niveau. 4. Optimisation de code Cette phase vise à optimiser le code de point de vue place mémoire et rapidité d’exécution. C’est une étape optionnelle dans le compilateur. 5. Génération de code Cette phase est la dernière étape de la compilation. Elle permet de traduire le programme en code directement exécutable par la machine. Elle nécessite la connaissance de la forme du code objet à générer ainsi que l’architecture de la machine sur laquelle va s’exécuter le programme, c.-à-d. le jeu d’instruction, registre, mode d’adressage... 6. Table des symboles ou Dictionnaire C’est une table contenant les informations concernant les entités du programme à compiler, elle est construite dans l’analyse lexicale et est mise à jour au fur et à mesure dans les autres étapes de la compilation. Mots clés Caractères spéciaux Identificateurs Constants Dans la table des symboles, les identificateurs et les constants ne se répètent pas. 7. Traitement des erreurs Des erreurs peuvent survenir dans n’importe quelle étape de la compilation. Un détecteur d’erreurs et un traitement d’erreurs peuvent être inclus dans la compilation. Programme Source Scanner Entités Lexicales