Pretty Printer
Dans le cours nous avons parlé le concept des
visiteurs pour séparer la définition des
données des fonctionnalités effectuées
là-dessus. Pour mieux étudier ce concept en pratique,
nous allons réaliser un pretty printer en
utilisant le concept des visiteurs.
Aussi l'analyse de noms et l'interprétation vont
se servir des visiteurs.
Le fichier Printer.java contient
déjà un cadre pour réaliser les méthodes
correspondantes. Le fichier
PrinterTest.java par-contre permet
à tester la fonctionnalité.
Comment procéder
Avant de compiler Printer.java et
PrinterTest.java, il faut ajouter
le cadre pour les visiteurs dans la classe d'arbres Tree,
c-à-d. il faut modifier et recompiler Tree.java.
- Ajoutez l'interface Visitor. Il est conseillé
de choisir le préfix case suivi du nom de la
sous-classe spécifique (voir Printer). Sinon il
faut adapter la classe Printer. Par exemple, la
sous-classe Assign donne la méthode
caseAssign.
- A chaque sous-classe ajoutez une méthode
apply(Visitor v) qui appelle la méthode
correspondante à la classe spécifique. La classe Tree
doit au moins contenir une déclaration abstraite de la
méthode.
Récompilez la classe Tree avec
javac -d classes -classpath classes sources/parser/Tree.java
Maintenant créez un répertoire printer dans
sources, où vous mettez
Printer.java et
PrinterTest.java. Compilez-les avec
javac -d classes -classpath classes sources/printer/*.java
et essayez printer.PrinterTest sur vos exemples de test.
Complétez le code de la classe Printer. La classe
contient une variable offset
pour déterminer la distance souhaité de la
partie de code actuelle du bord gauche de l'écran.
Vous allez remarquer qu'il est nécessaire de rendre publics
les champs dans les sous-classes de Tree (voir aussi
transparents, page 46).
Christine Röckl
Last modified: Wed May 1 16:32:16