Computer Science Department
Programming Methods Laboratory
(LAMP)
Ecole Polytechnique Federale de Lausanne
Programmation Avancée et Compilation     semestre d'été 2000

Projet - Séance 6 (05.05.2000)

Nouveaux fichiers
Analyseur sémantique
Tests
Lors de cette séance, il vous faut continuer l'implémentation de l'arbre syntaxique, du pretty printer et des actions sémantiques. Ceux d'entre vous qui ont déjà terminé ou qui terminent lors de cette séance peuvent commencer la réalisation de l'analyseur sémantique.

Nouveaux fichiers

Ci-dessous les nouveaux fichiers dont vous aurez besoin pour réaliser l'analyseur sémantique. Attention: avant de pouvoir les compiler, vous devez d'abord rajouter une variable d'instance sym de type JexSymbol à la classe Tree.FunDef. Si votre fichier jex.cup contient une instruction import jex.Tree.*, vous devez également rajouter une instruction import jex.Tree.Import sans quoi vous aurez des conflits entre la classe Import définie ci-dessous et celle définie dans la classe Tree.

Analyseur sémantique

L'analyseur sémantique qu'on vous demande doit réaliser les tâches suivantes:
  • Vérifier que toutes les déclarations et instructions new utilisent des types qui existent (donc soit boolean, int ou une classe importée).
  • Vérifier que l'utilisation d'une variable ou d'une fonction est toujours précédée par une déclaration de cette variable ou fonction.
  • Vérifier que les variables ne sont pas utilisées en tant que fonctions et que les fonctions ne sont pas utilisées en tant que variables.
  • Créer un symbole pour chaque variable et chaque fonction en prenant soin de différencier variables globales et locales.
  • Pour chaque utilisatation de variable ou fonction, déterminer et mémoriser le symbole correspondant.
Votre travail est d'écrire dans la classe Analyzer le code d'analyse pour les noeuds VarDef et FunCall ainsi que pour tous les noeuds que vous avez rajouté à l'arbre qui vous était fourni lors de la quatrième séance.

Tests

Pour tester votre analyseur utilisez le programme AnalyzerTest. Il génère un arbre syntaxique, l'imprime avec le pretty printer puis le fait analyser. Pour le lancer utilisez la commande suivante:
  gmake run.jex.AnalyzerTest < examples/syntax-1.jex
ou, sans utiliser gmake:
  java jex.AnalyzerTest < examples/syntax-1.jex
Le fichier examples/syntax-1.jex ne devrait produire aucune erreur. Il devrait en être de même pour les fichiers examples/tokens.jex et examples/factorial.jex. Pour vérifier que votre analyseur détecte correctement les erreurs, utilisez le fichier suivant: Ce fichier contient de nombreuses erreurs que votre analyseur devrait détecter. Toutes ces erreurs sont signalées en commentaire à l'intérieur du fichier. Le fichier ci-dessous contient le résultat affiché par notre programme. Notez que le contenu des messages d'erreur est arbitraire. Essayez simplement d'être aussi précis que possible.


Teaching
LAMP homepage
Last modified: 04.05.2000, Philippe Altherr <philippe.altherr@epfl.ch>