Skip to content

Commit

Permalink
Adicionando modificacoes sugeridas por augusto
Browse files Browse the repository at this point in the history
  • Loading branch information
marcel-reboucas committed Apr 19, 2016
1 parent 4cd0a13 commit a11a34d
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 43 deletions.
4 changes: 2 additions & 2 deletions Funcional1/input
@@ -1,2 +1,2 @@
let fun soma x y = x + y in
soma(5,4)
let fun soma x y = x + y, fun suc z = z+1 in
soma(5,suc(1))
5 changes: 2 additions & 3 deletions Funcional1/src/plp/expressions2/memory/ContextoExecucao.java
@@ -1,19 +1,18 @@
package plp.expressions2.memory;

import java.util.HashMap;
import java.util.Stack;
import java.util.Map.Entry;
import java.util.Stack;

import plp.expressions2.expression.Id;
import plp.expressions2.expression.Valor;
import plp.functional1.memory.ContextoExecucaoFuncional;


public class ContextoExecucao extends Contexto<Valor>
implements AmbienteExecucao {

public ContextoExecucao clone() {
ContextoExecucaoFuncional retorno = new ContextoExecucaoFuncional();
ContextoExecucao retorno = new ContextoExecucao();

Stack<HashMap<Id, Valor>> novaPilha = new Stack<HashMap<Id, Valor>>();

Expand Down
@@ -1,39 +1,58 @@
package plp.functional1.memory;

import java.util.HashMap;
import java.util.Stack;

import plp.expressions2.expression.Id;
import plp.expressions2.expression.Valor;
import plp.expressions2.memory.ContextoExecucao;
import plp.expressions2.memory.VariavelJaDeclaradaException;
import plp.expressions2.memory.VariavelNaoDeclaradaException;
import plp.functional1.util.DefFuncao;

public class ContextoExecucaoFuncional extends ContextoExecucao
implements AmbienteExecucaoFuncional {

/**
* A pilha de blocos de funcao deste contexto.
*/
private Stack<HashMap<Id, DefFuncao>> pilhaFuncao;
public class ContextoExecucaoFuncional implements AmbienteExecucaoFuncional {

private ContextoExecucao contextoExecucao;
private ContextoFuncional contextoFuncional;

/**
* Construtor da classe.
*/
public ContextoExecucaoFuncional() {
pilhaFuncao = new Stack<HashMap<Id, DefFuncao>>();
contextoExecucao = new ContextoExecucao();
contextoFuncional = new ContextoFuncional();
}

public void incrementa() {
super.incrementa();
pilhaFuncao.push(new HashMap<Id, DefFuncao>());
contextoExecucao.incrementa();
contextoFuncional.incrementa();
}

public void restaura() {
super.restaura();
pilhaFuncao.pop();
contextoExecucao.restaura();
contextoFuncional.restaura();
}


/**
* Mapeia o id no valor dado.
*
* @exception VariavelJaDeclaradaException
* se já existir um mapeamento do identificador nesta tabela.
*/
@Override
public void map(Id idArg, Valor tipoId) throws VariavelJaDeclaradaException {
contextoExecucao.map(idArg, tipoId);
}

/**
* Retorna o valor mapeado ao id dado.
*
* @exception VariavelNaoDeclaradaException
* se não existir nenhum valor mapeado ao id dado nesta
* tabela.
*/
@Override
public Valor get(Id idArg) throws VariavelNaoDeclaradaException {
return contextoExecucao.get(idArg);
}

// Remover esse método. Já tem em ContextoExecucao
/**
* Mapeia um identificador em uma funcao.
Expand All @@ -47,10 +66,7 @@ public void restaura() {
*/
public void mapFuncao(Id idArg, DefFuncao funcao)
throws VariavelJaDeclaradaException {
HashMap<Id, DefFuncao> aux = pilhaFuncao.peek();
if (aux.put(idArg, funcao) != null) {
throw new VariavelJaDeclaradaException(idArg);
}
contextoFuncional.map(idArg, funcao);
}

// Remover esse método. Já tem em ContextoExecucao
Expand All @@ -65,22 +81,7 @@ public void mapFuncao(Id idArg, DefFuncao funcao)
* se o id nao estiver declarado.
*/
public DefFuncao getFuncao(Id idArg) throws VariavelNaoDeclaradaException {
DefFuncao result = null;
Stack<HashMap<Id, DefFuncao>> auxStack =
new Stack<HashMap<Id, DefFuncao>>();
while (result == null && !pilhaFuncao.empty()) {
HashMap<Id, DefFuncao> aux = pilhaFuncao.pop();
auxStack.push(aux);
result = aux.get(idArg);
}
while (!auxStack.empty()) {
pilhaFuncao.push(auxStack.pop());
}
if (result == null) {
throw new VariavelNaoDeclaradaException(idArg);
}

return result;
return contextoFuncional.get(idArg);
}

public ContextoExecucaoFuncional clone() {
Expand Down
32 changes: 32 additions & 0 deletions Funcional1/src/plp/functional1/memory/ContextoFuncional.java
@@ -0,0 +1,32 @@
package plp.functional1.memory;

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Stack;

import plp.expressions2.expression.Id;
import plp.expressions2.memory.Ambiente;
import plp.expressions2.memory.Contexto;
import plp.functional1.util.DefFuncao;

public class ContextoFuncional extends Contexto<DefFuncao> implements Ambiente<DefFuncao> {

public ContextoFuncional clone() {
ContextoFuncional retorno = new ContextoFuncional();

Stack<HashMap<Id, DefFuncao>> novaPilha = new Stack<HashMap<Id, DefFuncao>>();

HashMap<Id, DefFuncao> novoMap = new HashMap<Id, DefFuncao>();
novaPilha.add(novoMap);

for (HashMap<Id, DefFuncao> map : this.pilha){
for(Entry<Id, DefFuncao> entry : map.entrySet()){
novoMap.put(entry.getKey(), entry.getValue());
}
}

retorno.setPilha(novaPilha);

return retorno;
}
}
2 changes: 1 addition & 1 deletion Funcional2/input
@@ -1,2 +1,2 @@
let var a = fn x y. x + x in
let var a = fn x y. x + y, fun z c = c+c in
a(1,2)
2 changes: 1 addition & 1 deletion Funcional3/src/plp/functional3/expression/ValorFuncao.java
@@ -1,4 +1,4 @@
package plp.functional3.expression;
package plp.functional3.expression;

import static plp.expressions1.util.ToStringProvider.listToString;

Expand Down

0 comments on commit a11a34d

Please sign in to comment.