Animador e Editor para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Reis Lucena Centro de Informática – UFPE, 2005 Roteiro Motivação Proposta O que visualizar? Estratégia Metas(Requisitos) de Implementação Como Implementar? Estrutura do Animador Adaptando a LF2 para o Animador Executando um programa Trabalhos Futuros Motivação Melhorar a apresentação da execução dos programas da disciplina de PLP (Poupar o professor de ter que desenhar os ambientes de execução) Ter um editor que reconheça a sintaxe das linguagens e faça o parsing automático Auxiliar a implementação dos projetos da disciplina 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. (melhorado!) Desenvolver um Editor Web para as Linguagens de PLP (novo!) O Editor Editor Permite a edição dos programas Palavras-Chave Destaca as palavras-chave à medida que o programa é digitado Sintaxe Verifica a sintaxe à medida que o programa é digitado Animar Chama o Animador PLP O Animador Código Fonte Exibe código fonte do programa com destaque para a expressão que está sendo avaliada Passos Permite percorrer a execução do programa passo-a-passo Ambiente de Execução Mostra a pilha de bindings do ambiente Avaliação de Expressões Exibe o resultado da avaliação da expressão atual 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/ 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 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 Como Implementar? Opções Usando o padrão de projeto Visitor Usando Reflection Usando Java Debug Interface (JDI) Usando Aspectos (novo!) Inserindo o código do animador dentro da linguagem A linguagem informa ao animador o que está fazendo. (antes era assim!) Estratégia Dividir a execução em passos Um passo é gerado sempre que ocorrer A avaliação de uma expressão O incremento do ambiente A restauração do ambiente A introdução de um binding Usar Aspectos para perceber estes eventos Estrutura do Animador Animador Animador void terminarAvaliacao(Expressao, Valor) void inserirBinding(Id, Valor) void incrementarContexto() void restaurarContexto() List<Passo> getPassos() * Passo Ambiente * Contexto * Binding Estrutura do Animador Animador Passo Ambiente ambiente; String avaliacao; String codigo; String valor; * Passo Ambiente * Contexto * Binding Como era ... O Animador estava incorporado à classe AmbienteExecucao Os métodos avaliar(...) de cada expressão chamavam o método terminarAvaliacao(...) do animador para informar que uma expressão foi avaliada O ambiente de execução informava ao animador quando o novo contexto era criado ou removido e quando um binding inserido inserido 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) Estender o animador para as linguagens Imperativa e Orientada a Objetos Animador e Editor para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Reis Lucena Centro de Informática – UFPE, 2005