Expression
Expression e1 , e2;
Operateur o;
int eval()
String toString()
Operateur
char c
Entier
int n




/** 
 *
 * @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();
          }
       } 
    }
}

/** * * @author dazy * @version 2000 */ public class Operateur extends Object { public char c; /** Creates new Operateur */ public Operateur(char c) { this.c=c; } }
/** * * @author MR DAZY * @version 2000 */ public class Entier extends Object { public int n; /** Creates new Entier */ public Entier(int n) { this.n=n; } }
/** * * @author dazy * @version */ public class TestExprImpe extends Object { /** * @param args the command line arguments */ public static void main (String args[]) { /** expression 1+2*5-3/2 */ Expression e = new Expression(new Expression(new Entier(1)), '+' , new Expression( new Expression( new Expression( new Entier(2)) , '*' , new Expression(new Entier(5))) , '-' , new Expression(new Entier(3)))); System.out.println(e.toString() + " = " + e.eval()); } }