PLP – Paradigma de Linguagens de Programação

Slides:



Advertisements
Apresentações semelhantes
Tipos Explícitos e Tipos Polimórficos para LF1
Advertisements

Elsa Carvalho 49 Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Universidade Federal do Pará Serviço Público Federal Centro de Ciências Exatas e Naturais Departamento de Informática Abril/2001.
Programação Básica em Java
Rafael Pinto Frederico Corrêa
Curso Sistemas de Informação Disciplina: Arquitetura de Software
8 Sistemas de Tipos Polimorfismo de inclusão.
Sobrecarga e Declaração de Operadores Rafael Fonseca e Romeu Guimarães.
Linguagem OperOR Agenda Descrição da Linguagem Funcionalidades BNF Limitações e Dificuldades Desenvolvimento Exemplos Dificuldades.
Robson Godoi / Sandra Siebra
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Michel Pavan Macedo Introdução ao F# Michel Pavan Macedo
Implementar Listas em Linguagem Funcional II
LISTAS DUPLAMENTE ENCADEADAS
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.
Programação Funcional
Entendendo as definições de classe
Haskell Programação Funcional
Estudo dos Conceitos e Paradigmas de Programação
©André Santos, Programação Funcional Classes em Haskell André Santos.
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Expressões e Instrução de Atribuição
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.
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.
Haskell :: Funções como valores George Darmiton da Cunha Cavalcanti Monitores: Bruno Barros cin.ufpe.br) Glerter Sabiá (gas2.
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Aula Prática 4 Monitoria IP/CC (~if669).
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
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.
94 Elsa Carvalho Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
George Darmiton da Cunha Cavalcanti
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
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)
©André Santos, Programação Funcional Tipos Algébricos André Santos.
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.
Adriana Carla Projeto de PLP. 2 Roteiro Objetivos Alterações  Contextualização  BNF / Parser  checaTipo()  avaliar() Demonstração.
Linguagem Funcional 2 Equipe: Gustavo Cabral Leonardo Maici Professor: Augusto
JavaCC.
Haskell Programação Funcional Diego Lima Rubem Moreira.
Sintaxe de uma Linguagem
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Projeto II - PLP Prof. Augusto Sampaio
Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Orientada a Objetos Augusto Sampaio e Paulo Borba Gustavo Pinto Marcelo Queiroz.
Programação Funcional 4a. Seção de Slides Tuplas e Definição de Funções Locais em Haskell.
JAVASCRIPT Programação Web. O que é  E uma linguagem interpretada que e executada na maquina do cliente  Não esta associada ao framework java  Não.
Padrão Visitor Paulo Mauricio Gonçalves Jr Rodrigo Teixeira Ramos Paradigmas de Linguagens de Programação Prof. Augusto Sampaio Julho de 2003.
Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe :Ana Paula Cavalcanti (apcc2) Clélio Feitosa (cfs) Zildomar C.
Raniere ferreira do prado
Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Orientada a Objetos Augusto Sampaio e Paulo Borba Gustavo Pinto Marcelo Queiroz.
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Mobilidade para Linguagem Orientada a Objetos 1
Transcrição da apresentação:

PLP – Paradigma de Linguagens de Programação Tipos recursivos parametrizados

Motivação Linguagem Base LF2 A linguagem LF2 não permite definir tipos, e consequentemente não permite definir tipos recursivos. Introduzir tipos livres, comuns em programação funcional. Permitir a definição do parâmetro em tempo de execução

Conceitos Inseriridos Definição de Tipos Enumerados (Parte 1) Definição de Tipos Recursivos (Parte 1 e 2) Definição de Tipos Recursivos com parametrização (Parte 2)

Linguagens que utilizam estes conceitos Recursão de Tipos Haskell data List a = Nil | Cons a (List a) Tipos Parametrizados Java -> Generics public class PilhaGenerica<T> { private List<T> elementos; private int topo; ... }

O que Muda na BNF? Valor ::= ValorConcreto | ValorAbstrato ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString ValorAbstrato ::= Id | ValorEnum | ValorFuncao ValorFuncao ::= "fn" Id Id "." Expressao ValorEnum ::= Id “.” ValorTupla | Id “.” Valor ValorTupla ::= “(“Expressão“,” ListExp ”)”

O que Muda na BNF? ListaDeclaracao ::= DeclaracaoFuncional | DeclaracaoTipos | DeclaracaoFuncional “,” ListaDeclaracao | DeclaracaoTipos “,” ListaDeclaracao DeclaracaoFuncional ::= DecVariavel | DecFuncao DeclaracaoTipos ::= EnumType EnumType ::= “type” Id “<” ListId “>” “=” ListaTags ListaTags ::= Tag | Tag “|” ListaTags Tag ::= Id | Id “.” EspecTipo

O que Muda na BNF? EspecTipo ::= EspecTipoPrimitivo | EspecTipoTupla | EspecTipoAbstract EspecTipoAbstract ::= Id | Id EspecTipoParam EspecTipoParam ::= “<”ListaEspecTipoPrimitivo”>” | “<”ListId”>” ListaEspecTipoPrimitivo ::= EspecTipoPrimitivo | EspecTipoPrimitivo ”,” ListaEspecTipoPrimitivo EspecTipoPrimitivo ::= “Int” | “Bool” | “String” EspecTipoTupla ::= “(“ EspecTipo “,” ListaEspecTipo “)” ListaEspecTipo ::= EspecTipo | EspecTipo ”,” ListaEspecTipo

O que Muda na BNF?

Checagem de tipos Método “Checatipo” de tipos primitivos é sempre TRUE; Método “Checatipo” de tipo tupla = “Checatipo” expressão esquerda && “Checatipo” expressão direita

Avaliar Método “Avaliar” do Valor Tupla Avalia cada EspecTipo Retorna um novo ValorTupla com os valores avaliados

Parametrização Os tipos Enum podem ter infinitos parâmetros Cada parâmetro é inicializado com o Tipo Indeterminado Na primeira ocorrência do parâmetro o tipo é atualizado.

Exemplo de utilização let type x<T> = s.string | b.(int,x) in s.”string” let type Arv<T> = Folha.T | Branch.(Arv,Arv) in let var t = Branch.(Branch.(Folha.1,Folha.2),Folha.3) in Branch.(t,Folha.5) let type x<T> = Vazia | cons.(T,x) in let fun isVazia x = if x==Vazia then true else false in isVazia(Vazia)

Considerações Finais e Trabalhos Futuros Suporte a tipos recursivos parametrizados já realizado. Tratamento de blocos aninhados (nested blocks) para dar suporte a casos como este: let type Arv<T> = Folha.T | Branch.(Arv<T>,Arv<string>, Arv<T>) in let var t = Branch.(Folha.5, Folha.“oi”, Folha.6)

Equipe: Liana Lisboa Jorge Oliveira Thiago Burgos Monitores: Rafael Oliveira, Joabe Jesus