00001 package plp.orientadaObjetos1.comando; 00002 00003 import plp.expressions2.memory.VariavelJaDeclaradaException; 00004 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00005 import plp.orientadaObjetos1.declaracao.Declaracao; 00006 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; 00007 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00008 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException; 00009 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException; 00010 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException; 00011 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException; 00012 import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException; 00013 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; 00014 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1; 00015 00019 public class ComDeclaracao implements Comando { 00023 private Declaracao declaracao; 00027 private Comando comando; 00031 public ComDeclaracao(Declaracao declaracao, Comando comando){ 00032 this.declaracao = declaracao; 00033 this.comando = comando; 00034 } 00035 00043 public AmbienteExecucaoOO1 executar(AmbienteExecucaoOO1 ambiente) 00044 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00045 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException, 00046 ClasseNaoDeclaradaException, ClasseJaDeclaradaException, 00047 ObjetoJaDeclaradoException, ObjetoNaoDeclaradoException, EntradaInvalidaException{ 00048 ambiente.incrementa(); 00049 ambiente = comando.executar(declaracao.elabora(ambiente)); 00050 ambiente.restaura(); 00051 return ambiente; 00052 } 00053 00058 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00059 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00060 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException, 00061 ClasseNaoDeclaradaException, ClasseJaDeclaradaException{ 00062 boolean resposta; 00063 ambiente.incrementa(); 00064 resposta = declaracao.checaTipo(ambiente) && comando.checaTipo(ambiente); 00065 ambiente.restaura(); 00066 return resposta; 00067 } 00068 }