Vous êtes sur la page 1sur 28

Compilation

Introduction à la
compilatio
n
2 BI
IHET
Objectifs
• Présenter les principes de base a la réalisation de compilateurs
( analyse lexicale, syntaxique et semantique et
génération du code)
• Présenter les outils fondamentaux utilisés pour effectuer ces
analyses ( expressions régulières, automates, grammaires,….)

Compilation 2
Plan du module :
• Leçon 1: Introduction à la compilation

• Leçon 2: Analyse lexicale

• Leçon 3: Analyse syntaxique

• Leçon 4: Analyse sémantique

• Leçon 5: Génération de code

Compilation 3
Organisation de la matière
• Présence obligatoire en Cours et TD (éliminatoire)

• Pas de téléphone,

• Questions bienvenues

• Des tests de connaissance courts : bonus sur notepartiel

• Documents, notes de cours interdits en partielexamen,

• Notes de CC: travaux à rendre(cours et TD)

• Examen en Mai

Compilation 4
Un Compilateur
• Tout programme utilise outil essentiel à la réalisation des programmes
un informatiques.

• Un compilateur est un logiciel qui traduit un programme écrit en langage de haut


niveau en instructions exécutables.

• Un compilateur est un programme qui traduit un programme écrit dans un

premier langage en un programme équivalent écrit dans un autre langage (source ->

cible):
 LHN ->LHN
 LBN-> LHN (pirqtqge, récupération de vieux logiciels…)
 Langage quelconque -> langage quelconque (word->HTML, PDF->Ps..

Compilation 5
Un Compilateur vs un interpréteur

Interpréteur = outil qui analyse, traduit, mais aussi exécute un programme écrit dans
un langage informatique.
L’interpréteur se charge donc également de l’exécution au fur et à mesure de son
interprétation.

Compilation 6
Un Compilateur

Compilation 7
Un Compilateur
Un compilateur= vérificateur et traducteur

Compilation 8
Un Compilateur
• Un compilateur signale de plus toute erreur contenue dans le programme

source.

• Qu’est-ce qu’un programme ?


 Description de comment à partir d’une entrée, produire un résultat.
 Le compilateur peut rejeter des programmes qu’il considère
incorrects,
dans le cas contraire, il construit un nouveau programme
(phase statique) que la machine pourra exécuter sur différentes
entrées.
 L’exécution du programme sur une entrée particulière peut ne pas
terminer ou échouer à produire un résultat (phase dynamique).
Compilation 9
Qu’attend-on d’un compilateur ?
(1)
Détection des erreurs :
 Identificateurs mal formés, commentaires non fermés . . .
Constructions syntaxiques incorrectes
 Identificateurs non déclarés
 Expressions mal typées if 3 then "toto" else4.5
 Références non instanciées
 . ..

• Les erreurs détectées à la compilation s’appellent les erreurs statiques.


• Les erreurs détectées à l’exécution s’appellent les erreursdynamiques: division par
zéro, dépassement des bornes dans un tableau. . .

Compilation 10
Qu’attend-on d’un compilateur ?
(2)
Chaque phase peut rencontrer des erreurs. Il faut détecter et informer l’utilisateur le plus
précisément possible.
Plusieurs types d’erreurs :
 Erreurs lexicales : fautes d’orthographe dans un ident ou dans un mot clé ,
caractéres
 illégaux,…
Erreurs syntaxiques : manque de parenthéses dans une expression arithmétique,
erreurs de structures de blocs, manque de séparateur,….
 Erreurs sémantiques : identificateur non déclarée, incompatibilité entre opérateurs et
opérandes,…..
 Erreurs logiques : erreurs arithmétiques : division par zéro, racine carré d’un nombre
négatif, dépassement des limites d’un tableau, boucle infinie,…

Compilation 11
Qu’attend-on d’un compilateur?
(3)
Efficacité
 Le doit êtr si rapide particulier ne
e possible (en pas
compilateur
boucler) doit produir un code qui s’exécutera aussi
e
 Le
rapidement que possible
compilateur
Correction
 Le programme compilé doit représenter le même calcul que le programme
original.

 Nécessite d’avoir une description indépendante des calculs représentés par les
programmes du langage source.

Compilation 12
Phases de compilation

Compilation 13
Phases de compilation
Compilation découpée en 2 étapes
1 L’analyse décompose et identifie les éléments et relations du programme source et
construit son image (représentation hiérarchique du programme avec ses relations),
2 La synthèse qui construit à partir de l’image un programme en langage cible.
Contenu de la table des symboles
Un enregistrement par identificateur du programme à compiler contenant les valeurs des
attributs pour le décrire.
Remarque
En cas d’erreur, le compilateur peut essayer de se resynchroniser pour éventuellement
essayer de reporter d’autres erreurs.

Compilation 14
Phases de compilation
Un compilateur se construit en plusieursphases:
Phase d ’analyse (Partie frontale / En avant)
Analyse syntaxique :
 Transforme une suite un arbre de syntaxe abstraite
de caractères
représentant en des opérations à effectuer.
la description (ast)
 Combinaison de l’analyse lexicale qui reconnait des “mots” aussi appelés token
ou entités et de l’analyse syntaxique qui reconnait des phrases bien formées.

Analyse sémantique : analyse l’arbre de syntaxe abstraite pour calculer de nouvelles


informations permettant de:
• Rejeter des programmes incorrects (portée, typage. . . )
• Préparer la phase de génération de code (organisation de l’environnement,
construction de tables pour les symboles, résolution de la surcharge . . . )

Compilation 15
Phases de compilation

Phase de synthése et de production


•Génération de code : passage par plusieurs langages intermédiaires
pour produire un code efficace issu de la phase d’analyse
 Organisation des appels de fonctions dans des tableaux
d’activation Instructions simplifiées (code à trois
opérandes)
 Analyses de flots
 Allocation de registres
 ...

Compilation 16
Phases de compilation

Compilation 17
Phase
d’analyse
Analyse lexicale (linéaire)
 Reconnaître les types des motslus

Les caractères sont regroupés en unitéslexicales.

Exemple: Enoncé: for i := 1 to vmax do a := a+i;

Suite de lexèmes et d’unités lexicales:


for : MOT_CLE do : MOT_CLE
i : IDENT a : IDENT
:= : AFFECT 1 : :=
ENTIER to :
MOT_CLE : AFFECT a :
vmax : IDENT
IDENT
+:
OP_ARITH
Compilation i : IDENT 18
Phase
d’analyse
Un programme peut être vu comme une “phrase” ; le rôle principal de l’analyse
lexicale est d’identifier les “mots” de la phrase.
Le scanner décompose le programme en lexèmes en identifiant les unités lexicales de
chaque lexème.

Compilation 19
Phase
d’analyse
Définition (Unité lexicale (ou token))
Type générique d’éléments lexicaux (correspond à un ensemble de strings
ayant une sémantique proche).
Exemple : identificateur, opérateur relationnel, mot clé “begin”...

Définition (Lexème (ou string))


Occurrence d’une unité lexicale.
Exemple : N est un lexème dont l’unité lexicale est identificateur

Définition (Modèle (pattern))


Règle décrivant une unité lexicale
En général un modèle est donné sous forme d’expression régulière.

Relation entre lexème, unité lexicale et modèle


unité lexicale = { lexème | modèle(lexème) }

Compilation 20
Phase
d’analyse
Opérateurs des expressions régulières :
 . : concaténation (généralement omis)
 + : union
 *: répétition (0,1,2, ... fois) = (fermeture de Kleene)

Exemple (Quelques expressions régulières)


 chiffre = 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
 nat-nb = chiffre chiffre*
 operateur = < + > + != + == + ...
 par-ouvrante = (
 par-fermante = )
 lettre = a + b + ... + z
 identificateur = lettre (lettre + chiffre)*

Compilation 21
Phase
d’analyse
Exemple (d’unités lexicales et de
lexèmes)

Compilation 22
Phase
d’analyse
Analyse syntaxique(Hiérarchique/Grammaticale)
 Vérifier que les unités lexicales sont dans le bon ordre défini par le
langage
 Découvrir la structure du programme.

Exemple: En C, une sélection simple doit se présenter sous la forme:


If ( expression ) instruction
Si l’analyseur syntaxique reçoit la suite d’unités lexicales:
MOT_CLE

IDENT

OP_REL

ENTIER
Il doit
Compilation signaler une erreur car il n’y a pas ( (parenthèse 23
Phase
d’analyse
Exemple: L’arbre suivant représente la structure de la phrase:
Val:= Val + 20;

Instruction

Affectation

Ident: Val Affect Expression


:=

Ident: Val Op-Ar: + Nombre : 20

Compilation 24
Phase
d’analyse

Compilation 25
Phase
d’analyse
Analyse sémantique (Contextuelle/Vérification de type)
 Vérifier que les variables ont un type correct.
 Cette opération s’effectue en parcourant l’arbre syntaxique et en vérifiant à chaque
niveau que les operations sont correctes.

Exemple : for i := to vmax do a := a+i


Il faut vérifier que la variable i possède bien le type entier ainsi que la variable a est
bien un nombre.

Compilation 26
Phase
d’analyse

Compilation 27
Phase
d’analyse

Compilation 28

Vous aimerez peut-être aussi