00001 package plp.orientadaObjetos1.expressao.unaria; 00002 00003 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00004 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException; 00005 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException; 00006 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException; 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.AmbienteCompilacao; 00011 import plp.orientadaObjetos1.memoria.AmbienteExecucao; 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(AmbienteExecucao ambiente) 00040 throws VariavelJaDeclaradaException, 00041 VariavelNaoDeclaradaException, ObjetoNaoDeclaradoException { 00042 return obterValorNegativo(ambiente); 00043 } 00044 00056 public boolean checaTipo(AmbienteCompilacao 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(AmbienteCompilacao ambiente) { 00076 return TipoPrimitivo.TIPO_INTEIRO; 00077 } 00078 00084 private ValorInteiro obterValorNegativo(AmbienteExecucao ambiente) 00085 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00086 ObjetoNaoDeclaradoException{ 00087 return new ValorInteiro(- ((ValorInteiro)getExp().avaliar(ambiente)).valor()); 00088 } 00089 }