:: Enseignements :: Master :: M2 :: 2014-2015 :: Machine Virtuelle (et bazard autour ...) ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Lab 1 - AST walker |
Le but de ce premier lab est d'implanter un interpréteur pour la langage Script
en parcourant l'arbre de syntax abstrait (AST).
Exercice 1 - AST interpreter
Le but de cet exercice est d'écrire un interpreteur parcourant l'arbre
correspondant à un script du language
Script et affichant sa valeur.
Archive au format ZIP contenant une base de code (le lexer, parseur et les classes définissant l'AST)
vm2015-lab1.zip
La commande
ant compile et créé le JAR executable
script.jar
qui peut être testé avec la commande
java -jar script.jar mon_program_que_je_veux_executer.script
-
Tester le JAR exécutable sur les différents scriptes du répertoire samples.
Que fait-il ?
-
La JAR exécutable execute le code contenu dans la classe Main.
Que font les méthodes Parser.parse et PrettyPrinter.prettyPrint ?
-
Nous allons dans un premier temps, nous intéresser à la classe PrettyPrinter
pour en comprendre sont fonctionnement.
A quoi sert la classe Env ? Quelle est sa responsabilité ?
-
A quoi sert la classe Visitor ?
Si vous ne vous souvenez plus, un petit rappel sur le
Visitor Pattern.
Dans ce cadre, a quoi servent les méthodes when et call
du Visitor ?
A quoi sert la méthode privée print du PrettyPrinter ?
-
On veut maintenant implanter l'interpreteur ASTInterpreter en suivant
le même mode de fonctionnement.
A quoi servent les méthodes evalScript, evalFn et eval ?
-
Que doit on implanter pour que le script suivant fonctionne ?
fn (main:
print(3)
)
-
Qu'affiche le script suivant, est-ce normal ?
fn (main:
print(print(3))
)
-
Verifier aussi que le helloworld fonctionne aussi
fn (main:
print('hello world !')
)
-
Que doit on implanter pour que le script suivant fonctionne ?
fn (main:
a = 3
print(a)
)
-
Verifier que le script suivant fonctionne aussi
fn (main:
b = a = 3
print(a)
print(b)
)
-
Faire en sorte que le script suivant fonctionne
fn (main:
a = 1
print(a + 1)
)
-
On cherche à implanter le 'if', faire en sorte que le script suivant fonctionne
fn (main:
a = 1
b = if(a 23 34)
print(b)
)
-
On cherche à implanter le 'while', faire en sorte que le script suivant fonctionne
fn (main:
a = 0
while(a < 10
print(a)
a = a + 1
)
print('done')
)
-
On souhaite que l'appel de fonction marche.
Faire en sorte que le script suivant fonctionne.
fn(identity x:
x)
fn(main:
print(123)
print('hello')
)
-
Vérifier que les codes suivants ne sont pas valides et lève une exception
Utilisation de variable non définie:
fn(main:
print(a)
)
Utilisation d'une fonction non définie:
fn(main:
foo()
)
-
Vérifier que les codes récursifs fonctionnent, par exemple, avec factoriel
fn (fact x:
if(x == 1 1 fact(n - 1)))
fn(main:
print(fact(5))
)
Exercice 2 - Pour aller plus loin
Le langage
Script support aussi les records et les assignations de-structurantes,
par exemple le code suivant devra fonctionné
fn(main:
a = 2
record = { 1, a }
b, c = record
print(b)
print(c)
Faire en sorte que le code suivant affiche 1 et 2.
© Université de Marne-la-Vallée