:: Enseignements :: ESIPE :: E4INFO :: 2011-2012 :: Génération de code ::
[LOGO]

Projet - Partie 2


Seconde partie du projet, implantation d'un interpreteur.

Alors que la première partie demandait de développer un typechecker, la seconde partie se concentre sur le développement d'un interpreteur dont le but est d'exécuter les scripts.
Pour repartir sur des bases saines (surtout en terme de grammaire), le fichier ZIP contient tout ce qu'il faut pour démarrer: ir2012-td4.zip.
Attention !, éviter le copier/coller entre le projet de la partie 1 et celui de la partie 2, les packages ne sont pas les mêmes !
Comme pour l'exercice précédent, il existe dans le répertoire lib un jar exécutable nommé interpreter-slim.jar qui implante déjà un interpreter. Cela vous permettra de tester la sortie de votre programme par rapport à la sortie de ce jar exécutable. Pour exécuter le jar: java -jar lib/interpreter-slim.jar samples/mon_super_samples.ir2012

Exercice 1 - Implantation d'un interpreter

Le but est d'écrire un visiteur qui va exécuter le code, il vérifiera aussi que les opérations sont possibles de la même façon que le fait le typechecker.
Comparé au typechecker, le fonctionnement est un peut différent, l'interpreteur par du block principale et exécute les fonctions à partir de celui-ci, donc si une fonction n'est pas appelée, elle peut contenir du code qui ne fonctionne pas cela ne doit pas poser de problème. Sinon, alors que le typechecker propageait des types et se souvenait du type des variables locales, un interpreteur propage des valeurs (des Object) et stocke la valeur des variables locales. Enfin, le fonctionnement des break, continue et return est un peu particulier car il faut arrêter les appels recursifs au visiteur pour revenir soit dans la visit de la boucle ou dans celle de l'appel de fonction. On utilise pour cela des exceptions, dans le cas de return l'exception contiendra la valeur de retour.
Donc, comme précédemment il faut fournir une implantation à toute les méthodes visit du visiteur nommé Interpreter (là où il y a des TODOs) mais avant il faut comprendre un peu le code et les classes annexes qui vous ont été founies.
Les commentaires ont aussi été retiré, à vous de les ajouter.

  1. Quelle est le nom des classes qui correspondent respectivement à Env, Symbol et SymbolTable dans le cas de l'interpreteur.
    Notez que ces classes stockent des Object et pas des types.
  2. Ajouter les commentaires de doc pour ces classes.
  3. Quel est le design pattern utilisé dans les classes BreakException et ContinueException ?
Maintenant, passont aux choses sérieuses.