00001 package plp.imperative1.command; 00002 00003 import plp.expressions2.expression.Expressao; 00004 import plp.expressions2.expression.ValorBooleano; 00005 import plp.imperative1.memory.AmbienteExecucaoImperativa; 00006 import plp.imperative1.memory.AmbienteCompilacaoImperativa; 00007 import plp.imperative1.memory.EntradaVaziaException; 00008 import plp.expressions2.memory.IdentificadorJaDeclaradoException; 00009 import plp.expressions2.memory.IdentificadorNaoDeclaradoException; 00010 00011 public class While implements Comando{ 00012 00013 private Expressao expressao; 00014 00015 private Comando comando; 00016 00017 public While(Expressao expressao, Comando comando){ 00018 this.expressao = expressao; 00019 this.comando = comando; 00020 } 00021 00031 public AmbienteExecucaoImperativa executar(AmbienteExecucaoImperativa ambiente) 00032 throws IdentificadorJaDeclaradoException, IdentificadorNaoDeclaradoException, EntradaVaziaException { 00033 while ( ((ValorBooleano)expressao.avaliar(ambiente)).valor() ) { 00034 ambiente = comando.executar(ambiente); 00035 } 00036 return ambiente; 00037 } 00038 00047 public boolean checaTipo(AmbienteCompilacaoImperativa ambiente) 00048 throws IdentificadorJaDeclaradoException, IdentificadorNaoDeclaradoException, EntradaVaziaException { 00049 return expressao.checaTipo(ambiente) && 00050 expressao.getTipo(ambiente).eBooleano() && 00051 comando.checaTipo(ambiente); 00052 } 00053 00054 }