Académique Documents
Professionnel Documents
Culture Documents
Introduction à la Compilation
1 Compilateurs
2 Phases de Compilation
Introduction
Introduction
Messages d’erreur
1. Phases de compilation
PSource
Analyse lexicale
Génération de code
intermédiaire
PCible
PSOURCE
Partie frontale
Partie terminale
PASSEMBLEUR
PSOURCE
Analyse
Partie frontale
Génération de code
intermédiaire
PLI
Générateur de code
Partie terminale machine
PASSEMBLEUR
3. Analyse lexicale
3. Analyse lexicale
Exemple
L’analyse lexicale de l’instruction d’affectation :
position := initiale + vitesse*60
Regroupe les caractères formant cette instruction en des unités
lexicales qui sont les suivantes :
1 L’identificateur position ;
2 Le symbole d’affectation := ;
3 L’identificateur initiale ;
4 Le signe + ;
5 L’identificateur vitesse ;
6 Le signe * ;
7 Le nombre 60 ;
4. Analyse syntaxique
Unité lexicale
PSOURCE
Analyseur Analyseur
Lexical Syntaxique
Obtenir prochaine
unité lexicale
Table des
Symboles
4. Analyse syntaxique
Exemple
L’instruction position := initiale + vitesse*60 est générée par la
grammaire :
P → id := Exp ;
Exp → id|nb|(Exp)|Exp + Exp|Exp ∗ Exp
L’analyse syntaxique génère l’arbre syntaxique suivant :
P
id := Exp
Exp + Exp
id Exp * Exp
id nombre
Yousra Hlaoui (FST) Introduction à la compilation 2017-2018 10 / 19
Phases de Compilation
5. Analyse sémantique
5. Analyse sémantique
Exemple
Une Contrainte sémantique doit être vérifiée :
L’opérateur de multiplication doit être appliqué à deux opérandes de
même type (entier, entier) ou (réel, réel)
Pour notre exemple, Vitesse est un réel et 60 est un nombre entier,
il faut alors convertir 60 d’entier vers réel (60.0)
Var P
position, Initiale, Vitesse : réel;
id := Exp
Analyseur Sémantique
Exp + Exp
Table des id de variables
N° Lexème Type id Exp * Exp
1 Position Réel
id nombre
2 Initiale Réel entier vers réel
3 Vitesse Réel 60 60.0
7. Optimisation de code
Optimisation de code
Cette phase tente d’améliorer le code produit de telle sorte que le
programme résultant soit plus rapide : élimination du code d’une
fonction jamais appelée, propagation des constantes, extraction
des boucles des invariants de boucle.
Exemple
Temp1 := id3 ∗ 60.0 ;
id1 := id2 + Temp1 ;
Exemple
Génération de code intermédiaire (Machine VON NEUMAN)
Machine à registres
MOVF id3, R2
MULF 60.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
9. Phases parallèles
7. Phases parallèles
Générateur automatique
d’analyseur syntaxique
Grammaire non
Analyseur Syntaxique
contextuelle du Yacc Écrit en C ou en LPascal
langage
Générateur automatique
d’analyseur lexical
Description
des unités Analyseur lexical
Lex
lexicales du Écrit en C ou en LPascal
langage