00001 package plp.orientadaObjetos1.declaracao.procedimento; 00002 00003 import plp.expressions2.memory.VariavelJaDeclaradaException; 00004 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00005 import plp.orientadaObjetos1.comando.Comando; 00006 import plp.orientadaObjetos1.comando.Procedimento; 00007 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; 00008 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00009 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException; 00010 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException; 00011 import plp.orientadaObjetos1.expressao.leftExpression.Id; 00012 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; 00016 public class DecProcedimentoSimples implements DecProcedimento { 00020 private Id nome; 00024 private ListaDeclaracaoParametro parametrosFormais; 00028 private Comando comando; 00035 public DecProcedimentoSimples(Id nome, ListaDeclaracaoParametro parametrosFormais,Comando comando){ 00036 this.nome = nome; 00037 this.parametrosFormais = parametrosFormais; 00038 this.comando = comando; 00039 } 00047 public Procedimento getProcedimento(Id nome) throws ProcedimentoNaoDeclaradoException { 00048 if(this.nome.equals(nome)){ 00049 return new Procedimento(parametrosFormais, comando); 00050 } 00051 else { 00052 throw new ProcedimentoNaoDeclaradoException(nome); 00053 } 00054 } 00063 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00064 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00065 ProcedimentoJaDeclaradoException, ProcedimentoNaoDeclaradoException, 00066 ClasseNaoDeclaradaException,ClasseJaDeclaradaException { 00067 boolean resposta; 00068 if(parametrosFormais.checaTipo(ambiente)) { 00069 ambiente.mapParametrosProcedimento(nome, parametrosFormais); 00070 ambiente.incrementa(); 00071 ambiente = parametrosFormais.declaraParametro(ambiente); 00072 resposta = comando.checaTipo(ambiente); 00073 ambiente.restaura(); 00074 } 00075 else { 00076 resposta = false; 00077 } 00078 return resposta; 00079 } 00080 }