:: Enseignements :: Master :: M2 :: 2012-2013 :: Machine Virtuelle (et bazard autour ...) ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | AST walker |
Le but de ce premier TD est d'implanter un interpréteur pour la langage
Small
en parcourant l'arbre de syntax abstrait (AST).
L'archive au format ZIP contenant une base de code (le lexer, parseur et les classes définissant l'AST)
est disponible
ici
Exercice 1 - Mon premier visiteur
Ce premier exercice va permettre de vous familiariser avec l'écriture de visteur.
Dans le but de vous aidez, un visteur, le PrettyPrinter, qui affiche l'AST sous forme textuelle
est disponible dans l'archive fourni. La classe PrettyPrinterMain vous permet de tester celui-ci.
-
A quoi servent les méthodes reportError et as dans la classe ASTWalkerInterpreter ?
-
A quoi sert la HashMap passée en second paramètre de la méthode evalExpr ?
-
On cherche à implanter les méthodes suffisantes pour exécuter un l'exemple suivant
def main():
"hello"
On supposera pour l'instant qu'il n'y a pas d'autre méthode que main.
-
Comment faire pour que la fonction spécial print soit reconnue ?
def main():
print("hello")
-
On cheche à ajouter la gestion des variables.
Faite en sorte que l'exemple suivant fonctionne.
def main():
a = 7
print("hello", a)
-
Vérifier que le code suivant fonctionne.
def main():
b = a = 7
print("hello", a, b)
-
Vérifier que le code suivant affiche undefined.
def main():
print(a)
-
Implanter les opérations unaires.
Rappel: + et - fonctionne uniquement sur les entiers et ! uniquement sur les booléens.
-
Implanter les opérations binaires.
Rappel: +, -, *, /, %, <, <=, >, >= travail sur des entiers et == et != travail sur tout les types
(e.g. 2 == "hello" est valide et renvoie false).
-
Implanter la syntax du if ?( | )
Attention, le résultat d'un ensemble d'expression est la valeur de la dernière expression ou
undefined si il n'y a pas d'expression.
-
Ecrire le code correspondant à l'appel de fonction
que vous pourrez tester avec les samples fib.small et sums.small.
© Université de Marne-la-Vallée