:: Enseignements :: ESIPE :: E4INFO :: 2009-2010 :: Génération de code ::
[LOGO]

Evaluation par Grammar Evaluator


Le but de ce TD est d'implémenter un évaluateur de variables en utilisant un GrammarEvaluator.

Préliminaires

Télécharger et décompresser l'archive gc-ir2-td2.zip. Importer le répertoire td2 dans votre projet eclipse. Mettre à jour les archives tatoo.jar dans le répertoire build-lib et motocity-tatoo.jar dans build-lib/motocity.

Exercice 1 - Evaluation d'expressions arithmétiques

Le but de l'exercice est d'implémenter le même évaluateur que le TP précédent, mais en utilisant un TerminalEvaluator et un GrammarEvaluator.

Exercice 2 - Evaluation de variables

Le but de l'exercice est d'écrire un évaluateur de variables (booléennes et réelles). Par exemple, l'analyseur devra évaluer les variables définies comme dans le code suivant :

			let x = true;
			let y = false != x;
			let zoo1 = 2.4 - 1.2 * 2;
			let zoo2= zoo1 == 2.1;
		
Le code à reconnaître est une séquence d'instructions d'affectation (let var = expr;): var est une variable et expr une expression. Une expression peut contenir des valeurs de types booléen ou réel. Les valeurs sont sous la forme de variables (ex. x et zoo1) ou de constantes (ex. true,false et 2.4). Les opérateurs sont +,- et * (pour les réels) ainsi que == et != (pour tous les deux types).

L'évaluation des variables ci-dessus donnera:
				x = true
				y = true
				zoo1 = 0.0
				zoo2 = false
			

  1. Modifier les règles lexicales et la grammaire de l'exercice précédent pour reconnaître des séquences d'affectations de variables. Ne vous souciez pas, pour l'instant, des contraintes sur les types dans la grammaire !!
  2. Dans l'EBNF, typer maintenant les terminaux et non-terminaux pour la future implémentation du TerminalEvaluator et du GrammarEvaluator. Une expression (expr) sera désormais un Object car elle peut être évaluée soit comme un booléen soit comme un réel.
  3. Préparer le squelette d'un nouvel analyseur en vous basant sur Exo1AnalyzerMain.java et sur les interfaces TerminalEvaluator et et GrammarEvaluator générées à partir du nouvel EBNF.
  4. Implémenter le TerminalEvaluator.
  5. Ecrire une classe Exo2Exception qui implémente une RuntimeException contenant un message d'erreur.
  6. Implémenter le GrammarEvaluator. La méthode acceptStart devra afficher la valeur des différentes variables utilisées.
    Indications:
    • Ecrire et utiliser une méthode double asDouble(Object exp) qui renvoie la valeur de l'objet exp si c'est un Double ou lève une exception Exo2Exception sinon.
    • Utiliser la méthode equals pour tester l'égalité et l'inégalité entre les expressions.
    • Utiliser une HashMap<String,Object> pour stocker les valeurs des variables.