DeclaracaoProcedimento.java

Go to the documentation of this file.
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 }

Generated on Wed Jul 19 19:07:51 2006 for PLP by  doxygen 1.4.7