00001 package plp.imperative2.declaration; 00002 00003 import plp.expressions2.expression.Id; 00004 import plp.expressions2.memory.IdentificadorJaDeclaradoException; 00005 import plp.expressions2.memory.IdentificadorNaoDeclaradoException; 00006 import plp.imperative1.declaration.Declaracao; 00007 import plp.imperative1.memory.AmbienteCompilacaoImperativa; 00008 import plp.imperative1.memory.AmbienteExecucaoImperativa; 00009 import plp.imperative1.memory.EntradaVaziaException; 00010 import plp.imperative2.memory.AmbienteCompilacaoImperativa2; 00011 import plp.imperative2.memory.AmbienteExecucaoImperativa2; 00012 import plp.imperative2.memory.Procedimento; 00013 00014 public class DeclaracaoProcedimento extends Declaracao<Id, DefProcedimento> { 00015 00016 private ListaDeclaracaoParametro parametrosFormais; 00017 00018 public DeclaracaoProcedimento(Id nome, DefProcedimento defProcedimento) { 00019 super(nome, defProcedimento); 00020 this.parametrosFormais = defProcedimento.getParametrosFormais(); 00021 } 00022 00023 public AmbienteExecucaoImperativa elabora( 00024 AmbienteExecucaoImperativa ambiente) 00025 throws IdentificadorJaDeclaradoException, 00026 IdentificadorNaoDeclaradoException, EntradaVaziaException { 00027 ((AmbienteExecucaoImperativa2) ambiente).mapProcedimento(parametro1,new Procedimento(parametrosFormais, parametro2)); 00028 return ambiente; 00029 } 00030 00031 public boolean checaTipo(AmbienteCompilacaoImperativa amb) 00032 throws IdentificadorJaDeclaradoException, 00033 IdentificadorNaoDeclaradoException, EntradaVaziaException { 00034 boolean resposta; 00035 AmbienteCompilacaoImperativa2 ambiente = (AmbienteCompilacaoImperativa2) amb; 00036 if (parametrosFormais.checaTipo(ambiente)) { 00037 ambiente.mapParametrosProcedimento(parametro1, parametrosFormais); 00038 ambiente.incrementa(); 00039 ambiente = parametrosFormais.declaraParametro(ambiente); 00040 resposta = parametro2.getComando().checaTipo(ambiente); 00041 ambiente.restaura(); 00042 } else { 00043 resposta = false; 00044 } 00045 return resposta; 00046 } 00047 }