/** Fichier Launcher.java
*
* Copyright (c) 2006 Universite de Franche-Comte
* Auteurs : A. Giorgetti
*/
public class Launcher {
public static void main(String args[]) throws Exception {
Aritha parser = new Aritha(System.in);
parser.Axiome();
System.out.println("Debut arbre");
Node racine = parser.jjtree.rootNode();
((SimpleNode) racine).dump(" > ");
System.out.println("Fin arbre");
}
}
Fig. 4 – Fichier Launcher.java
Exercice 2.2
1. Ajouter dans les fichiers AST*.java et SimpleNode.java une m´ethode public int eval()
qui ´evalue une expression.
2. Ajouter dans Launcher un appel `a cette m´ethode et faire afficher son r´esultat. Par exemple,
l’expression 4 + 3 devra produire l’affichage :
Valeur de l’expression : 7
Indications pour l’exercice 2.2 Chaque nœud construit h´erite de toutes les m´ethodes d´efinies
dans l’interface Node et implant´ees dans la classe SimpleNode (voir le fichier SimpleNode.java ou
sa documentation). Parmi ces m´ethodes, utiliser :
–int jjtGetNumChildren() qui retourne le nombre de fils d’un nœud.
–Node jjtGetChild(i) qui retourne le (i+ 1)efils d’un nœud, les fils ´etant num´erot´es de 0
`a jjtGetNumChildren() −1.
Exercice 2.3
1. Ajouter dans les fichiers AST*.java,SimpleNode.java et Launcher.java une m´ethode
commut() de transformation des arbres en arbres commut´es, selon les r`egles suivantes :
commut(Entier : n) = Entier : n
commut(Mul x1 ... xn) = Mul commut(xn) ... commut(x1)
commut(Add x y) = Add commut(y) commut(x)
commut(Sub x) = Sub commut(x)
Indications pour l’exercice 2.3
– La m´ethode void jjtAddChild(Node n, int i) de la classe SimpleNode ajoute le fils nen
position i, les fils ´etant num´erot´es `a partir de 0.
– Les constructeurs d’arbres
ASTMul(ArithTreeConstants.JJTMUL) et
ASTAdd(ArithTreeConstants.JJTADD)
cr´eent respectivement un arbre de classe ASTMul et ASTAdd.
– Les constantes statiques JJTMUL et JJTADD sont d´efinies dans le fichier ArithTreeConstants.java.
5