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.ValorBooleano; 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 00015 00019 public class ExpNot extends ExpUnaria{ 00020 00028 public ExpNot(Expressao expressao) { 00029 super(expressao, "~"); 00030 } 00031 00042 public Valor avaliar(AmbienteExecucao ambiente) 00043 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00044 ObjetoNaoDeclaradoException{ 00045 return obterValorInverso(ambiente); 00046 } 00047 00059 public boolean checaTipo(AmbienteCompilacao 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(AmbienteCompilacao ambiente) { 00079 return TipoPrimitivo.TIPO_BOOLEANO; 00080 } 00081 00087 private ValorBooleano obterValorInverso(AmbienteExecucao ambiente) 00088 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00089 ObjetoNaoDeclaradoException{ 00090 return new ValorBooleano(!((ValorBooleano) getExp().avaliar(ambiente)).valor()); 00091 } 00092 }