Projet de la première partie du cours
Compilation avancée
Master STL - M1
2009-20010
Il vous est demandé de réaliser le projet ML2C ou un autre sujet de la
liste complémentaire.
compilateur ML2C
Ce projet a pour but de constuire un compilateur d'un mini-ML vers C
en reprenant l'architecture et une bonne partie du code du compilateur
ml2java décrit au
cours 3.
Organisation de ml2java
Le programme ml2java, écrit en O'Caml, se décompose de la
manière suivante :
|
module |
fonction |
|
|
|
|
util.ml |
utilitaire |
|
types.ml |
définition des types de mini-ML |
|
alex.mll |
analyseur lexical |
|
asyn.mly |
analyseur syntaxique |
|
typeur.ml |
le typeur |
|
env_typeur |
environnement |
|
intertypeur.ml |
toplevel du typeur |
* |
eval.ml |
évaluateur |
* |
env_eval |
environnement de l'évaluateur |
* |
intereval.ml |
toplevel de l'évaluateur |
* |
env_trans.ml |
environnement du traducteur |
|
lift.ml |
un pseudo λ-lifting |
|
trans.ml |
le traducteur vers un LI |
|
prod.ml |
le traducteur LI vers java |
|
comp.ml |
le compilateur complet |
|
maincomp.ml |
l'analyseur de la ligne de commande |
|
runtime.java |
la bibliothèque d'exécution Java |
|
Les lignes étoilées correspondent à des fichiers inutiles pour
la construction du compilateur. Ils permettent de tester le typeur et
de construire facilement un évaluateur.
On demande de modifier le backend (partie basse) du compilateur de la manière suivante :
-
écrire un runtime C sans se préoccuper de la libération mémoire;
- modifier le générateur de code pour qu'il engendre du code C compatible avec le nouveau runtime;
- modifier l'enchaînement des étapes pour tenir compte de ces changements et
pour produire un exécutable d'un programme mini-ML
Autres projets
-
autre backend :
-
ml2LANG où LANG est un langage de votre choix qui a été accepté
par l'équipe pédagogique que vous contacterez en cliquant
ici.
- runtime C avec GC Mark&Sweep pour tous les types mini-ML
- runtime C avec continuations
- JIT (vers C, x86 ou MIPS) de la machine UM (ICFP'06) - attention sujet difficile
- améliorations ml2java :
-
λ-lifting pour ml2java
- limitation des variables temporaires du code engendré (technique d'allocation de registres)
Rendu
Il est demandé un rapport clair et concis (moins de 10 pages
sans les annexes) présentant la problématique du sujet en guidant le
lecteur par un exemple pertinent. On peut ajouter des annexes à ce
document (en particulier les listings ou des exemples plus complets).
Evaluation
L'évaluation du projet comprend :
-
le rapport du projet
- une archive des implantations
La note du projet sera commune au binôme.
Les rapports et les implantations sont à rendre au plus tard le lundi
06/04/2010 à 16h par courrier électronique en cliquant
ici.
Ce document a été traduit de LATEX par HEVEA