Animador para a Linguagem Funcional 2 Carlos Eduardo
- Slides: 15
Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena
Proposta p 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. p Desenvolver um Editor Web para as Linguagens de PLP
Animação / Visualização de Programas p Exemplos de Softwares que animam / visualizam programas: n Eliot - Anima algoritmos p n http: //www. cs. helsinki. fi/research/aaps/Eliot/ Jeliot – Anima Programas Java p http: //cs. joensuu. fi/jeliot/
O que visualizar A avaliação do programa p A avaliação das expressões que compõem o programa p O ambiente de Execução p Os bindings p
Estratégia Dividir a execução em passos p Cada passo corresponde a uma modificação causada por: p n n A avaliação de uma expressão O incremento do ambiente A restauração do ambiente A introdução de um binding
Metas(Requisitos) de Implementação p Quanto menos alterar a implementação da linguagem melhor p Facilidade de adaptar o animador a novas extensões da Linguagem Funcional 2 p Terminar o projeto em 2 semanas
Como Implementar? p Opções n n n 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.
Estrutura do Animador p Animador n void terminar. Avaliacao(Expressao, Valor) n void inserir. Binding(Id, Valor) n void incrementar. Contexto() n void restaurar. Contexto() n List<Passo> get. Passos() * Passo Ambiente * Contexto * Binding
Estrutura do Animador p Passo n Ambiente ambiente; n String avaliacao; n String codigo; n String valor; * Passo Ambiente * Contexto * Binding
Adaptando o Contexto. Execucao public class Contexto. Execucao extends Contexto<Valor> implements Ambiente. Execucao { private Animador animador; public Animador get. Animador() { return animador; } public Contexto. Execucao() { this. animador = animador; } @Override public void incrementa() { super. incrementa(); animador. incrementar. Contexto(); } @Override public void map(Id id. Arg, Valor valor. Id) throws Variavel. Ja. Declarada. Exception { super. map(id. Arg, valor. Id); animador. inserir. Binding(id. Arg, valor. Id); } @Override public void restaura() { super. restaura(); animador. restaurar. Contexto(); } }
Adaptando os métodos avaliar() public class Exp. Soma extends Exp. Binaria { … public Valor avaliar(Ambiente. Execucao amb) throws Variavel. Nao. Declarada. Exception, Variavel. Ja. Declarada. Exception { // iniciar a avaliação Animador animador = amb. get. Animador(); // avaliação da expressão da esquerda Valor a = (Valor. Inteiro)get. Esq(). avaliar(amb); set. Exp. Esq(a); // avaliação da expressão da direita Valor b = (Valor. Inteiro) get. Dir(). avaliar(amb); set. Exp. Dir(b); // terminar a avaliação Valor c = new Valor. Inteiro( ((Valor. Inteiro)a). valor() + ((Valor. Inteiro)b). valor() ); animador. terminar. Avaliacao(this, c); set. Exp. Esq(null); set. Exp. Dir(null); return c; }
Adaptando os métodos to. String() public abstract class Exp. Binaria implements Expressao { private Expressao exp. Esq; private Expressao exp. Dir; public String get. Exp. Esq(){ if (exp. Esq==null) exp. Esq = get. Esq(); return exp. Esq. to. String(); } public void set. Exp. Esq(Expressao exp) { exp. Esq = exp; } public String get. Exp. Dir(){. . . } public void set. Exp. Dir(Expressao exp) {. . . } public String to. String() { String. Buffer sb = new String. Buffer(); sb. append(get. Exp. Esq(). to. String()); sb. append(' '); sb. append(operador); sb. append(' '); sb. append(get. Exp. Dir(). to. String()); return sb. to. String(); } }
Executando o programa 1 + 2 + 3 usuário programa expr _ + 3 expr 1 + 2 executar() animador avaliar() terminar. Avaliacao(expr 1+ 2, 3) to. String() [Novo Passo] to. String() “ 3” “ 3+3” to. String() get. Animador() get. Passos() “ 6” terminar. Avaliacao(expr _ +3, 6) [Novo Passo]
Trabalhos Futuros Melhorar a visualização p Incluir as extensões das outras equipes p Transformar o animador em um plugin do eclipse (Sugestão de Eduardo Tavares) p Implementar o animador usando Aspectos (A animação seria um aspecto). p Implementar o animador usando o padrão Visitor p Estender o animador para as linguagens Imperativa e Orientada a Objetos p
Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena
- Requisito funcional e não funcional
- Requisitos não funcionais exemplos
- Requisito funcional e não funcional
- Carlos eduardo carvalho lima
- Perfil do animador sociocultural
- Animador autoritario
- Animador de grupo
- Perfil do animador
- Eduardo en letra cursiva para copiar y pegar
- Vamos treinar a tradução para a linguagem matemática
- Vamos treinar a tradução para a linguagem matemática
- Produkt
- Eduardo nunca (entrenarse) tanto en invierno
- Adjetivos con rr
- Dr eduardo perseu
- Scuola de filippo quarto