/** * * @author * @version 2000 */ public class Expression extends Object { public Expression e1 , e2; public Operateur o; public Entier valeur; /** Les constructeurs ne figurent pas dans les schémas UML * Ici deux constructeurs pour construire deux sortes d'expressions : * -> les expressions composées (à 3 éléments : deux sous expressions et un opérateur * -> les Expressions simples : seulement un nombre... * Attention les deux types d'expressions sont distincts. */ public Expression(Expression e1 , char o , Expression e2) { this.e1 = e1; this.e2 = e2; this.o = new Operateur(o); this.valeur = null; } public Expression(Entier v) { e1 = null; e2 = null; o = null; valeur = v; } /** * eval() méthode d'évaluation * implante la sémantique structurelle d'évaluation des Expressions... * @return int */ int eval(){ if (valeur != null) { // moyen de distinguer entre expression simple et composée return valeur.intValue(); }else{ char ope=o.c; switch (ope) { // Evaluer au moyen du bon opérateur... case '+' : return e1.eval() + e2.eval(); case '-' : return e1.eval() - e2.eval(); case '*' : return e1.eval() * e2.eval(); default : return e1.eval() / e2.eval(); } } } /** * toString méthode standard d'affichage * implante la sémantique structurelle d'affichage des Expressions... * @return String */ public String toString(){ if (valeur != null) { return ""+valeur.n; }else{ char ope=o.c; switch (ope) { case '+' : return e1.toString() + " + " + e2.toString(); case '-' : return e1.toString() + " - " + e2.toString(); case '*' : return e1.toString() + " * " + e2.toString(); default : return e1.toString() + " / " + e2.toString(); } } } } |