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 00015 00019 public class ExpOr extends ExpBinaria { 00020 00029 public ExpOr(Expressao esq, Expressao dir){ 00030 super(esq, dir, "or"); 00031 } 00032 00033 00037 public Valor avaliar(AmbienteExecucao ambiente) 00038 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00039 ObjetoNaoDeclaradoException { 00040 return obterComparacaoOR(ambiente); 00041 } 00042 00054 public boolean checaTipo(AmbienteCompilacao ambiente) 00055 throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException { 00056 boolean result; 00057 if (super.checaTipo(ambiente) && 00058 ((TipoPrimitivo)getEsq().getTipo(ambiente)).eBooleano() && 00059 ((TipoPrimitivo)getDir().getTipo(ambiente)).eBooleano()) { 00060 result = true; 00061 } 00062 else { 00063 result = false; 00064 } 00065 return result; 00066 } 00067 00073 public Tipo getTipo(AmbienteCompilacao ambiente) { 00074 return TipoPrimitivo.TIPO_BOOLEANO; 00075 } 00076 00082 private ValorBooleano obterComparacaoOR(AmbienteExecucao ambiente) 00083 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00084 ObjetoNaoDeclaradoException{ 00085 return new ValorBooleano( 00086 ((ValorBooleano)getEsq().avaliar(ambiente)).valor() || 00087 ((ValorBooleano)getDir().avaliar(ambiente)).valor() ); 00088 } 00089 }