Vous êtes sur la page 1sur 17

Compilation

I. Introduction
Jacques Farre
Jacques.Farre@unice.fr
http://deptinfo.unice.fr/~jf/Compil-L3/

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

1/17

Plan du cours et modalites de contole


le cours comprend 3 parties
introduction et analyse lexicale (3 s
eances)
analyse syntaxique (5 s
eances)
analyse s
emantique et interpretation (4 seances)
contr
oles
1 examen final de 2h (40%)
projet (30%, fait en grande partie pendant les TPs ; lactivit
e
en TP sera prise en compte dans cette note)
3 interrogations en TD de 30 mn (30%)
18 fevrier (analyse lexicale)
25 mars (analyse syntaxique)
6 mai (analyse semantique et interpretation)
pr
esence aux TDs et TPs obligatoire (sinon malus)

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

2/17

Introduction
Compilation : traduction dun langage dans un autre
pas seulement des langages de programmation : langages de
script, dinterrogation, de description (LaTeX, XML . . . )
pas seulement pour obtenir un programme ex
ecutable :
enjoliveurs, editeurs syntaxiques . . .
concepts et outils utilis
es dans de nombreux autres domaines :
web, bases de donnees, traitement des langues naturelles . . .
Concepts et outils fondamentaux
th
eorie des langages (grammaires, automates)
s
emantiques formelles
algorithmes et structures de donn
ees varies
principes de g
enie logiciel
Vous rencontrerez in
evitablement un jour ou lautre un

probl`eme de compilation dans votre vie professionnelle

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

3/17

Terminologie
langage source : celui quil faut analyser
langage objet : celui vers lequel il faut traduire
langage machine ou dassemblage : langage machine sous

forme symbolique
traducteur : passage dun langage `
a un autre, par exemple
pr
eprocesseur : dun sur-langage de L vers L (C par exemple)
assembleur : du langage dassemblage vers le code machine

binaire

editeur de liens : dun ensemble de sous-programmes en binaire

relogeable (les .o de linux par exemple) vers un programme


executable
compilateur : traduction dun langage source (g
eneralement)

de haut niveau vers un langage de plus bas niveau


d
ecompilateur : programme qui essaye de reconstruire le

programme source `a partir du code objet


Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

4/17

Compilateur et interpr`ete
donn
ees

programme
en langage
source

COMPILATEUR

programme
en langage
objet

donn
ees

INTERPRETATION
programme
en langage
source

forme
interne

TRADUCTION

avantages et inconv
enients de chaque mod`ele
compilateur : produit du code machine programme efficace
mais pas toujours portable
interpr`
ete : programme portable mais moins efficace, mais qui
peut manipuler le code source (meta-programmation)
Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

5/17

Compilation croisee
Les traducteurs (compilateurs et interpr`
etes) sont des

programmes comme les autres


ils sont
ecrits dans un certain langage de programmation
la diff
erence est quils prennent des programmes comme

donnees et produisent (compilateurs) du code executable


Diagramme en T :

Compilateur de S
vers un code O
implante sur
une machine X :

compilateur de S vers O sur machine X


programme

ecrit en
langage S

par exemple, compilateur Objective C sur un


PC pour processeur embarque

LANGAGE
SOURCE S

LANGAGE
OBJET O

programme
ex
ecutable
sur machine O

LANGAGE
DEXECUTION X

machine X

compilateur de Objective C pour processeur ARM


compilation sur machine Intel
programme en
Objective C

Objective C Code ARM

programme en
code ARM

Compilateur
en code 80x86
PC

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

6/17

Comment obtenir un compilateur ?


on l
ecrit dans un langage E (de haut niveau si possible)
on suppose quon dispose dun compilateur de ce langage sur

une machine X
par exemple, un compilateur de Java
ecrit en C sur un PC :

S = Java, O = JVM, E = langage C, X = code intel core

LANGAGE

LANGAGE

LANGAGE

LANGAGE

SOURCE S

OBJET O

SOURCE S

OBJET O

LANGAGE
DECRITURE E

LANGAGE

LANGAGE

LANGAGE

SOURCE E

OBJET X

DEXECUTION X

LANGAGE
DEXECUTION X

machine X

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

7/17

Comment obtenir un auto-compilateur ?


si on veut
ecrire le compilateur dans son propre langage S

ecrire dabord un compilateur dun sous-ensemble S de S en
E, et le compiler

ecrire ensuite en S le compilateur de S
cest ce quon appelle un bootstrap du compilateur
LANGAGE

LANGAGE

LANGAGE

LANGAGE

SOURCE S

OBJET O

SOURCE S

OBJET O

LANGAGE
DECRITURE E

LANGAGE

LANGAGE

SOURCE E

OBJET X

LANGAGE
DEXECUTION X

LANGAGE
DEXECUTION X

LANGAGE

LANGAGE

SOURCE S

OBJET O

machine X

LANGAGE

LANGAGE

LANGAGE

DECRITURE S

SOURCE S

OBJET O

LANGAGE

LANGAGE

SOURCE S

OBJET O

LANGAGE
DEXECUTION O

LANGAGE
DEXECUTION X

machine X

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

8/17

Compilateurs monolithiques
les premiers compilateurs
etaient monolitiques : ils pouvaient

travailler en 1 seule passe (les langages etaient encore simples)


autant de compilateurs que de couples (langage, machine
cible), soit m n
langage
source 1

COMPILATEUR 1-1

langage
objet 1

langage
source 1

COMPILATEUR 1-n

langage
objet n

langage
source 2

COMPILATEUR 2-n

langage
objet n

langage
source m

COMPILATEUR m-1

langage
objet 1

langage
source m

COMPILATEUR m-n

langage
objet n

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

9/17

Compilateurs modulaires
langage
source

PARTIE
AVANT

repr
esentation
interm
ediaire

PARTIE
`
ARRIERE

langage
objet

partie avant (analyse) : analyses lexicale, syntaxique,

semantique (cours de L3)


partie arri`
ere (synth`ese) : optimisation, production de code
(cours de M1)
avantages de cette d
ecomposition : m parties avant + n
parties arri`eres permettent davoir m n compilateurs
langage
source 1

PARTIE
AVANT 1

langage
source m

PARTIE
AVANT m

repr
esentation
interm
ediaire

PARTIE
`
ARRIERE
1

langage
objet 1

PARTIE

langage
objet n

`
ARRIERE
n

le langage objet peut


etre celui dune machine virtuelle

(JVM . . . ) : le programme resultant sera portable


on peut interpr
eter la representation intermediaire
Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

10/17

Schema synthetique de la partie avant

COMPILATEUR

demande
lanalyse
syntaxique

ANALYSEUR
SYNTAXIQUE

demande
un lex`eme

construit

repr
esentation
interm
ediaire

renvoie un
lex`
eme

ANALYSEUR
LEXICAL

demande
lanalyse
semantique

consulte

ANALYSEUR

SEMANTIQUE

TRAITEMENT
DES ERREURS
langage
source

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

11/17

Justification de larchitecture de la partie avant


du point du vue lexico-syntaxique
le programme source est plein de bruits (espaces inutiles,
commentaires . . . )
pour la grammaire, de nombreux symboles sont
equivalents
(identificateurs, nombres . . . )
ce qui justifie le pr
e-traitement (en general au vol) du texte
source par lanalyseur lexical
du point de vue s
emantique
existence de r
eferences en avant (utilisation dun identificateur
avant sa declaration par exemple)
unification du traitement de constructions
equivalentes
(attr=0 et this.attr=0 par exemple) ou proches (boucles
notamment)
ce qui justifie la m
emorisation (sous forme intermediaire) du
texte `a compiler

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

12/17

Concepts et structures de donnees utilises


analyse lexicale : langages r
eguliers, expressions reguli`eres,

automates finis pour lessentiel, mais aussi tables dadressage


disperse, arithmetique
analyse syntaxique : grammaires hors-contexte, automates `
a

pile (analyseurs descendants ou ascendants), attributs


semantiques
analyse s
emantique : diverses semantiques formelles (mais

lanalyse semantique est souvent codee `a la main), equations


de type, table de symboles
repr
esentation interm
ediaire : arbre ou graphe le plus

generalement

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

13/17

Un exemple
Soit en Java : if (i==0) --ifou;
analyse lexicale : reconnatre les lex`
emes : mot-cle if (mais

pas dans lidenticateur ifou), reconnatre i et ifou comme


lex`emes de la classe identificateur, 0 comme de la classe des
nombres entiers, -- comme un seul lex`eme, et pas la suite - analyse syntaxique et repr
esentation interm
ediaire :

analyser le texte selon la r`egle de grammaire :


instruction MOT-IF ( condition ) instruction
et construire (par exemple) un sous-arbre comme
IF

sous-arbre de
la condition

sous-arbre de
linstruction

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

14/17

Un exemple (suite)
Soit en Java : if (i==0) --ifou;
analyse s
emantique :
analyse de nom : v
erifier que i et ifou sont bien declares, et

declares comme des variables (ou des attributs) ; met en uvre


la table des symboles, qui permet de memoriser les symboles
declares (classes, attributs, methodes, variables locales et
param`etres . . . )
analyse de type : v
erifier que le type de i ou celui de ifou est
compatible avec les operations effectuees ; met en uvre des
equations de type du genre int == int bool
peut travailler en 1 ou plusieurs parcours de la repr
esentation
intermediaire (selon la complexite du langage)
peut transformer/enrichir/normaliser la repr
esentation
intermediaire
par exemple, si ifou est un attribut, representer de la meme
mani`ere --ifou et --this.ifou
Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

15/17

Proprietes dun bon compilateur


Reconnatre tout le langage, et rien que le langage (ou alors

avoir un mode permettant dinformer des constructions non


standards)
sinon, on accepte des programmes non portables

Ne pas se restreindre `
a des constructions humainement

lisibles : beaucoup de programmes sont crees par des


programmes
Indiquer de facon claire les erreurs et
eviter les messages

derreur en cascade (bien que la source de lerreur ne soit pas


toujours evidente)
Traduire correctement vers le langage cible, et en donnant le

meilleur code possible

Etre
raisonnablement rapide (utiliser des algorithmes quasi
lineaires)
Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

16/17

Bibliographie
Les bases
Compilateurs. Dick Grune , Henry E. Bal , Ceriel J.H. Jacobs ,
Koen G. Langendoen, Dunod 2002
Compilateurs - Principes, techniques et outils - Avec plus de
200 exercices. Alfred Aho, Monica Lam, Ravi Sethi et Jeffrey
D. Ullman, Pearson Education, 2007
Compiler Design. Reinhard Wilhelm et Dieter Maurer,
Adison-Wesley, 1995.
Pour les mordus de th
eorie
The Theory of Parsing, Translation and Compiling (2 volumes).
Alfred V. Aho et Jeffrey D. Ullman, Prentice-Hall 1972
Parsing Theory (2 volumes). Seppo Sippu et Eljas
Soisalon-Soininen, Springer-Verlag 1992

Universit
e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

17/17