00001 package plp.orientadaObjetos1.comando; 00002 00003 import plp.expressions2.memory.VariavelJaDeclaradaException; 00004 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; 00006 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00007 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException; 00008 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException; 00009 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException; 00010 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException; 00011 import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException; 00012 import plp.orientadaObjetos1.expressao.Expressao; 00013 import plp.orientadaObjetos1.expressao.valor.ValorBooleano; 00014 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; 00015 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1; 00016 import plp.orientadaObjetos1.util.TipoPrimitivo; 00017 00021 public class IfThenElse implements Comando { 00025 private Expressao expressao; 00029 private Comando comandoThen; 00033 private Comando comandoElse; 00040 public IfThenElse (Expressao expressao, Comando comandoThen, Comando comandoElse){ 00041 this.expressao = expressao; 00042 this.comandoThen = comandoThen; 00043 this.comandoElse = comandoElse; 00044 } 00045 00052 public AmbienteExecucaoOO1 executar(AmbienteExecucaoOO1 ambiente) 00053 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00054 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException, 00055 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, 00056 ObjetoJaDeclaradoException, ObjetoNaoDeclaradoException, EntradaInvalidaException { 00057 if ( ((ValorBooleano)expressao.avaliar(ambiente)).valor() ) 00058 return comandoThen.executar(ambiente); 00059 else return comandoElse.executar(ambiente); 00060 } 00061 00069 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00070 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00071 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException, 00072 ClasseJaDeclaradaException, ClasseNaoDeclaradaException { 00073 return expressao.checaTipo(ambiente) && 00074 ((TipoPrimitivo)expressao.getTipo(ambiente)).eBooleano() && 00075 comandoThen.checaTipo(ambiente) && 00076 comandoElse.checaTipo(ambiente); 00077 } 00078 00079 }