00001 package plp.orientadaObjetos1.declaracao.procedimento; 00002 00003 import plp.orientadaObjetos1.comando.Comando; 00004 import plp.orientadaObjetos1.comando.Procedimento; 00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; 00006 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00007 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException; 00008 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException; 00009 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException; 00010 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException; 00011 import plp.orientadaObjetos1.expressao.leftExpression.Id; 00012 import plp.orientadaObjetos1.memoria.AmbienteCompilacao; 00016 public class DecProcedimentoSimples implements DecProcedimento { 00020 private Id nome; 00021 00025 private ListaDeclaracaoParametro parametrosFormais; 00026 00030 private Comando comando; 00031 00038 public DecProcedimentoSimples(Id nome, ListaDeclaracaoParametro parametrosFormais,Comando comando){ 00039 this.nome = nome; 00040 this.parametrosFormais = parametrosFormais; 00041 this.comando = comando; 00042 } 00043 00051 public Procedimento getProcedimento(Id nome) throws ProcedimentoNaoDeclaradoException { 00052 if(this.nome.equals(nome)){ 00053 return new Procedimento(parametrosFormais, comando); 00054 } 00055 else { 00056 throw new ProcedimentoNaoDeclaradoException(nome); 00057 } 00058 } 00067 public boolean checaTipo(AmbienteCompilacao ambiente) 00068 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00069 ProcedimentoJaDeclaradoException, ProcedimentoNaoDeclaradoException, 00070 ClasseNaoDeclaradaException,ClasseJaDeclaradaException { 00071 boolean resposta; 00072 if(parametrosFormais.checaTipo(ambiente)) { 00073 ambiente.mapParametrosProcedimento(nome, parametrosFormais); 00074 ambiente.incrementa(); 00075 ambiente = parametrosFormais.declaraParametro(ambiente); 00076 resposta = comando.checaTipo(ambiente); 00077 ambiente.restaura(); 00078 } 00079 else { 00080 resposta = false; 00081 } 00082 return resposta; 00083 } 00084 }