Vous êtes sur la page 1sur 14

Annie Corbel 1999 1

Compilation
Un compilateur traduit un programme crit en
langage source en un programme quivalent
crit en langage cible ou objet
Programme source Programme cible
messages
d'erreur
listing
compilateur
Annie Corbel 1999 2
Langage cible :
langage machine
assembleur
langage intermdiaire (triplets, quadruplets, pr ou
post fix, ...)
Notation rencontre :
lang. source lang. cible
lang.
d'criture
du compil.
Pascal ASM
C
Annie Corbel 1999 3
Un interprte excute directement un
programme crit en langage source :
Programme source
messages
d'erreur
rsultats
interprte
donnes
lang.
source
lang.
d'criture
de l'interp.
Annie Corbel 1999 4
Compilation de compilateurs
Pascal ASM
C
LM Mac
C
C LM Sun
LM Sun
Pascal ASM
LM Sun
C LM Sun
LM Sun
LM Mac
LM Sun
(excutable de SIM)
Annie Corbel 1999 5
Qualits 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
Annie Corbel 1999 6
Autour du compilateur
prprocesseur
compilateur
gnrateur code
diteur de liens
chargeur
expansion des macros, ex : cpp et #
recherche des librairies
langage source
langage cible
code machine translatable
code machine absolu
Annie Corbel 1999 7
Structure d'un compilateur
Phases d'analyse du texte source
analyse lexicale
analyse syntaxique
analyse smantique
Phases de synthse (gnration du programme cible)
gnration du code intermdiaire
optimisation du code intermdiaire
gnration du code cible
Table des symboles (ident. utiliss et leurs attributs)
f
r
o
n
t
a
l
e
f
i
n
a
l
e
Annie Corbel 1999 8
reprsentation
intermdiaire
code
cible
code
source
erreurs
partie
frontale
partie
finale
dpendant du langage source
indpendant du code cible
indpendant du langage source
dpendant du code cible
TS
Annie Corbel 1999 9
Analyse lexicale : exemple
Analyse linaire du texte source.
Dcoupe les caractres en "lexemes" et rend des
"tokens"
ex : pas : =i ni t +vi t esse*60 car act
ident ident ident nbre
mult
gal
plus
t okens
l exemes
Annie Corbel 1999 10
Analyse syntaxique : exemple
pas : =i ni t +vi t esse*60
regroupe les lexemes en utilisant les rgles de
grammaire - > arbre syntaxique
affectation::=ident :=<expr>
expr::=<expr>+<term>|<term>
term::=<term>*<facteur>|<facteur>
facteur::=ident|entier
affectation
ident expr
expr term +
term term
facteur
*
ident
facteur
:=
ident entier
Annie Corbel 1999 11
Analyse smantique : exemple
pas : =i ni t +vi t esse*60
vrifie que cela a un sens
les oprandes sont-ils de mme type?
60 est un entier et vi t esse est un rel
60 devra tre converti en rel
les oprateurs sont de quel type?
* et + seront des oprations sur rels
pas est-il une variable modifiable?
Annie Corbel 1999 12
Gnration du code intermdiaire :
exemple : pas : =i ni t +vi t esse*60
ex : code 3 adresses
t emp1 <- i nt or eal ( 60)
t emp2 <- i d3 * t emp1
t emp3 <- i d2 + t emp2
i d1 <- t emp3
une instr. par noeud
de l'arbre
un temporaire par
noeud non-racine
:=
ident +
ident
2
*
intoreal ident
entier
1
3
60
Annie Corbel 1999 13
Optimisation : exemple
pas : =i ni t +vi t esse*60
t emp1 <- i nt or eal ( 60)
t emp2 <- i d3 * t emp1
t emp3 <- i d2 + t emp2
i d1 <- t emp3
t emp1 <- i d3 * 60. 0
i d1 <- i d2 + t emp1
Annie Corbel 1999 14
Gnration de code : exemple
pas : =i ni t +vi t esse*60
t emp1 <- i d3 * 60. 0
i d1 <- i d2 + t emp1
LDF R2, i d3
MULF R2, #60. 0
LDF R1, i d2
ADDF R1, R2
STF R1, i d1
allocation des temporaires dans des registres ou en mmoire
choix des instructions (MUL R, 2 vs SHI FT R)