00001 package plp.functional1.memory; 00002 00003 import java.util.HashMap; 00004 import java.util.Stack; 00005 00006 import plp.expressions2.expression.Id; 00007 import plp.expressions2.expression.Valor; 00008 import plp.expressions2.memory.Contexto; 00009 import plp.expressions2.memory.ContextoExecucao; 00010 import plp.expressions2.memory.VariavelJaDeclaradaException; 00011 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00012 import plp.functional1.util.ValorFuncao; 00013 00014 public class ContextoExecucaoFuncional 00015 implements AmbienteExecucaoFuncional { 00016 00020 private Stack<HashMap<Id, ValorFuncao>> pilhaFuncao; 00021 private ContextoExecucao pilhaIdValor; 00022 private Contexto<ValorFuncao> pilhaIdValorFunc; 00023 00027 public ContextoExecucaoFuncional() { 00028 this.pilhaFuncao = new Stack<HashMap<Id, ValorFuncao>>(); 00029 this.pilhaIdValor = new ContextoExecucao(); 00030 this.pilhaIdValorFunc = new Contexto<ValorFuncao>(); 00031 this.pilhaIdValorFunc.setPilha(this.pilhaFuncao); 00032 } 00033 00034 public void incrementa() { 00035 this.pilhaIdValor.incrementa(); 00036 pilhaFuncao.push(new HashMap<Id, ValorFuncao>()); 00037 } 00038 00039 public void restaura() { 00040 this.pilhaIdValor.restaura(); 00041 pilhaFuncao.pop(); 00042 } 00043 00051 public void mapFuncao(Id idArg, ValorFuncao funcao) 00052 throws VariavelJaDeclaradaException { 00053 this.pilhaIdValorFunc.map(idArg, funcao); 00054 } 00055 00063 public ValorFuncao getFuncao(Id idArg) 00064 throws VariavelNaoDeclaradaException { 00065 return this.pilhaIdValorFunc.get(idArg); 00066 } 00067 00068 public Valor get(Id idArg) throws VariavelNaoDeclaradaException { 00069 return this.pilhaIdValor.get(idArg); 00070 } 00071 00072 public void map(Id idArg, Valor tipoId) throws VariavelJaDeclaradaException { 00073 this.pilhaIdValor.map(idArg, tipoId); 00074 } 00075 00076 }