:: Enseignements :: ESIPE :: E4INFO :: 2010-2011 :: Génération de code ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Traduction - Correction |
Le but de ce TD sert à préparer la phase de génération de code. L'objectif est de traduire un petit langage dans un autre.
Ressources
Télécharger l'archive
gc-ir2-td4.zip. Importer le répertoire
td4.
Il contient un fichier
td4.ebnf qui reconnait le petit langage du TD précédent. Le fichier de configuration
build.xml permet de générer les classes fondamentales de l'analyseur reconnaissant ce langage.
Placer les répertoires
td4/src et
td4/gen-src dans le sourcepath. Si vous ne l'avez pas déjà fait, importer les répertoires
lib et
build-lib, et placer
lib/tatoo-runtime.jar dans le buildPath.
Exercice 1 - Traduction
-
Lire la classe TypeCheckingVisitor qui est une correction possible du TP précédent.
-
A l'aide d'une HashMap<Node,Type>, modifier le TypeCheckingVisitor afin de sauvegarder le calcul du typage des expressions et variables: associer un type à chaque noeud de l'AST quand c'est possible.
-
Ecrire un visiteur TranslationVisitor qui traduit le code suivant:
let x = 1 + 3*2;
let w = 2 + if(x == 2) 3 else 1;
let z = w - 1;
{
let x = 5;
}
dans le code suivant:
DOUBLE tmp0=3.0*2.0
DOUBLE tmp1=1.0+tmp0
DOUBLE x=tmp1
BOOLEAN tmp2=x==2.0
if (tmp2){
DOUBLE tmp3=3.0
}
else{
DOUBLE tmp3=1.0
}
DOUBLE tmp4=2.0+tmp3
DOUBLE w=tmp4
DOUBLE tmp5=w-1.0
DOUBLE z=tmp5
{
DOUBLE x=5.0
}
TranslatorEnv.java:
TranslationVisitor.java:
Exercice 2 - Fonctions
-
Modifier la grammaire de td4.ebnf pour permettre la définition et l'utilisation de fonctions de la manière suivante:
def myFunction(x,y):x == y;
def myFunction2(x):x*2+3;
let w = myFunction(1.1,2);
let z = myFunction2(3);
- Modifier le visiteur TypeCheckingVisitor. Utiliser une table des symboles pour les variables et une autre pour les noms de fonction.
© Université de Marne-la-Vallée