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.ValorBooleano; 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 00015 00019 public class ExpNot extends ExpUnaria{ 00020 00028 public ExpNot(Expressao expressao) { 00029 super(expressao, "~"); 00030 } 00031 00042 public Valor avaliar(AmbienteExecucaoOO1 ambiente) 00043 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00044 ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException{ 00045 return obterValorInverso(ambiente); 00046 } 00047 00059 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00060 throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException { 00061 boolean result; 00062 if (super.checaTipo(ambiente) && 00063 ((TipoPrimitivo)getExp().getTipo(ambiente)).eBooleano()) { 00064 result = true; 00065 } 00066 else { 00067 result = false; 00068 } 00069 return result; 00070 } 00071 00078 public Tipo getTipo(AmbienteCompilacaoOO1 ambiente) { 00079 return TipoPrimitivo.TIPO_BOOLEANO; 00080 } 00081 00088 private ValorBooleano obterValorInverso(AmbienteExecucaoOO1 ambiente) 00089 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00090 ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException{ 00091 return new ValorBooleano(!((ValorBooleano) getExp().avaliar(ambiente)).valor()); 00092 } 00093 }