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

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

PLP – Paradigma de Linguagens de Programação

Apresentações semelhantes


Apresentação em tema: "PLP – Paradigma de Linguagens de Programação"— Transcrição da apresentação:

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

2 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

3 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)

4 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; ... }

5 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 ”)”

6 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

7 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

8 O que Muda na BNF?

9 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

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

11 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.

12 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)

13 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)

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


Carregar ppt "PLP – Paradigma de Linguagens de Programação"

Apresentações semelhantes


Anúncios Google