IfThenElse.java

Go to the documentation of this file.
00001 package plp.functional1.expression;
00002 
00003 import plp.expressions1.util.Tipo;
00004 import plp.expressions2.expression.Expressao;
00005 import plp.expressions2.expression.Valor;
00006 import plp.expressions2.expression.ValorBooleano;
00007 import plp.expressions2.memory.AmbienteCompilacao;
00008 import plp.expressions2.memory.AmbienteExecucao;
00009 import plp.expressions2.memory.VariavelJaDeclaradaException;
00010 import plp.expressions2.memory.VariavelNaoDeclaradaException;
00011 
00012 public class IfThenElse implements Expressao {
00013         Expressao condicao;
00014         Expressao then;
00015         Expressao elseExpressao;
00016 
00017         public IfThenElse(
00018                 Expressao teste,
00019                 Expressao thenExpressao,
00020                 Expressao elseExpressao) {
00021                 this.condicao = teste;
00022                 this.then = thenExpressao;
00023                 this.elseExpressao = elseExpressao;
00024         }
00025 
00026         public Valor avaliar(AmbienteExecucao ambiente)
00027                 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException {
00028                 if (((ValorBooleano) condicao.avaliar(ambiente)).valor())
00029                         return then.avaliar(ambiente);
00030                 else
00031                         return elseExpressao.avaliar(ambiente);
00032         }
00033 
00037         public String toString() {
00038                 StringBuffer sb = new StringBuffer();
00039                 sb.append("if (");
00040                 sb.append(condicao.toString());
00041                 sb.append(") then (");
00042                 sb.append(then.toString());
00043                 sb.append(") else (");
00044                 sb.append(elseExpressao.toString());
00045                 sb.append(")");
00046                 return sb.toString();
00047         }
00048 
00060         public boolean checaTipo(AmbienteCompilacao amb)
00061                 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException {
00062                 boolean result = true;
00063                 if (!condicao.getTipo(amb).eBooleano()) {
00064                         result = false;
00065                 } else if (
00066                         then.getTipo(amb).intersecao(elseExpressao.getTipo(amb)).eVoid()) {
00067                         result = false;
00068                 }
00069                 return result;
00070         }
00071 
00082         public Tipo getTipo(AmbienteCompilacao amb)
00083                 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException {
00084                 return then.getTipo(amb).intersecao(elseExpressao.getTipo(amb));
00085         }
00086 
00091         public Expressao getCondicao() {
00092                 return condicao;
00093         }
00094 
00099         public Expressao getThen() {
00100                 return then;
00101         }
00102 
00107         public Expressao getElseExpressao() {
00108                 return elseExpressao;
00109         }
00110 
00111 }

Generated on Tue Sep 12 21:52:03 2006 for PLP by  doxygen 1.4.7