00001 package plp.orientadaObjetos1.expressao.unaria; 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 ExpMenos extends ExpUnaria { 00019 00025 public ExpMenos(Expressao expressao){ 00026 super(expressao, "-"); 00027 } 00028 00039 public Valor avaliar(AmbienteExecucaoOO1 ambiente) 00040 throws VariavelJaDeclaradaException, 00041 VariavelNaoDeclaradaException, ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException { 00042 return obterValorNegativo(ambiente); 00043 } 00044 00056 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00057 throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException { 00058 boolean result; 00059 if (super.checaTipo(ambiente) && 00060 ((TipoPrimitivo)getExp().getTipo(ambiente)).eInteiro()) { 00061 result = true; 00062 } 00063 else { 00064 result = false; 00065 } 00066 return result; 00067 } 00068 00075 public Tipo getTipo(AmbienteCompilacaoOO1 ambiente) { 00076 return TipoPrimitivo.TIPO_INTEIRO; 00077 } 00078 00085 private ValorInteiro obterValorNegativo(AmbienteExecucaoOO1 ambiente) 00086 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00087 ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException{ 00088 return new ValorInteiro(- ((ValorInteiro)getExp().avaliar(ambiente)).valor()); 00089 } 00090 }