A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena.

Apresentações semelhantes


Apresentação em tema: "Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena."— Transcrição da apresentação:

1 Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena

2 Proposta Desenvolver um Animador Web que execute passo-a-passo programas da Linguagem Funcional 2, mostrando o que ocorre com o ambiente durante a execução. Desenvolver um Editor Web para as Linguagens de PLP

3 Animação / Visualização de Programas Exemplos de Softwares que animam / visualizam programas: Eliot - Anima algoritmos http://www.cs.helsinki.fi/research/aaps/Eliot/ Jeliot – Anima Programas Java http://cs.joensuu.fi/jeliot/

4 O que visualizar A avaliação do programa A avaliação das expressões que compõem o programa O ambiente de Execução Os bindings

5 Estratégia Dividir a execução em passos Cada passo corresponde a uma modificação causada por: A avaliação de uma expressão O incremento do ambiente A restauração do ambiente A introdução de um binding

6 Metas(Requisitos) de Implementação Quanto menos alterar a implementação da linguagem melhor Facilidade de adaptar o animador a novas extensões da Linguagem Funcional 2 Terminar o projeto em 2 semanas

7 Como Implementar? Opções Usando o padrão de projeto Visitor Usando Reflection Usando Java Debug Interface (JDI) Inserindo o código do animador dentro da linguagem A linguagem informa ao animador o que está fazendo.

8 Estrutura do Animador Animador void terminarAvaliacao(Expressao, Valor) void inserirBinding(Id, Valor) void incrementarContexto() void restaurarContexto() List getPassos() Binding AnimadorPassoAmbienteContexto * * *

9 Estrutura do Animador Passo Ambiente ambiente; String avaliacao; String codigo; String valor; Binding AnimadorPassoAmbienteContexto * * *

10 Adaptando o ContextoExecucao public class ContextoExecucao extends Contexto implements AmbienteExecucao { private Animador animador; public Animador getAnimador() { return animador; } public ContextoExecucao() { this.animador = animador; } @Override public void incrementa() { super.incrementa(); animador.incrementarContexto(); } @Override public void map(Id idArg, Valor valorId) throws VariavelJaDeclaradaException { super.map(idArg, valorId); animador.inserirBinding(idArg,valorId); } @Override public void restaura() { super.restaura(); animador.restaurarContexto(); }

11 Adaptando os métodos avaliar() public class ExpSoma extends ExpBinaria { … public Valor avaliar(AmbienteExecucao amb) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { // iniciar a avaliação Animador animador = amb.getAnimador(); // avaliação da expressão da esquerda Valor a = (ValorInteiro)getEsq().avaliar(amb); setExpEsq(a); // avaliação da expressão da direita Valor b = (ValorInteiro) getDir().avaliar(amb); setExpDir(b); // terminar a avaliação Valor c = new ValorInteiro( ((ValorInteiro)a).valor() + ((ValorInteiro)b).valor() ); animador.terminarAvaliacao(this, c); setExpEsq(null); setExpDir(null); return c; }

12 Adaptando os métodos toString() public abstract class ExpBinaria implements Expressao { private Expressao expEsq; private Expressao expDir; public String getExpEsq(){ if (expEsq==null) expEsq = getEsq(); return expEsq.toString(); } public void setExpEsq(Expressao exp) { expEsq = exp; } public String getExpDir(){... } public void setExpDir(Expressao exp) {... } public String toString() { StringBuffer sb = new StringBuffer(); sb.append(getExpEsq().toString()); sb.append(' '); sb.append(operador); sb.append(' '); sb.append(getExpDir().toString()); return sb.toString(); }

13 Executando o programa 1 + 2 + 3 programa animador expr _ + 3expr 1 + 2 avaliar() terminarAvaliacao(expr 1+ 2, 3) toString() [Novo Passo] toString() 3+3 terminarAvaliacao(expr _ +3, 6) [Novo Passo] toString() 6 usuário executar() getAnimador() getPassos() 3 3+3

14 Trabalhos Futuros Melhorar a visualização Incluir as extensões das outras equipes Transformar o animador em um plugin do eclipse (Sugestão de Eduardo Tavares) Implementar o animador usando Aspectos (A animação seria um aspecto). Implementar o animador usando o padrão Visitor Estender o animador para as linguagens Imperativa e Orientada a Objetos

15 Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena


Carregar ppt "Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena."

Apresentações semelhantes


Anúncios Google