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 IfThenElse implements Comando { 00012 00013 private Expressao expressao; 00014 00015 private Comando comandoThen; 00016 00017 private Comando comandoElse; 00018 00019 public IfThenElse (Expressao expressao, Comando comandoThen, Comando comandoElse){ 00020 this.expressao = expressao; 00021 this.comandoThen = comandoThen; 00022 this.comandoElse = comandoElse; 00023 } 00024 00034 public AmbienteExecucaoImperativa executar(AmbienteExecucaoImperativa ambiente) 00035 throws IdentificadorJaDeclaradoException, IdentificadorNaoDeclaradoException, EntradaVaziaException { 00036 if ( ((ValorBooleano)expressao.avaliar(ambiente)).valor() ) 00037 return comandoThen.executar(ambiente); 00038 else return comandoElse.executar(ambiente); 00039 } 00040 00049 public boolean checaTipo(AmbienteCompilacaoImperativa ambiente) 00050 throws IdentificadorJaDeclaradoException, IdentificadorNaoDeclaradoException, EntradaVaziaException { 00051 return expressao.checaTipo(ambiente) && 00052 expressao.getTipo(ambiente).eBooleano() && 00053 comandoThen.checaTipo(ambiente) && 00054 comandoElse.checaTipo(ambiente); 00055 } 00056 00057 }