TER collectif : Compilation de Java vers AMD64
Rendu du TER
Vous pouvez déposer votre TER au moyen du formulaire suivant.
But du TER
Le but de ce TER est d'approfondir les concepts vus en cours
de Compilation. Le TER se déroule en deux parties. Lors de la
première partie, vous implémentez en binôme un compilateur
minimal d'un fragment de Java vers AMD64. Le tout constituera
1/3 de la note
du TER.
La deuxième partie consistera en un travail bibliographique sur
une fonctionnalité de compilation. Vous devrez rendre un rapport
expliquant la difficulté d'implémenter cette fonctionnalité en
général, les différentes techniques avec leur avantages et
inconvénients. Vous devrez aussi implémenter une version simple
de la fonctionnalité. Des exemples de fonctionnalité sont
l'allocation de registres, l'écriture d'un garbage
collector, la compilation vers Javascript pour exécuter dans
le navigateur, … Cette
deuxième partie compte pour 1/3 de la écrite du TER.
La première partie se découpe en trois phases : analyse lexicale
et syntaxique, typage et production de code. À chaque fois du
code vous sera donné et les séances de TP servent à l'écriture
du code et au support technique en OCaml.
Le TER se concluera par une soutenance qui comptera pour 1/3 de la note du TER..
Énoncés
- L'énoncé du sujet (modalité et analyse syntaxique)
- un squelette de code.
- un Une amorce de lexer et de parser..
- L'énoncé de la deuxième partie (typage)
- L'énoncé de la troisième partie (production de code, mise à jour le 10 avril avec la partie recherche)
- Un squelette de fichier type_class.ml avec le code de sélection de méthode.
- Des primitives assembleurs à intégrer à votre code
- Les fichiers amd64.ml, amd64.mli ainsi que la documentation.
- Une introduction à la compilation et à l'architecture AMD64 par Jean-Christophe Filliâtre
- Une petite référence x86-64 par Andrew Tolmach, professeur à Portland State University
Compilateur de référence
Vous pouvez tester votre compilateur en le comparant à javac. Si votre compilateur accepte un programme, alors javac doit l'accepter aussi. Si javac refuse un programme votre compilateur doit le refuser aussi (par contre, des programmes Java faux pour vous peuvent être acceptés par javac, qui gère plus de fonctionnalités).