Compilation
Laurent Braud
D´
epartement d’Informatique
Laboratoire d’Informatique Fondamentale, Luminy
pageperso.lif.univ-mrs.fr/~laurent.braud/compilation/
Groupe Cours, TD TP
1 Laurent Braud Laurent Braud
2 Janusz Malinowski
Compilateur
Un compilateur est un programme
1qui lit un autre programme r´
edig´
e dans un langage de
programmation, appel´
elangage source
2et qui le traduit dans un autre langage, le langage cible.
Le compilateur signale de plus toute erreur contenue dans le
programme source
Lorsque le programme cible est un programme ex´
ecutable, en
langage machine, l’utilisateur peut ensuite le faire ex´
ecuter afin
de traiter des donn´
ees et de produire des r´
esultats.
Compilateur / interpr´
eteur
programme cible r´
esultat
compilateurinterpr´
eteur
programme source
donn´
ees
Un interpr´
eteur est un programme qui effectue lui-mˆ
eme les
op´
erations sp´
ecifi´
ees par le programme source directement sur les
donn´
ees fournies par l’utilisateur.
Exemple
programme source
program p;
var
d:integer;
function f(a,b:integer)
:integer
var
c,k:integer
begin
k:= a+b;
f:= k;
end;
begin
d:= 7;
write(f(d, 2)+ 1);
end.
programme cible
f: pop $t0
pop $t1
push $ra
add $t2,$t0,$t1
sw $t2,k
sw $t2,f
pop $ra
push $t2
jra
main: li $t0,7
sw $t0,d
push $t0
li $t1,2
push $t2
jla f
pop $t2
...
N´
ecessit´
e d’une analyse syntaxique
A l’exception de quelques cas (rares), la traduction ne peut ˆ
etre
faite “mot `
a mot”
Le programme source doit ˆ
etre d´
ecompos´
eencomposants
pertinents ou constructions du langage source.
La traduction d’une construction d´
epend de la position qu’elle
occupe au sein du programme.
D´
ecomposition d’une d´
efinition de fonction
function f(* nom de la fonction *)
(a,b:integer)(* parametres *)
:integer (* type de retour *)
var (* debut de la decl. des variables *)
c,k:integer (* decl. des variables locales *)
begin (* debut du corps de la fonction *)
k:= (* affectation *)
a+b;(* expression arithmetique *)
f:= k;(* instruction de retour *)
end;(* fin du corps de la fonction *)
Deux parties d’un compilateur
La traduction du programme source en programme cible se
d´
ecompose en deux ´
etapes :
Lanalyse, r´
ealis´
ee par la partie frontale du compilateur, qui
d´
ecoupe le programme source en ses constituants ;
d´
etecte des erreurs de syntaxe ou de s´
emantique ;
produit une repr´
esentation interm´
ediaire du programme source ;
conserve dans une table des symboles diverses informations sur les
proc´
edures et variables du programme source.
La synth`
ese, r´
ealis´
ee par la partie finale du compilateur, quit
construit le programme cible `
a partir de la repr´
esentation
interm´
ediaire et de la table des symboles
Deux parties d’un compilateur
programme cible
s´emantique
repr´
esentation interm´
ediaire
syntaxe
programme source
Nature de la repr´
esentation interm´
ediaire
La conception d’une bonne RI est un compromis :
Elle doit ˆ
etre raisonnablement facile `
a produire `
a partir du
programme source.
Elle doit ˆ
etre raisonnablement facile `
a traduire vers le langage
cible.
Elle doit donc ˆ
etre raisonnablement ´
eloign´
ee (ou raisonnablement
proche) du langage source et du langage cible.
Portabilit´
e
Un compilateur est portable s’il permet de g´
en´
erer du code pour
plusieurs processeurs.
Le recours `
a une RI permet de produire un compilateur portable
en ne multipliant que le g´
en´
erateur de code `
a partir de la RI.
Portabilit´
e
assembleur x86
s´
emantique
assembleur SPARC
s´
emantique
assembleur 68K
s´
emantique
repr´
esentation interm´
ediaire
syntaxe
programme source
Syntaxe du langage source
Le programme source v´
erifie un certain nombre de contraintes
syntaxiques.
L’ensemble de ces contraintes est appel´
egrammaire du langage
source.
Si le programme ne respecte pas la grammaire du langage, il est
consid´
er´
e incorrect et le processus de compilation ´
echoue.
Description de la grammaire du langage source
Litt´
eraire
Un programme est une suite de d´
efinitions de fonction
Une d´
efinition de fonction est compos´
ee
du nom de la fonction suivie de ses arguments
suivie de la declaration de ses variables internes
suivie d’un bloc d’instructions
Une instruction est . . .
Formelle
programme listeDecFonc ’.’
listeDecFonc decFonc listeDecFonc
listeDecFonc
decFonc ID FCT listeParam listeDecVar ’ ;’ instrBloc
...
Grammaires formelles
Les contraintes syntaxiques sont repr´
esent´
ees sous la forme de
r`
egles de r´
e´
ecriture.
La r`
egle ABC nous dit que le symbole A peut se r´
e´
ecrire
comme la suite des deux symboles Bet C.
L’ensemble des r`
egles de r´
e´
ecriture constitue la grammaire du
langage.
La grammaire d’un langage Lpermet de g´
en´
erer tous les
programmes corrects ´
ecrits en Let seulement ceux-ci
Notations et Terminologie
Dans la r`
egle Aα
Aest appel´
epartie gauche de la r`
egle.
αest appel´
epartie droite de la r`
egle.
Lorsque plusieurs r`
egles partagent la mˆ
eme partie gauche :
Aα1,Aα2, . . . , Aαn
On les note :
Aα1|α2|. . . |αn
Grammaire partielle des expressions arithm´
etiques
EXPRESSION EXPRESSION OP2 EXPRESSION
OP2 +|-|*|/
EXPRESSION NOMBRE
EXPRESSION ( EXPRESSION )
NOMBRE CHIFFRE |CHIFFRE NOMBRE
CHIFFRE 0|1|2|3|4|5|6|7|8|9
Les symboles EXPRESSION, OP2, NOMBRE, CHIFFRE sont
appel´
es symboles non terminaux de la grammaire
Les symboles +, -, *, /, (, ), 0, 1 , ..., 9 sont appel´
es symboles
terminaux de la grammaire
Avantages des grammaires formelles
Une grammaire formelle :
Pousse le concepteur d’un langage `
a en d´
ecrire la syntaxe de
mani`
ere exhaustive.
Permet de r´
epondre automatiquement `
a la question
mon programme est-il correct ? `
a l’aide d’un analyseur syntaxique.
Fournit, `
a l’issue de l’analyse, une repr´
esentation explicite de
l’organisation du programme en constructions (structure
syntaxique du programme).
Cette repr´
esentation est utile pour la suite du processus de
compilation.
D´
erivation d’une expression arithm´
etique
L’expression arithm´
etique 2 (3+1)est-elle correcte ?
EXPRESSION EXPRESSION OP2 EXPRESSION
NOMBRE OP2 EXPRESSION
CHIFFRE OP2 EXPRESSION
2OP2 EXPRESSION
2*EXPRESSION
2*(EXPRESSION )
2*(EXPRESSION OP2 EXPRESSION)
2*(NOMBRE OP2 EXPRESSION)
2*(CHIFFRE OP2 EXPRESSION)
2*(3OP2 EXPRESSION)
2*(3+EXPRESSION)
2*(3+NOMBRE)
2*(3+CHIFFRE)
2*(3+1)
Arbre de d´
erivation
EXPRESSION
EXPRESSION
NOMBRE
CHIFFRE
2
OP2
*
EXPRESSION
(EXPRESSION
EXPRESSION
EXPRESSION
NOMBRE
CHIFFRE
3
OP2
+
EXPRESSION
NOMBRE
CHIFFRE
4
)
Analyse lexicale
Afin de simplifier la grammaire d´
ecrivant un langage, on omet
de cette derni`
ere la g´
en´
eration de certaines parties simples du
langage.
Ces derni`
eres sont prises en charge par un analyseur lexical
L’analyseur lexical traite le programme source et fournit le
r´
esultat de son traitement `
a l’analyseur syntaxique.
1 / 12 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !