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 While implements Comando{ 00025 private Expressao expressao; 00029 private Comando comando; 00035 public While(Expressao expressao, Comando comando){ 00036 this.expressao = expressao; 00037 this.comando = comando; 00038 } 00039 00046 public AmbienteExecucaoOO1 executar(AmbienteExecucaoOO1 ambiente) 00047 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00048 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException, 00049 ObjetoJaDeclaradoException, ObjetoNaoDeclaradoException, 00050 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, EntradaInvalidaException{ 00051 while ( ((ValorBooleano)expressao.avaliar(ambiente)).valor() ) { 00052 ambiente = comando.executar(ambiente); 00053 } 00054 return ambiente; 00055 } 00056 00064 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00065 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00066 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException, 00067 ClasseNaoDeclaradaException, ClasseJaDeclaradaException { 00068 return expressao.checaTipo(ambiente) && 00069 ((TipoPrimitivo)expressao.getTipo(ambiente)).eBooleano() && 00070 comando.checaTipo(ambiente); 00071 } 00072 00073 }