Vous êtes sur la page 1sur 5

Chapitre 1

Introduction à la compilation

1.1 Introduction
Ce chapitre est organisé comme suit :

La section 2 est consacrée aux diverses définitions des concepts de la compilation. Dans
la section 3, nous présentons les différentes phases de la compilation, et enfin, nous finissons
ce chapitre par une conclusion.

1.2 Définitions générales

1.2.1 Compiler
Signifie analyser une description d’informations et synthétiser une autre forme de celle-ci
mieux adaptée à ce que l’on veut en faire tout en maintenant la sémantique invariable.

1.2.2 Compilateur
Il peut ˆetre défini comme étant un traducteur d’une forme source à la forme objet. Un
compilateur est un programme traduisant un programme écrit dans un langage évolué
”source” en un programme objet qui est un code executable par une machine réelle ou vir-
tuelle. Un programme source est une suite de caractères ; dans le cas d’une présence d’erreurs,
le compilateur donne un diagnostic à l’utilisateur.

1.2.3 Gestion de la table des symboles


Elle est une structure de données contenant un enregistrement pour chaque identificateur
avec des champs et des attributs. Elle est utilisée par le compilateur pour enregistrer les
identificateurs et leurs attributs rencontrés dans le programme source. Ces attributs peuvent
fournir des informations aux sujets de :
– emplacement mémoire des différents identificateurs ;
– identification des différents type ;
– définition des différentes portées (champs de validité, nombre de types d’arguments,
méthode de passage de chaque argument, type de retour, etc.

1.2.4 Gestion des Erreurs


Quand une erreur est détectée au moment de la compilation, la phase correspondante doit
établir un diagnostic et doit aussi s’en accommoder pour que le compilateur puisse continuer
le traitement d’analyse afin qu’il puisse détecter d’autres erreurs dans le programme source.

1.2.5 Interpréteur
C’est un programme qui traduit un programme source écrit dans un langage évolué ligne
par ligne et l’exécute au fur à mesure à la différence d’un compilateur. Le temps d’exécution
d’un interpréteur est plus grand que le temps d’exécution d’un compilateur.
La figure 1.1 illustre le fonctionnement d’un compilateur.

Programme Source

Analyse et Synthèse Programme Objet

Méssages d’erreurs

Fig. 1.1 – Modèle d’un Compilateur

1.3 Les différentes phases d’un compilateur


Un compilateur opère par phase dont chacune transforme le programme source dans une
autre représentation. Le découpage du compilateur est illustré par la figure 1.2.
Programme Source

Analyse Lexicale

Analyse Syntaxique

Analyse Sémantique
Génération des erreurs

Generation du code
intermédiaire

Optimisation du code
intermédiaire et
allocation mémoire

Géneration du code
Objet

Programme Objet

Fig. 1.2 – Différentes Phases d’un Compilateur


1.3.1 Analyse Lexicale
Son role consiste à :
– lire le texte source caractère par caractère ;
– grouper les caractères en une séquence d’unités lexicales ;
– éliminer les commentaires ;
– éliminer les espaces superflus ;
– construire et mettre à jour la table des symboles. Exemple :
– table des identificateurs ;
– table des mots clés ;
– tables des constantes entières, réelles, chaı̂nes,etc.
– table des séparateurs ;
– table des étiquettes, etc.
– codifier les éléments de toutes les tables ;
– signaler les erreurs sans prendre de decisions, etc.

1.3.2 Analyse Syntaxique


Son role consiste à :
– vérifier que la structure de la séquence d’unités lexicales est conforme à la syntaxe du
langage considéré ;
– construire un arbre syntaxique décrivant syntaxiquement le programme analysé.

1.3.3 Analyse sémantique


Son role consiste à :
– verifier que les composants du programme source sont agencés de façon significative
c’est à dire que les phrases obtenues ont un sens ;
– recueillir les informations sur les types des identificateurs et mettre à jour la tables des
symboles ;
– assurer le contrôle des types ;
– vérifier le nombre et les types des arguments au niveau des appels de procédures et des
fonctions ;
– verifier la bonne utilisation des etiquettes.

1.3.4 Génération du Code Intermédiaires


Le compilateur gênera une représentation intermédiaire entre le programme source et le
programme objet. Cette représentation doit être
– facile à produire ;
– facile à traduire en code objet.
1.3.5 Optimisation du Code Intermédiaire
Son role consiste à améliorer le code intermédiaire de tel sorte qu’il en résulte un code
machine qui soit :
– rapide d’execution ;
– occupe moins d’espace mémoire.

Allocation Mémoire
Son role consiste à
– allouer de l’espace mémoire aux entités du programme (identificateurs, tableaux, struc-
tures, etc.)
– faire correspondre à chaque entité une adresse mémoire contenue dans la table des
symboles ;
– organiser l’espace mémoire pour les procédures et les fonctions ;
– substituer chaque occurrence d’un identificateur par son adresse mémoire.

1.3.6 Génération du code objet


Son role consiste à traduire le code du programme source en un code objet et de l’opti-
miser.

1.4 Conclusion
Un compilateur traduit le programme source écrit dans un langage évolué vers un pro-
gramme objet, en plus il vérifie que le programme source fourni par le programmeur respecte
les règles de construction du langage de programmation choisi. Il gênera aussi les erreurs au
niveau de chaque étape de la compilation.

Vous aimerez peut-être aussi