Projeto II - PLP Prof. Augusto Sampaio

Slides:



Advertisements
Apresentações semelhantes
|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
Advertisements

Tipos Explícitos e Tipos Polimórficos para LF1
Programação Orientada a Objetos*
Padrão de Projeto Interpreter
Prof. Heloise Manica Paris Teixeira
Algoritmos e Programação Estruturada Conceitos básicos
Programação Básica em Java
Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena.
Rafael Pinto Frederico Corrêa
Linguagem OperOR Agenda Descrição da Linguagem Funcionalidades BNF Limitações e Dificuldades Desenvolvimento Exemplos Dificuldades.
Tópicos Tipos de Dados Variáveis por Valor Variáveis por Referência
Implementar Listas em Linguagem Funcional II
Funções Declaração function nomedafunção (arg_1, arg_2,..., arg_n) corpoDaFunção end.
Aula prática - análise contextual
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estudo dos Conceitos e Paradigmas de Programação
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Orientada a Objetos Augusto Sampaio Jackson, Jean, Patrícia, Saulo Centro de Informática.
Expressões e Instrução de Atribuição
Semântica de Linguagens de Programação
DI UFPE Semântica de Java Towards na Operational Semantics and Proof of Type Soundness for Java Sophia Drossopoulou e Susan Eisenbach Imperial College.
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Paradigma Funcional Apresentação de LF1.
Paradigmas de Linguagens de Programação Linguagem Orientada a Objetos 1 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal.
Linguagem de Expressões 2
Augusto Sampaio e Paulo Borba Centro de Informática
Augusto Sampaio e Paulo Borba Centro de Informática
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Projeto de PLP Resultado Final Guilherme Oliveira Everton Marques
Augusto Sampaio e Paulo Borba Gustavo Pinto Marcelo Queiroz
1 PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins.
Linguagens de Programação II
Projeto PLP Persistência em OO1 Equipe: Ana Paula Cavalcanti Clelio Feitosa Zildomar Felix Professor: Augusto Sampaio.
5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP 5COP101 Linguagens de Programação Aula 3 Clojure/LISP Prof. Dr. Sylvio Barbon Junior 1Sylvio.
Paradigma funcional.
1 Linguagem Imperativa 2 com Design by Contract Alunos: Bruno Moreno José Elias Queiroga Yuri Malheiros Samara Martins Prof.: Augusto Sampaio.
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Cálculo Lambda (l – Calculus)
Conversão de Tipos Exemplo: x + i, onde x é do tipo real e i é do tipo integer. A especificação da linguagem deve indicar se a linguagem suporta este tipo.
Programação Lógica com Prolog
Recursividade Profs. De Prog2 e Lab2.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Semântica de Linguagens de Programação
1 Diego Machado Dias Rodrigo Cézar Luna dos Santos Weslley Silva Torres.
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)
PLP – Paradigma de Linguagens de Programação
JR: Flexible Distributed Programming in an Extended Java Elmário Gomes Dutra Jr. Gustavo Romano.
Animador e Editor para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Reis Lucena Centro de Informática – UFPE, 2005.
Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier.
Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim.
Comandos Não-Determinísticos e Atribuição Simultânea PLP – Projeto 2 Julho/2003 Prof. Augusto Sampaio Cibele da Rosa Christ [crc2] Gleifer Vaz Alves [gva]
Linguagem Funcional 2 Equipe: Gustavo Cabral Leonardo Maici Professor: Augusto
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Semântica em Linguagens de Programação Semântica Denotacional
Programação Funcional 4a. Seção de Slides Tuplas e Definição de Funções Locais em Haskell.
Padrão Visitor Paulo Mauricio Gonçalves Jr Rodrigo Teixeira Ramos Paradigmas de Linguagens de Programação Prof. Augusto Sampaio Julho de 2003.
Sistemas Distribuídos Prof. Marcus Rodrigues
Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe :Ana Paula Cavalcanti (apcc2) Clélio Feitosa (cfs) Zildomar C.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Análise Contextual Mauro Araújo Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco.
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Linguagem Funcional 2.
Transcrição da apresentação:

Projeto II - PLP Prof. Augusto Sampaio Implementar Avaliação Preguiçosa e Casamento de Padrões em Linguagem Funcional II Projeto II - PLP Prof. Augusto Sampaio Equipe : Aliny Figueirêdo Meira Ana Cristina Freitas César Danuza Ferreira Santana Neiva Mario Godoy Neto

Agenda Projeto 2.1 – Avaliação Preguiçosa Contexto Classes Implementadas Exemplos Projeto 2.2 – Casamento de Padrões Dificuldades Encontradas BNF Referências

Avaliação Preguiçosa ( Lazy Evaluation) Contexto Definição : Avaliação dos argumentos de uma função somente no momento em que forem utilizados pela primeira vez. Aplica imediatamente a função ao argumento, adiando para mais tarde a avaliação desse argumento. Diferenças: Eager Lazy: (fun x -> x+1)(2+3) = (fun x -> x+1)5 = 5+1 = 6 (fun x -> x+1)(2+3) = (2+3)+1 = 5+1 = 6

Avaliação Preguiçosa ( Lazy Evaluation) Contexto Linguagens que adotam a estratégia: Eager: Pascal, C, Java, OCaml Lazy: Haskell Problema que ocorreria no Eager não ocrre na Lazy: let var a = 1/0 in 2

Avaliação Preguiçosa ( Lazy Evaluation) Contexto Poder da Avaliação Preguiçosa let fun loop x = loop(x), fun f x = 5 in f(loop(3)) (Na Eager não funcionaria - ficaria em loop )

Avaliação Preguiçosa Classe Implementadas/Alteradas Interface AmbienteExecucaoLazy (nova) Classe ContextoExecucaoLazy (nova) Classe ID (alterada) Interface Expressao (alterada) Classe ExpDeclaracao (alterada) Classe StackHandler (alterada) Classe Aplicacao (alterada) Implementação no Projeto

Avaliação Preguiçosa Classe Implementadas/Alteradas Interface AmbienteExecucaoLazy - Guarda mapeamento de ID em Expressões - classes que implementam EXPRESSAO recebem AmbienteExecuçãoLazy - AtualizaId(), altera a Expressao associada ao primeiro ID que case com o valor de idArg na pilha de escopos.

Avaliação Preguiçosa Classe Implementadas/Alteradas Classe ContextoExecucaoLazy (nova) - public void atualizaId(Id idArg, expressao expId) Invoca o método updateId (StackHandler); - public Expressao get(Id idArg) Recupera a expressao mapeada no idArg; - public void map (Id idArg, Expressao expId) O ambiente guarda o mapeamento dos Identificadores (classe Id) nas Expressoes (Interface Expressao).

Avaliação Preguiçosa Classe Implementadas/Alteradas Classe Id (cód) - Metodo AVALIAR: Avalia se o ID é valor ou expressão. Se for VALOR, retorna o valor. Se for EXPRESSAO, avalia e atualiza o ID (diferente da LF2). A expressão associada ao Id só é avaliada 1 vez.

Avaliação Preguiçosa Classe Implementadas/Alteradas classe ExpDeclaracao (cód) - Metodos includeBinding - Metodos resolveBinding Tratam do mapeamento do Id como expressão e não mais como valor

Avaliação Preguiçosa Classe Implementadas/Alteradas Classe StackHandler e Classe Aplicacao Problema da Recursividade Problemas nos identificadores Resolução: foi necessário buscar a próxima ocorrência do id , até alcançar o id com o valor associado do mesmo. Substituição do Id em todas as expressões do contexto (mesmo Map) Exemplo: let var n = 1 in let fun imprime l n = (if n == 6 then l else imprime ((n cons l), (n+1) )) in imprime ([], n)

Casamento de Padrão (Pattern Matching) Contexto Definição É o ato de verificação da presença de um padrão em um conjunto de dados Exemplo let [fun fib 0 = 1 | fib 1 = 1 | fib n = fib (n - 1) + fib (n -2) ] in fib (6)

Casamento de Padrão Dificuldades Encontradas Definição do escopo do Padrão Id e ValorConcreto Avaliação das condições Criação de um Ambiente de Execução local, cópia do ambiente original.

BNF A BNF foi estendida de forma a permitir que declarações de funções possam ser escritas da seguinte forma: fun f padrao_1 = exp_1,[ if cond_1] | ... | f padrao_n = exp_n, [if cond_n]

Casamento de Padrão Classe Implementadas/Alteradas Classe DecFuncao (alterada) Classe Aplicacao (alterada) Classe ValorFuncaoPadrao (Criada) Classe Padrao (Criada) Classe ValorPadrao (Criada) Classe ExpMaior (Criada) Classe ExpMenor (Criada) Implementação no Projeto

Classe DecFuncao public DecFuncao(Id idFun, ValorFuncaoPadrao valorFuncP) { this.id = idFun; this.valorFuncP = valorFuncP; }

Casamento de Padrão Exemplos [1] let var x = 1 in let [fun f 0 = 0 | f n = n + f(n - 1) , if x > 0] in f(2 + 3)

Agradecimento Marcus Vinícius

Referências WATT, David A. Programming Language Concepts and Paradigms, 2004 Haskell reference. Disponível em: http://www.zvon.org/other/haskell/Outputsyntax/index.html. Último Acesso: 20 de junho de 2007. Dias, A. Linguagens e Técnicas de Programação Avançadas. Disponível em: http://ctp.di.fct.unl.pt/~amd/ltpa/teoricas/02.html Último Acesso: 07 de agosto de 2007.