00001 package plp.orientadaObjetos1.expressao.binaria;
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.ValorString;
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
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(AmbienteExecucaoOO1 ambiente)
00039 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00040 ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException {
00041 return obterResultadoDaConcatenacao(ambiente);
00042 }
00043
00055 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente)
00056 throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException {
00057 boolean result;
00058 if (super.checaTipo(ambiente) &&
00059 ((TipoPrimitivo)getEsq().getTipo(ambiente)).eString() ||
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(AmbienteCompilacaoOO1 ambiente) {
00076 return TipoPrimitivo.TIPO_STRING;
00077 }
00078
00085 private ValorString obterResultadoDaConcatenacao(AmbienteExecucaoOO1 ambiente)
00086 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
00087 ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException{
00088 return new ValorString(
00089 (((Valor)getEsq().avaliar(ambiente))).toString() +
00090 (((Valor) getDir().avaliar(ambiente))).toString());
00091 }
00092 }