Cours de Compilation: 2004/2005
Maîtrise d’Informatique
Paris VII
Roberto Di Cosmo
WWW: http://www.dicosmo.org
Modalités du cours
INb cours :
12 (vendredi de 14h30 à 16h30 en Amphi 34A)
INb TD : 12 (début la semaine du 11 Octobre)
IChargés de TD :
Vincent Balat, Juliuz Chroboczeck, Alexandre Miquel
Lundi 16h30-18h30 (J6), Mardi 12h30-14h30 (J4 et J7), Jeudi 16h30-18h30 (J8)
IPartiel projet : mi-décembre
ISoutenance projet : fin décembre
IExamen final : entre le lundi 17 janvier 2005 et le samedi 5 février 2005
INote Janvier :
1
2note projet + 1
2exam Janvier
INote Septembre :
1
2note projet + 1
2exam Septembre
Checklist
Iinscrivez-vous tout de suite sur la mailing list:
http://ufr.pps.jussieu.fr/wws/info/m1-0405-compilation
Imarquez la page web du cours dans vos signets:
http://www.dicosmo.org/CourseNotes/Compilation/
Icommencez à reviser OCaml
Ireflechissez à la composition des groupes pour le projet (maximum 3 personnes)
1
Plan du cours
1. Notions préliminaires : structure d’un compilateur (front-end, back-end, coeur),
description de la machine cible assembleur (RISC 2000)
2. Mise à niveau Ocaml faite exclusivement en TP (langage disponible librement
par ftp depuis l’Inria ftp.inria.fr)
3. Analyse lexicale et syntaxique :
bref rappel sur Lex, Ocamllex, Yacc, Ocamlyacc
4. Arbre de syntaxe abstraite :
structure et représentation
5. Analyse statique : typage (rappels)
6. Structure de la machine d’éxécution pour un langage a blocs
7. Pile des blocs d’activation pour fonctions/variables locales
8. Interface entre front-end et coeur: le code intermediaire (génération, optimisa-
tion, linéarisation)
9. Génération du code assembleur
10. Allocation des régistres
11. Extensions:
Itypage des types recursifs
Iallocation de registres par coloriage de graphes
Icompilation des langages à objets
Icompilation des langages fonctionnels
Imachines virtuelles
Ialgèbre des T pour la génération et le bootstrap des compilateurs
Bibliographie
ICompilers: Principles, Techniques and Tools.
Alfred V. AHO, Ravi SETHI, Jeffrey D. ULLMAN,Addison-Wesley. Version
française en bibliothèque.
IModern Compiler Implementation in ML.
Andrew APPEL,CAMBRIDGE UNIVERSITY PRESS
http://www.cs.princeton.edu/~appel/modern/ml/
Une vingtaine de copies à la bibliothèque.
2
IDéveloppement d’applications avec Objective Caml
Emmanuel CHAILLOUX, Pascal MANOURY, Bruno PAGANO,O’Reilly. Bib-
liothèque et en ligne1.
IManuel Ocaml en ligne: http://caml.inria.fr/ocaml/htmlman/
index.html
ISPIM, un simulateur RISC 2000 http://www.cs.wisc.edu/~larus/
spim.html
Généralités: le terme “compilateur”
compilateur :“Personne qui reunit des documents dispersés” (Le Petit Robert)
compilation :“Rassemblement de documents” (Le Petit Robert)
Mais le programme qui “reunit des bouts de code dispersés” s’appelle aujourd’hui
un Editeur de Liens2
Le terme “compilateur”
On appelle “compilateur” une autre chose:
com·pil·er (Webster)
1: one that compiles
2: a computer program that translates
an entire set of instructions written
in a higher-level symbolic language
(as COBOL3) into machine language before
the instructions can be executed
Qu’est-ce que le “langage machine”?
Notions (abstraites) de base
machine hardware le processeur
machines virtuelle une machine qui reconnait un certain nombre d’instructions qui
ne sont pas toutes “natives” pour la machine hardware.
Ex: le compilateur C produit du code assembleur qui fait appel à un ensemble
de fonctions système (ex.: les E/S). Donc il produit du code pour la machine
virtuelle définie par les instructions hardware, plus les appels système.
On rencontre souvent les machines virtuelles suivantes
1http://www.pps.jussieu.fr/Livres/ora/DA-OCAML/index.html
2ld
3:-)
3
IProgrammes d’application
ILangage de programmation evolué
ILangage d’assemblage
INoyau du système d’exploitation
ILangage machine
Qu’est-ce qu’un interpreteur?
Un programme qui prends en entrée un autre programme, écrit pour une quelque
machine virtuelle, et l’execute sans le traduire.
Ex:
Il’interpréteur VisualBasic,
Ile toplevel Ocaml,
Il’interpreteur PERL,
Il’interpreteur OCaml,
Ietc.
Qu’est-ce qu’un compilateur?
IUn programme, qui traduit un programme écrit dans un langage L dans un pro-
gramme écrit dans un langage L différent de L (en général L est un langage
évolué et L’ est un langage moins expressif).
Quelques exemples:
Compilation des expressions régulières (utilisées dans le shell Unix, les
outils sed, awk, l’éditeur Emacs et les bibliothèques des langages C, Perl
et Ocaml)
Minimisation des automates (compilation d’un automate vers un automate
plus efficace)
De LaTex vers Postscript ou HTML (latex2html/Hevea)
De C vers l’assembleur x86 plus les appels de système Unix/Linux
De C vers l’assembleur x86 plus les appels de système Win32
On peut “compiler” vers une machine. . . interpretée (ex: bytecode Java,
bytecode Ocaml)
4
La décompilation
on va dans le sens inverse, d’un langage moins structuré vers un langage évolué.
Ex: retrouver le source C à partir d’un code compilé (d’un programme C).
Applications:
Irécupération de vieux logiciels
Idécouverte d’API cachées
I...
Ell’est authorisée en Europe à des fins d’interopérabilité
Notions (abstraites) de base, II
Il ne faut pas tricher. . . un compilateur ne doit pas faire de l’interprétation. . .
Pourtant, dans certains cas, il est inevitable de retrouver du code interprété dans le
code compilé
Iprintf("I vaut %d\n",i);
serait à la limite compilable
Is="I vaut %d\n"; printf(s,i);
est plus dur
Ialors que
void error(char *s)
{ printf(s,i);}
devient infaisable
Pause questions . . .
Pourquoi étudier des compilateurs?
Pourquoi construire des compilateurs?
Pourquoi venir au cours?
5
1 / 13 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 !