00001 package plp.imperative1.command; 00002 00003 import plp.expressions2.expression.Expressao; 00004 import plp.expressions2.expression.Id; 00005 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00006 import plp.expressions2.memory.VariavelJaDeclaradaException; 00007 import plp.imperative1.memory.AmbienteExecucaoImperativa; 00008 import plp.imperative1.memory.AmbienteCompilacaoImperativa; 00009 00010 public class Atribuicao implements Comando { 00011 00012 private Id id; 00013 00014 private Expressao expressao; 00015 00016 public Atribuicao(Id id, Expressao expressao){ 00017 this.id = id; 00018 this.expressao = expressao; 00019 } 00020 00030 public AmbienteExecucaoImperativa executar(AmbienteExecucaoImperativa ambiente) 00031 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException { 00032 ambiente.changeValor(id, expressao.avaliar(ambiente)); 00033 return ambiente; 00034 } 00035 00048 public boolean checaTipo(AmbienteCompilacaoImperativa ambiente) 00049 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException{ 00050 return expressao.checaTipo(ambiente) && 00051 id.getTipo(ambiente).equals(expressao.getTipo(ambiente)); 00052 } 00053 00054 }