00001 package plp.orientadaObjetos1; 00002 00003 import plp.expressions2.memory.VariavelJaDeclaradaException; 00004 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00005 import plp.orientadaObjetos1.comando.Comando; 00006 import plp.orientadaObjetos1.declaracao.classe.DecClasse; 00007 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; 00008 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00009 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException; 00010 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException; 00011 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException; 00012 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException; 00013 import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException; 00014 import plp.orientadaObjetos1.excecao.execucao.EntradaNaoFornecidaException; 00015 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; 00016 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1; 00017 import plp.orientadaObjetos1.memoria.colecao.ListaValor; 00021 public class Programa { 00025 private DecClasse decClasse; 00029 private Comando comando; 00030 00036 public Programa(DecClasse decClasse, Comando comando){ 00037 this.decClasse = decClasse; 00038 this.comando = comando; 00039 } 00040 00053 public ListaValor executar(AmbienteExecucaoOO1 ambiente) 00054 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00055 ObjetoNaoDeclaradoException, ObjetoJaDeclaradoException, 00056 ProcedimentoJaDeclaradoException,ProcedimentoNaoDeclaradoException, 00057 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, 00058 EntradaNaoFornecidaException, EntradaInvalidaException { 00059 if(ambiente == null) 00060 throw new EntradaNaoFornecidaException(); 00061 ambiente.incrementa(); 00062 ambiente = comando.executar(decClasse.elabora(ambiente)); 00063 ambiente.restaura(); 00064 return ambiente.getSaida(); 00065 } 00066 00078 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00079 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00080 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException, 00081 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, 00082 EntradaNaoFornecidaException{ 00083 boolean resposta; 00084 if(ambiente == null) { 00085 throw new EntradaNaoFornecidaException(); 00086 } 00087 ambiente.incrementa(); 00088 resposta = decClasse.checaTipo(ambiente) && comando.checaTipo(ambiente); 00089 ambiente.restaura(); 00090 return resposta; 00091 } 00092 }