00001 package plp.orientadaObjetos1.expressao.binaria; 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 00018 public class ExpAnd extends ExpBinaria{ 00019 00028 public ExpAnd(Expressao esq, Expressao dir) { 00029 super(esq, dir, "and"); 00030 } 00031 00032 00038 public Valor avaliar(AmbienteExecucao ambiente) 00039 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00040 ObjetoNaoDeclaradoException { 00041 return obterComparacaoAND(ambiente); 00042 } 00043 00055 public boolean checaTipo(AmbienteCompilacao ambiente) 00056 throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException { 00057 00058 boolean result; 00059 if (super.checaTipo(ambiente) && 00060 ((TipoPrimitivo)getEsq().getTipo(ambiente)).eBooleano() && 00061 ((TipoPrimitivo)getDir().getTipo(ambiente)).eBooleano()) { 00062 result = true; 00063 } 00064 else { 00065 result = false; 00066 } 00067 return result; 00068 } 00069 00076 public Tipo getTipo(AmbienteCompilacao ambiente) { 00077 return TipoPrimitivo.TIPO_BOOLEANO; 00078 } 00079 00085 private ValorBooleano obterComparacaoAND(AmbienteExecucao ambiente) 00086 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00087 ObjetoNaoDeclaradoException{ 00088 return new ValorBooleano( 00089 ((ValorBooleano)getEsq().avaliar(ambiente)).valor() && 00090 ((ValorBooleano)getDir().avaliar(ambiente)).valor() 00091 ); 00092 } 00093 }