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

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

Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.

Apresentações semelhantes


Apresentação em tema: "Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1."— Transcrição da apresentação:

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


Carregar ppt "Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1."

Apresentações semelhantes


Anúncios Google