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