definiÇÃo de tipos – lf3 plp – apresentação 2. equipe felype santiago maria carolina paola...
TRANSCRIPT
![Page 1: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/1.jpg)
DEFINIÇÃO DE TIPOS – LF3
PLP – Apresentação 2
![Page 2: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/2.jpg)
Equipe
Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso
![Page 3: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/3.jpg)
Agenda
Descrição do projeto Gramática Decisões de projeto Implementação Parser Considerações finais
![Page 4: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/4.jpg)
Contextualização do problema
Descrição do Projeto
![Page 5: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/5.jpg)
Objetivo
Estender a Linguagem Funcional 3 com aspectos de Haskell
Permitir definição de tipos pelo programador Tipos enumerados Tipos recursivos Tipos complexos
![Page 6: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/6.jpg)
Tipos Enumerados
Tipo definido por uma quantidade finita de construtores.
Em Haskell:data Bool = True | Falsedata Estacao = Inverno | Verao | Outono | Primaveradata Temp = Frio | Quente
![Page 7: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/7.jpg)
Tipos Recursivos
Tipo definido através do uso da própria definição.
Em Haskell:data Tree a = Leaf a
| Branch (Tree a) (Tree a)
Branch :: Tree a -> Tree a -> Tree aLeaf :: a -> Tree a
![Page 8: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/8.jpg)
Tipos Complexos
Tipo definido através do uso de outras definições.
Em Haskell:type String = [Char]
type Name = String
type Address = None | Addr String
type Person = (Name, Address)
![Page 9: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/9.jpg)
Alteração na BNF
Gramática
![Page 10: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/10.jpg)
Alteração na BNF
ValorAbstrato ::= ValorFuncao | ValorTipo DeclaracaoFuncional ::= DecVariavel
| DecFuncao| DecTipo| DeclaracaoFuncional ","
DeclaracaoFuncional DecTipo ::= "type" Id "=" "{"
SeqConstrutores "}"
![Page 11: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/11.jpg)
Alteração na BNF
SeqConstrutores ::= Construtor | Construtor "|" SeqConstrutores
Contrutor ::= Id | Id "(" ListaTipos ")" ListaTipos ::= TiposAceitos
| TiposAceitos "," ListaTipos TiposAceitos ::= "String" | "Boolean"
| "Int" | Id
![Page 12: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/12.jpg)
Características da Linguagem
Decisões de projeto
![Page 13: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/13.jpg)
Decisões de projeto
Tipos enumerados são tratados como construtores vazios.
Os nomes dos construtores não podem ser nenhuma palavra reservada da linguagem Ex: false, true, length, var, type...
Não são permitidas redefinições de construtores Nomes dos construtores são tratados como
palavra reservada em qualquer escopo Não podem ser utilizados como nomes de
variáveis, funções ou qualquer outro construtor
![Page 14: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/14.jpg)
Decisões de projeto
Os tipos são declarados sequencialmente Evitar abertura de escopos desnecessários
Para declarar os construtores, é necessário determinar os tipos dos parâmetros aceitos Tipos primitivos (String, Boolean e Int) Qualquer tipo declarado pelo programador,
inclusive o próprio tipo sendo declarado ValorTipo herda de ValorAbstrato
![Page 15: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/15.jpg)
Alteração na BNF
Implementação
![Page 16: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/16.jpg)
Funcionamento das pilhas
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
![Page 17: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/17.jpg)
Pilha de compilação e execução
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
Variáveis e funções
Tipos
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
<(dom, ConstEnum), (seg, ConstEnum),
(ter, ConstEnum), (qua, ConstEnum),
(qui, ConstEnum), (sex, ConstEnum),
(sab, ConstEnum)>DefType
<dias, DefType(<(dom, ConstEnum), (seg, ConstEnum),
(ter, ConstEnum), (qua, ConstEnum), (qui,
ConstEnum), (sex, ConstEnum), (sab,
ConstEnum)>)>
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
<x, TipoInteiro/ValorInt(1)>
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
![Page 18: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/18.jpg)
Pilha de compilação e execução
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
<dias, DefType(<(dom, ConstEnum), (seg, ConstEnum),
(ter, ConstEnum), (qua, ConstEnum), (qui,
ConstEnum), (sex, ConstEnum), (sab,
ConstEnum)>)>
<x, TipoInteiro/ValorInt(1)
>
<(null, ConstEnum), (obj, ConstTipoRecursivo(dias)),
(lista, ConstTipoRecursivo(listaDias, listaDias))>
DefType
<listaDias, DefType(<(null, ConstEnum),
(obj, ConstTipoRecursivo(dias)), (lista, ConstTipoRecursivo(listaDias,
listaDias))>)>
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
Variáveis e funções Tipos
![Page 19: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/19.jpg)
Pilha de compilação e execução
let type dias = {dom | seg | ter | qua | qui | sex | sab}, var x = 1 in let type listaDias = {null | obj(dias) | lista(listaDias, listaDias)} in lista(lista(lista(obj(seg), obj(ter)), obj(qua)), null)
Variáveis e funções Tipos
<dias, DefType(<(dom, ConstEnum), (seg, ConstEnum),
(ter, ConstEnum), (qua, ConstEnum), (qui,
ConstEnum), (sex, ConstEnum), (sab,
ConstEnum)>)>
<x, TipoInteiro>
<listaDias, DefType(<(null, ConstEnum),
(obj, ConstTipoRecursivo(dias)), (lista, ConstTipoRecursivo(listaDias,
listaDias))>)>
![Page 20: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/20.jpg)
Diagrama UML - Contexto
![Page 21: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/21.jpg)
Diagrama UML - Tipos novos
![Page 22: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/22.jpg)
Implementação - Modificações
Classes/Interfaces AmbienteFuncional<T, K>
AmbienteExecucaoFuncional ContextoExecucaoFuncional
AmbienteCompilacaoFuncional (NOVO) ContextoCompilacaoFuncional (NOVO)
Aplicação Modificações em métodos
ExpDeclaracao - Mapeamento de estruturas avaliar, includeBindings, resolveBindings,
resolveTypeBidings...
![Page 23: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/23.jpg)
Alteração na BNF
Parser
![Page 24: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/24.jpg)
Parser - PDeclType()
DeclaracaoFuncional PDeclType() :{
Id tipo;SeqConstrutor seqConstrutor;
}{
( <TYPE> tipo = PId() <ASSIGN> <LBRACE> seqConstrutor = PSeqConstrutor(tipo.toString()) <RBRACE>){
return new DecType(tipo, seqConstrutor);}
}
![Page 25: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/25.jpg)
Parser - PSeqConstrutorSeqConstrutor PSeqConstrutor(String tipo) :{
Construtor construtor;List lista = null;int index = 0;
}{( construtor = PConstrutor(tipo, index++))
{ lista = new ArrayList(); lista.add(construtor);
}( (<BIT_OR> construtor = PConstrutor(tipo, index++)) {lista.add(construtor);}) *{ return new SeqConstrutor(lista); }
![Page 26: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/26.jpg)
Parser - PConstrutor
Construtor PConstrutor(String tipo, int index):{Construtor construtor;}{((
LOOKAHEAD(<IDENTIFIER> <LPAREN>) construtor = PConstrutorTipoRecursivo(tipo)| LOOKAHEAD(<IDENTIFIER>) construtor = PConstrutorEnum(tipo, index) )){ return construtor; }
}
![Page 27: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/27.jpg)
Exemplo de programas, conclusões e referências
Para finalizar...
![Page 28: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/28.jpg)
Exemplos de programas Ao vivo é melhor! =D
![Page 29: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/29.jpg)
Conclusões
Aumentou o poder de expressão da linguagem
Implementação única para tipos enumerados e recursivos.
Trabalhos futuros: Otimizar as heranças Funções nativas (NEXT, PREVIOUS e ORD)
![Page 30: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/30.jpg)
Referências
Programming Language Concepts and Paradigms - David A. Watt
Programming language processors in Java - David A. Watt e Deryck F. Brown
http://www.cin.ufpe.br/~if708 http://www.haskell.org/tutorial/goodies.ht
ml
![Page 31: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/31.jpg)
Dúvidas... Sugestões...
![Page 32: DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso](https://reader035.vdocuments.com.br/reader035/viewer/2022062418/552fc130497959413d8d4ef1/html5/thumbnails/32.jpg)
DEFINIÇÃO DE TIPOS – LF3
PLP – Apresentação 2