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.ValorString; 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 00020 public class ExpConcat extends ExpBinaria{ 00021 00022 00031 public ExpConcat(Expressao esq, Expressao dir){ 00032 super(esq, dir, "++"); 00033 } 00034 00038 public Valor avaliar(AmbienteExecucao ambiente) 00039 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00040 ObjetoNaoDeclaradoException { 00041 return obterResultadoDaConcatenacao(ambiente); 00042 } 00043 00055 public boolean checaTipo(AmbienteCompilacao ambiente) 00056 throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException { 00057 boolean result; 00058 if (super.checaTipo(ambiente) && 00059 ((TipoPrimitivo)getEsq().getTipo(ambiente)).eString() ||//we changed && to || 00060 ((TipoPrimitivo)getDir().getTipo(ambiente)).eString()) { 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_STRING; 00077 } 00078 00084 private ValorString obterResultadoDaConcatenacao(AmbienteExecucao ambiente) 00085 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00086 ObjetoNaoDeclaradoException{ 00087 return new ValorString( 00088 (((Valor)getEsq().avaliar(ambiente))).toString() + 00089 (((Valor) getDir().avaliar(ambiente))).toString()); 00090 } 00091 }