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

  1. L'énoncé du sujet (modalité et analyse syntaxique)
  2. un squelette de code.
  3. un Une amorce de lexer et de parser..
  4. L'énoncé de la deuxième partie (typage)
  5. L'énoncé de la troisième partie (production de code, mise à jour le 10 avril avec la partie recherche)
  6. Un squelette de fichier type_class.ml avec le code de sélection de méthode.
  7. Des primitives assembleurs à intégrer à votre code
  8. Les fichiers amd64.ml, amd64.mli ainsi que la documentation.
  9. Une introduction à la compilation et à l'architecture AMD64 par Jean-Christophe Filliâtre
  10. 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).