00001 package plp.orientadaObjetos1.comando; 00002 00003 import plp.orientadaObjetos1.excecao.comando.TryCatchException; 00004 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; 00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00006 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException; 00007 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException; 00008 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException; 00009 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException; 00010 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException; 00011 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException; 00012 import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException; 00013 import plp.orientadaObjetos1.expressao.Expressao; 00014 import plp.orientadaObjetos1.expressao.valor.ValorBooleano; 00015 import plp.orientadaObjetos1.memoria.AmbienteCompilacao; 00016 import plp.orientadaObjetos1.memoria.AmbienteExecucao; 00017 import plp.orientadaObjetos1.util.TipoPrimitivo; 00018 00022 public class While implements Comando{ 00026 private Expressao expressao; 00030 private Comando comando; 00036 public While(Expressao expressao, Comando comando){ 00037 this.expressao = expressao; 00038 this.comando = comando; 00039 } 00040 00047 public AmbienteExecucao executar(AmbienteExecucao ambiente) 00048 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00049 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException, 00050 ObjetoJaDeclaradoException, ObjetoNaoDeclaradoException, 00051 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, EntradaInvalidaException, TryCatchException{ 00052 ambiente.incrementa(); 00053 while ( ((ValorBooleano)expressao.avaliar(ambiente)).valor() ) { 00054 ambiente = comando.executar(ambiente); 00055 } 00056 ambiente.restaura(); 00057 return ambiente; 00058 } 00059 00067 public boolean checaTipo(AmbienteCompilacao ambiente) 00068 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00069 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException, 00070 ClasseNaoDeclaradaException, ClasseJaDeclaradaException { 00071 return expressao.checaTipo(ambiente) && 00072 ((TipoPrimitivo)expressao.getTipo(ambiente)).eBooleano() && 00073 comando.checaTipo(ambiente); 00074 } 00075 00076 }