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 ExpSub extends ExpBinaria { 00019 00028 public ExpSub(Expressao esq, Expressao dir) { 00029 super(esq, dir, "-"); 00030 } 00031 00035 public Valor avaliar(AmbienteExecucaoOO1 ambiente) 00036 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00037 ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException { 00038 return obterResultadoDaSubtracao(ambiente); 00039 } 00040 00052 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00053 throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException { 00054 boolean result; 00055 if (super.checaTipo(ambiente) && 00056 ((TipoPrimitivo)getEsq().getTipo(ambiente)).eInteiro() && 00057 ((TipoPrimitivo)getDir().getTipo(ambiente)).eInteiro()) { 00058 result = true; 00059 } 00060 else { 00061 result = false; 00062 } 00063 return result; 00064 } 00065 00072 public Tipo getTipo(AmbienteCompilacaoOO1 ambiente) { 00073 return TipoPrimitivo.TIPO_INTEIRO; 00074 } 00075 00082 private ValorInteiro obterResultadoDaSubtracao(AmbienteExecucaoOO1 ambiente) 00083 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00084 ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException{ 00085 return new ValorInteiro( 00086 ((ValorInteiro)getEsq().avaliar(ambiente)).valor() - 00087 ((ValorInteiro)getDir().avaliar(ambiente)).valor()); 00088 } 00089 }