Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouAna Pera Alterado mais de 10 anos atrás
1
Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1
2
Equipe Felype Santiago Maria Carolina Paola Accioly Rodrigo Cardoso
3
Projeto Conceitos básicos
4
Projeto Estender a LF3 com características de Haskell Definição de tipos Tipos enumerados Tipos complexos Tipos recursivos
5
Tipos Enumerados Tipo definido por uma quantidade finita de construtores. Em Haskell: data Bool = True | False data Estacao = Inverno | Verao | Outono | Primavera data Temp = Frio | Quente
6
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)
7
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 a Leaf :: a -> Tree a
8
Apresentação – Parte 1Apresentação – Parte 1
9
Projeto (parte 1) Estender a LF3 com características de Haskell Definição de tipos (estender a LF3) Tipos enumerados Tipos complexos Tipos recursivos
10
Tipos Enumerados (LF4) Definição dos tipos type Bool = {True, False} type Temp = {Frio,Quente} type diasDaSemana = {dom, seg, ter, qua, qui, sex, sab} Type meses = {jan, fev, mar, abr, mai, jun, jul, ago, set, out, nov, dez}
11
Tipos Enumerados (LF4) Utilização dos tipos definidos Função NEXT: retorna o elemento declarado imediatamente depois do enum passado como parâmetro. Exemplo: type diasUteis = {seg, ter, qua, qui, sex} next(ter) = qua Função PREVIOUS : retorna o elemento declarado imediatamente depois do enum passado como parâmetro. Exemplo: type diasUteis = {seg, ter, qua, qui, sex} previous(sex) = qui
12
Tipos Enumerados (LF4) Utilização dos tipos definidos (cont.) Função ORD: retorna a posição em que o elemento passado como parâmetro foi declarado (o primeiro elemento ocupa a posição 0). Exemplo: type diasUteis = {seg, ter, qua, qui, sex} ord(qui) = 3
13
Algumas observações... (LF4) Nenhuma variável pode ser declarada com o nome de um instância de um tipo enumerado no mesmo escopo. E vice-versa. Tipos enumerados podem ser redefinidos em escopos mais internos As instâncias de tipos enumerados não pode ser nenhuma palavra reservada da linguagem (true, false, etc)
14
Exemplos de programas (LF4) let type d = {dom, seg, ter, qua, qui, sex, sab} in let var y = sex in next (y) = sab let type dias = {seg, ter, qua} in let type diasAoContrario = {ter, seg, dom} in next(next(seg)) = ter
15
Funcionamento das pilhas let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg)
16
Pilha de compilação let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilha de compilação Map auxiliar
17
Pilha de compilação xTipoInteiro let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilha de compilação Map auxiliar
18
Pilha de compilação xTipoInteiro let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilha de compilação Map auxiliar
19
Pilha de compilação let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilha de compilação Map auxiliar
20
Pilha de compilação Map auxiliar let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg)
21
Pilha de compilação Map auxiliar let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg)
22
Pilha de compilação Map auxiliar let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg)
23
Pilha de Execução let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilhas de execução Maps auxiliares
24
Pilha de Execução let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilhas de execução Maps auxiliar
25
Pilha de Execução let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilhas de execução Maps auxiliares
26
Pilha de Execução let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilhas de execução Maps auxiliar
27
Pilha de Execução let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilhas de execução Maps auxiliar
28
Pilha de Execução let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilhas de execução Maps auxiliar
29
Pilha de Execução let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in let type primTrimestre = {jan, fev, mar}, var y = "e" in next(seg) Pilhas de execução Maps auxiliar
30
Pilha de Execução Pilhas de execução
31
BNF ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorLista | ValorEnum ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao | "ord" Expressao | "next" Expressao | "previous" Expressao | head(Expressao) | tail(Expressao) | ExpCompreensaoLista
32
BNF DeclaracaoFuncional ::= DecVariavel | DecTipo | DecFuncao | DeclaracaoFuncional "," DeclaracaoFuncional DecTipo ::= "type" Id "=" "{" SeqEnum "}" SeqEnum ::= ValorEnum | ValorEnum "," SeqEnum
33
Parser - Tokens
34
Parser - PDeclType() DeclaracaoFuncional PDeclType() : { Id tipo; SeqEnum seqEnum; } { ( tipo = PId() seqEnum = PSeqEnum (tipo.toString()) ) { return new DecType(tipo, seqEnum); }
35
Parser - PSeqEnum SeqEnum PSeqEnum(String tipo) : { ValorEnum valEnum; List lista = null; int index = 0; } { ( valEnum = PValorEnum(tipo, index++) { lista = new ArrayList(); lista.add(valEnum); } ( valEnum = PValorEnum(tipo, index++) { lista.add(valEnum); })* ) { return new SeqEnum(lista); }
36
Parser - PValorEnum ValorEnum PValorEnum(String str, int index) : { Token token; } { token = { String tokenStr = token.toString(); return new ValorEnum(new Id(tokenStr), str, index); }
37
Parser - Operações Expressao PExpNext() : { Expressao retorno; } { retorno = PExpPrimaria() { return new ExpNext(retorno); } Expressao PExpPrevious() : { Expressao retorno; } { retorno = PExpPrimaria() { return new ExpPrevious(retorno); } Expressao PExpOrd() : { Expressao retorno; } { retorno = PExpPrimaria() { return new ExpOrd(retorno); }
38
Implementação Classes novas DecType SeqEnum ValorEnum TipoEnum ExpOperacoesEnum ExpNext ExpPrevious ExpOrd
39
Implementação Modificações em classes/interfaces AmbienteFuncional AmbienteExecucaoFuncional – ContextoExecucaoFuncional
40
Implementação Modificações em métodos ExpDeclaracao avaliar includeBindings resolveBindings resolveTypeBidings
41
Projeto – Parte 2Projeto – Parte 2
42
Projeto (parte 2) Estender a LF3 com características de Haskell Definição de tipos (estender a LF3) Tipos enumerados Tipos complexos Tipos recursivos
43
Dúvidas/decisões de projetoDúvidas/decisões de projeto Para finalizar...
44
Dúvidas/decisões de projeto Como declarar tipos recursivos em uma linguagem não tipada? Uma pilha auxiliar para as estruturas foi a melhor decisão? Como dar apelidos para tipos se eles não são explícitos?
45
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.html
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.