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

Slides:



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

Programação Orientada a Objetos*
Paulo Marques Hernâni Pedroso
Utilitários Marco Antonio. Enum Como o nome sugere, é uma enumeração de opções para uma determinada situação A principal vantagem é limitar as opções.
Prof. Thiago Pereira Rique
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Programação Básica em Java
JavaCC e JJTree Geração de compiladores implementados em Java
Rafael Pinto Frederico Corrêa
Walfredo Cirne walfredo.dsc.ufpb.br
7 Abstração Genérica Unidades genéricas e instanciação.
JAVA ENUMS © 2009 by Jorge L. de Souza Leão março de 2009 PEE - COPPE/UFRJ.
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.
Classes e objetos Arrays e Sobrecarga
Estrutura de Dados em Java
CRIANDO OBJETOS EM JAVA
Implementar Listas em Linguagem Funcional II
Departamento de Estatística e Informática
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
Conceitos de Linguagem de Programação
Entendendo as definições de classe
Introdução à Programação Orientada a Objetos com Java
Bags n Servem para armazenar a repetição de elementos n Tal qual conjuntos, a ordem dos elementos não importa n Por isso, também recebem a designação de.
Estudo dos Conceitos e Paradigmas de Programação
©André Santos, Programação Funcional Classes em Haskell André Santos.
Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Orientada a Objetos Augusto Sampaio Jackson, Jean, Patrícia, Saulo Centro de Informática.
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
Classes, Objetos, Atributos e Métodos JAVA
Augusto Sampaio e Paulo Borba Gustavo Pinto Marcelo Queiroz
1 PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins.
Capítulo 1 Tipo enumerado.
JAVA Orientação a Objetos Sun Campus Ambassador Aula 5.
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
Java Kickstart, day 2 Semelhanças com linguagem C.
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
Empréstimo Consignado Nacional. Quantidade de Operações de Crédito (Empréstimo Pessoal e Cartão) realizadas por Instituições Financeiras com Aposentados.
Estruturas Revisando: tipos de dados simples
SQL Server Comando PIVOT.
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Tecgraf PUC-Rio Fevereiro de 2014 IDL.
George Darmiton da Cunha Cavalcanti
Gerador de Tabela-Verdade
Construtores e Destrutores
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.
Bruno Inojosa MCP .NET Framework
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.
Modificadores Programação II.
PLP – Paradigma de Linguagens de Programação
Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier.
Linguagem Funcional 2 Equipe: Gustavo Cabral Leonardo Maici Professor: Augusto
JavaCC.
Tecgraf PUC-Rio maio de 2011 Mapeamento de IDL para Java.
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Projeto II - PLP Prof. Augusto Sampaio
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Tecgraf PUC-Rio Agosto de 2013 Mapeamento de IDL para Java.
Empréstimo Consignado Nacional
Array e ArrayList LPOO – 01/09/14.
Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe :Ana Paula Cavalcanti (apcc2) Clélio Feitosa (cfs) Zildomar C.
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
1 CIn / UFPE Introdução a Parsing Gustavo Carvalho Abril 2015.
TÍTULO DO ROTEIRO DO PRODUTO
Transcrição da apresentação:

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

Equipe Felype Santiago Maria Carolina Paola Accioly Rodrigo Cardoso

Projeto Conceitos básicos

Projeto Estender a LF3 com características de Haskell Definição de tipos Tipos enumerados Tipos complexos Tipos recursivos

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

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)

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

Apresentação – Parte 1Apresentação – Parte 1

Projeto (parte 1) Estender a LF3 com características de Haskell Definição de tipos (estender a LF3) Tipos enumerados Tipos complexos Tipos recursivos

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}

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

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

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)

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

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)

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

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

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

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

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)

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)

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)

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

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

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

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

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

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

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

Pilha de Execução Pilhas de execução

BNF ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorLista | ValorEnum ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao | "ord" Expressao | "next" Expressao | "previous" Expressao | head(Expressao) | tail(Expressao) | ExpCompreensaoLista

BNF DeclaracaoFuncional ::= DecVariavel | DecTipo | DecFuncao | DeclaracaoFuncional "," DeclaracaoFuncional DecTipo ::= "type" Id "=" "{" SeqEnum "}" SeqEnum ::= ValorEnum | ValorEnum "," SeqEnum

Parser - Tokens

Parser - PDeclType() DeclaracaoFuncional PDeclType() : { Id tipo; SeqEnum seqEnum; } { ( tipo = PId() seqEnum = PSeqEnum (tipo.toString()) ) { return new DecType(tipo, seqEnum); }

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); }

Parser - PValorEnum ValorEnum PValorEnum(String str, int index) : { Token token; } { token = { String tokenStr = token.toString(); return new ValorEnum(new Id(tokenStr), str, index); }

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); }

Implementação Classes novas DecType SeqEnum ValorEnum TipoEnum ExpOperacoesEnum ExpNext ExpPrevious ExpOrd

Implementação Modificações em classes/interfaces AmbienteFuncional AmbienteExecucaoFuncional – ContextoExecucaoFuncional

Implementação Modificações em métodos ExpDeclaracao avaliar includeBindings resolveBindings resolveTypeBidings

Projeto – Parte 2Projeto – Parte 2

Projeto (parte 2) Estender a LF3 com características de Haskell Definição de tipos (estender a LF3) Tipos enumerados Tipos complexos Tipos recursivos

Dúvidas/decisões de projetoDúvidas/decisões de projeto Para finalizar...

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?

Referências Programming Language Concepts and Paradigms - David A. Watt Programming language processors in Java - David A. Watt e Deryck F. Brown