00001 package plp.orientadaObjetos1.expressao.binaria; 00002 00003 import plp.expressions2.memory.VariavelJaDeclaradaException; 00004 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00006 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException; 00007 import plp.orientadaObjetos1.expressao.Expressao; 00008 import plp.orientadaObjetos1.expressao.valor.Valor; 00009 import plp.orientadaObjetos1.expressao.valor.ValorInteiro; 00010 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; 00011 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1; 00012 import plp.orientadaObjetos1.util.Tipo; 00013 import plp.orientadaObjetos1.util.TipoPrimitivo; 00014 00018 public class ExpSoma extends ExpBinaria { 00019 00027 public ExpSoma(Expressao esq, Expressao dir) { 00028 super(esq, dir, "+"); 00029 } 00030 00034 public Valor avaliar(AmbienteExecucaoOO1 ambiente) 00035 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00036 ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException { 00037 return obterResultadoDaSoma(ambiente); 00038 } 00039 00051 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00052 throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException { 00053 boolean result; 00054 if (super.checaTipo(ambiente) && 00055 ((TipoPrimitivo)getEsq().getTipo(ambiente)).eInteiro() && 00056 ((TipoPrimitivo)getDir().getTipo(ambiente)).eInteiro()) { 00057 result = true; 00058 } 00059 else { 00060 result = false; 00061 } 00062 return result; 00063 } 00064 00071 public Tipo getTipo(AmbienteCompilacaoOO1 ambiente) { 00072 return TipoPrimitivo.TIPO_INTEIRO; 00073 } 00074 00081 private ValorInteiro obterResultadoDaSoma(AmbienteExecucaoOO1 ambiente) 00082 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00083 ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException{ 00084 return new ValorInteiro( 00085 ((ValorInteiro) getEsq().avaliar(ambiente)).valor() + 00086 ((ValorInteiro) getDir().avaliar(ambiente)).valor() ); 00087 } 00088 }