00001 package plp.orientadaObjetos1; 00002 00003 import plp.orientadaObjetos1.comando.Comando; 00004 import plp.orientadaObjetos1.declaracao.classe.DecClasse; 00005 import plp.orientadaObjetos1.excecao.comando.TryCatchException; 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.declaracao.VariavelJaDeclaradaException; 00013 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException; 00014 import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException; 00015 import plp.orientadaObjetos1.excecao.execucao.EntradaNaoFornecidaException; 00016 import plp.orientadaObjetos1.memoria.AmbienteCompilacao; 00017 import plp.orientadaObjetos1.memoria.AmbienteExecucao; 00018 import plp.orientadaObjetos1.memoria.colecao.ListaValor; 00022 public class Programa { 00026 private DecClasse decClasse; 00030 private Comando comando; 00031 00037 public Programa(DecClasse decClasse, Comando comando){ 00038 this.decClasse = decClasse; 00039 this.comando = comando; 00040 } 00041 00054 public ListaValor executar(AmbienteExecucao ambiente) 00055 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00056 ObjetoNaoDeclaradoException, ObjetoJaDeclaradoException, 00057 ProcedimentoJaDeclaradoException,ProcedimentoNaoDeclaradoException, 00058 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, 00059 EntradaNaoFornecidaException, EntradaInvalidaException { 00060 if(ambiente == null) 00061 throw new EntradaNaoFornecidaException(); 00062 ambiente.incrementa(); 00063 try { 00064 ambiente = comando.executar(decClasse.elabora(ambiente)); 00065 } 00066 catch (TryCatchException e) { 00067 System.out.println(e.getMessage()); 00068 } 00069 ambiente.restaura(); 00070 return ambiente.getSaida(); 00071 } 00072 00084 public boolean checaTipo(AmbienteCompilacao ambiente) 00085 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00086 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException, 00087 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, 00088 EntradaNaoFornecidaException{ 00089 boolean resposta; 00090 if(ambiente == null) { 00091 throw new EntradaNaoFornecidaException(); 00092 } 00093 ambiente.incrementa(); 00094 resposta = decClasse.checaTipo(ambiente) && comando.checaTipo(ambiente); 00095 ambiente.restaura(); 00096 return resposta; 00097 } 00098 }