|
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.
|