00001 package plp.orientadaObjetos1.declaracao.variavel; 00002 00003 import plp.orientadaObjetos1.excecao.comando.TryCatchException; 00004 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; 00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00006 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException; 00007 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException; 00008 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException; 00009 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException; 00010 import plp.orientadaObjetos1.expressao.leftExpression.Id; 00011 import plp.orientadaObjetos1.memoria.AmbienteCompilacao; 00012 import plp.orientadaObjetos1.memoria.AmbienteExecucao; 00013 import plp.orientadaObjetos1.util.Tipo; 00014 00018 public class CompostaDecVariavel implements DecVariavel{ 00022 private DecVariavel declaracao1; 00026 private DecVariavel declaracao2; 00027 00033 public CompostaDecVariavel(DecVariavel declaracao1, DecVariavel declaracao2){ 00034 this.declaracao1 = declaracao1; 00035 this.declaracao2 = declaracao2; 00036 } 00037 00038 public CompostaDecVariavel(DecVariavel declaracao1) { 00039 this.declaracao1 = declaracao1; 00040 } 00041 00042 public CompostaDecVariavel() { 00043 } 00044 00045 public void setCurrent(DecVariavel declaracao1) { 00046 this.declaracao1 = declaracao1; 00047 } 00048 00049 public DecVariavel getCurrent() { 00050 return this.declaracao1; 00051 } 00052 00053 public void setNext(DecVariavel declaracao2) { 00054 this.declaracao2 = declaracao2; 00055 } 00056 00057 public DecVariavel getNext() { 00058 return this.declaracao2; 00059 } 00060 00068 public Tipo getTipo(Id id) throws VariavelNaoDeclaradaException { 00069 Tipo tipo; 00070 try { 00071 tipo = declaracao1.getTipo(id); 00072 } 00073 catch(VariavelNaoDeclaradaException e) { 00074 tipo = declaracao2.getTipo(id); 00075 } 00076 return tipo; 00077 00078 } 00079 00087 public AmbienteExecucao executar(AmbienteExecucao ambiente) 00088 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00089 ObjetoNaoDeclaradoException, ObjetoJaDeclaradoException, 00090 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, TryCatchException{ 00091 return declaracao2.executar(declaracao1.executar(ambiente)); 00092 } 00093 00102 public boolean checaTipo(AmbienteCompilacao ambiente) 00103 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00104 ClasseNaoDeclaradaException, ClasseJaDeclaradaException { 00105 return declaracao1.checaTipo(ambiente) && declaracao2.checaTipo(ambiente); 00106 } 00107 00108 public String toString() { 00109 String resposta = null; 00110 resposta = this.declaracao1.toString() + ";\n" + this.declaracao2.toString(); 00111 return resposta; 00112 } 00113 }