Vous êtes sur la page 1sur 16

Compilation I.

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

Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e

1/16

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 excutable : e enjoliveurs, diteurs syntaxiques . . . e concepts et outils utiliss dans de nombreux autres domaines : e web, bases de donnes, traitement des langues naturelles . . . e Concepts et outils fondamentaux thorie des langages (grammaires, automates) e smantiques formelles e algorithmes et structures de donnes varis e e principes de gnie logiciel e Vous rencontrerez invitablement un jour ou lautre un e

probl`me de compilation dans votre vie professionnelle e

Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e

2/16

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 ` un autre, par exemple a


prprocesseur : dun sur-langage de L vers L (C par exemple) e assembleur : du langage dassemblage vers le code machine

binaire
diteur de liens : dun ensemble de sous-programmes en binaire e

relogeable (les .o de linux par exemple) vers un programme excutable e compilateur : traduction dun langage source (gnralement) e e

de haut niveau vers un langage de plus bas niveau


dcompilateur : programme qui essaye de reconstruire le e

programme source ` partir du code objet a


Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e 3/16

Compilateur et interpr`te e
donnes e

programme en langage source

COMPILATEUR

programme en langage objet

donnes e

INTERPRETATION programme en langage source forme interne

TRADUCTION

avantages et inconvnients de chaque mod`le e e compilateur : produit du code machine programme ecace mais pas toujours portable interpr`te : programme portable mais moins ecace, mais qui e peut manipuler le code source (mta-programmation) e
Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e 4/16

Compilation croise e
Les traducteurs (compilateurs et interpr`tes) sont des e

programmes comme les autres


ils sont crits dans un certain langage de programmation e la dirence est quils prennent des programmes comme e

donnes et produisent (compilateurs) du code excutable e e compilateur de S vers un code O implant sur une machine X : e

par exemple, compilateur Java sur un PC pour processeur embarqu (S = Java, O = code JVM, X = code intel core) e
compilateur de S vers O sur machine X programme crit en e langage S LANGAGE SOURCE S LANGAGE OBJET O programme excutable e sur machine O

LANGAGE DEXECUTION X

machine X
Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e 5/16

Comment obtenir un compilateur ?


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

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

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

LANGAGE SOURCE S

LANGAGE OBJET O LANGAGE SOURCE E LANGAGE OBJET X

LANGAGE SOURCE S

LANGAGE OBJET O

LANGAGE DECRITURE E

LANGAGE DEXECUTION X

LANGAGE DEXECUTION X

machine X

Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e

6/16

Comment obtenir un auto-compilateur ?


si on veut crire le compilateur dans son propre langage S e crire dabord un compilateur dun sous-ensemble S de S en e E, et le compiler crire ensuite en S le compilateur de S e cest ce quon appelle un bootstrap du compilateur
LANGAGE SOURCE S LANGAGE OBJET O LANGAGE SOURCE E LANGAGE OBJET X LANGAGE SOURCE S LANGAGE OBJET O

LANGAGE DECRITURE E

LANGAGE DEXECUTION X

LANGAGE DEXECUTION X

LANGAGE SOURCE S

LANGAGE OBJET O

machine X

LANGAGE SOURCE S

LANGAGE OBJET O

LANGAGE DECRITURE S

LANGAGE SOURCE S

LANGAGE OBJET O

LANGAGE DEXECUTION O

LANGAGE DEXECUTION X

machine X

Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e

7/16

Compilateurs monolithiques
les premiers compilateurs taient monolitiques : ils pouvaient e

travailler en 1 seule passe (les langages taient encore simples) e autant de compilateurs que de couples (langage, machine cible), soit m n
langage source 1 langage source 1 langage source 2 langage source m langage source m COMPILATEUR 1-1 langage objet 1 langage objet n langage objet n langage objet 1 langage objet n
8/16

COMPILATEUR 1-n

COMPILATEUR 2-n

COMPILATEUR m-1

COMPILATEUR m-n

Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e

Compilateurs modulaires
langage source PARTIE AVANT reprsentation e intermdiaire e PARTIE ` ARRIERE langage objet

partie avant (analyse) : analyses lexicale, syntaxique,

smantique (cours de L3) e partie arri`re (synth`se) : optimisation, production de code e e (cours de M1) avantages de cette dcomposition : m parties avant + n e parties arri`res permettent davoir m n compilateurs e
langage source 1 langage source m PARTIE AVANT 1 reprsentation e intermdiaire e PARTIE AVANT m PARTIE ` ARRIERE 1 PARTIE ` ARRIERE n langage objet 1 langage objet n

le langage objet peut tre celui dune machine virtuelle e

(JVM . . . ) : le programme rsultant sera portable e on peut interprter la reprsentation intermdiaire e e e


Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e 9/16

Schma synthtique de la partie avant e e

demande lanalyse syntaxique

COMPILATEUR

demande lanalyse smantique e

ANALYSEUR SYNTAXIQUE

construit

reprsentation e intermdiaire e

consulte

ANALYSEUR SEMANTIQUE

demande un lex`me e

lex`me e
langage source

TRAITEMENT DES ERREURS

ANALYSEUR LEXICAL

Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e

10/16

Justication 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 quivalents e (identicateurs, nombres . . . ) ce qui justie le pr-traitement (en gnral au vol) du texte e e e source par lanalyseur lexical du point de vue smantique e existence de rfrences en avant (utilisation dun identicateur ee avant sa dclaration par exemple) e unication du traitement de constructions quivalentes e (attr=0 et this.attr=0 par exemple) ou proches (boucles notamment) ce qui justie la mmorisation (sous forme intermdiaire) du e e texte ` compiler a

Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e

11/16

Concepts et structures de donnes utiliss e e


analyse lexicale : langages rguliers, expressions rguli`res, e e e

automates nis pour lessentiel, mais aussi tables dadressage dispers, arithmtique e e
analyse syntaxique : grammaires hors-contexte, automates ` a

pile (analyseurs descendants ou ascendants), attributs smantiques e


analyse smantique : diverses smantiques formelles (mais e e

lanalyse smantique est souvent code ` la main), quations e e a e de type, table de symboles
reprsentation intermdiaire : arbre ou graphe le plus e e

gnralement e e

Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e

12/16

Un exemple
Soit en Java : if (i==0) --ifou ;
analyse lexicale : reconna tre les lex`mes : mot-cl if (mais e e

pas dans lidenticateur ifou), reconna i et ifou comme tre lex`mes de la classe identicateur, 0 comme de la classe des e nombres entiers, -- comme un seul lex`me, et pas la suite - e
analyse syntaxique : analyser le texte selon la r`gle de e

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 de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e

13/16

Un exemple (suite)
Soit en Java : if (i==0) --ifou ; analyse smantique : e
analyse de nom : vrier que i et ifou sont bien dclars, et e e e

dclars comme des variables (ou des attributs) ; met en uvre e e la table des symboles, qui permet de mmoriser les symboles e dclars (en Java, classes, attributs, mthodes, variables e e e locales et param`tres) e analyse de type : vrier que le type de i ou celui de ifou est e compatible avec les oprations eectues ; met en uvre des e e quations de type du genre int == int bool e peut travailler en 1 ou plusieurs parcours de la reprsentation e intermdiaire (selon la complexit du langage) e e peut transformer/enrichir/normaliser la reprsentation e intermdiaire e par exemple, si ifou est un attribut, reprsenter de la mme e e mani`re --ifou et --this.ifou e
Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e 14/16

Proprits dun bon compilateur ee


reconna tout le langage, et rien que le langage (ou alors tre

avoir un mode permettant dinformer des constructions non standards)


sinon, on accepte des programmes non portables

ne pas se restreindre ` des constructions humainement a

lisibles : beaucoup de programmes sont crs par des ee programmes


indiquer de faon claire les erreurs et viter les messages c e

derreur en cascade (bien que la source de lerreur ne soit pas toujours vidente) e
traduire correctement vers le langage cible, et en donnant le

meilleur code possible


tre raisonnablement rapide (utiliser des algorithmes quasi e

linaires) e
Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e 15/16

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 Jerey D. Ullman, Pearson Education, 2007 Compiler Design. Reinhard Wilhelm et Dieter Maurer, Adison-Wesley, 1995. pour les mordus de thorie e The Theory of Parsing, Translation and Compiling (2 volumes). Alfred V. Aho et Jerey D. Ullman, Prentice-Hall 1972 Parsing Theory (2 volumes). Seppo Sippu et Eljas Soisalon-Soininen, Springer-Verlag 1992

Universit de Nice - Sophia Antipolis Licence 3 Informatique 2010-2011 e

16/16