Tipos Explícitos e Tipos Polimórficos para LF1

Slides:



Advertisements
Apresentações semelhantes
Curso de aprofundamento na linguagem C
Advertisements

C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Paulo Marques Hernâni Pedroso
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Universidade Federal do Pará Serviço Público Federal Centro de Ciências Exatas e Naturais Departamento de Informática Abril/2001.
Prof. Heloise Manica Paris Teixeira
Programação Básica em Java
JavaCC e JJTree Geração de compiladores implementados em Java
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Rafael Pinto Frederico Corrêa
Erros A Evitar Redundância de Programação public void insere( Priorizavel obj ) throws listaVaziaException; Lançamento de exceções.
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Wagner Santos C. de Jesus
Construção de Compiladores
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.
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Análise Semântica e Representação Intermédia
Implementar Listas em Linguagem Funcional II
Vetores em c / c++: Formato geral para declaração de variáveis:
Lex Linguagem (e compilador) para especificar analisadores léxicos.
Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
JAVA Orientação a Objetos
OPERADORESOPERADORES SCJP – Otimize-TI. Operadores Java Resultado: Maioria das operações é um booleano ou numérico. Não podem ser sobrecarregados (Existem.
Haskell Programação Funcional
Expressões e Instrução de Atribuição
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.
Centro de Informática – UFPE
Augusto Sampaio e Paulo Borba Centro de Informática
Augusto Sampaio e Paulo Borba Centro de Informática
Análise Léxica Primeira fase de um compilador
Classes, Objetos, Atributos e Métodos JAVA
1 PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins.
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Projeto PLP Persistência em OO1 Equipe: Ana Paula Cavalcanti Clelio Feitosa Zildomar Felix Professor: Augusto Sampaio.
Pilhas Profa. Nádia Félix.
Analise sintática aula-07-analise-sintática.pdf.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Wagner Santos C. de Jesus
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
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)
Estruturas de Dados Aula 6: Cadeias de Caracteres
Módulo 9 Strings , Coleções e I/O
Programação I Aula 4 (Expressões Booleanas e Expressões de Seleção) Prof. Gilberto Irajá Müller Última atualização 17/3/2009.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
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.
Semântica de Linguagens de Programação
1 Diego Machado Dias Rodrigo Cézar Luna dos Santos Weslley Silva Torres.
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Modificadores Programação II.
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
PLP – Paradigma de Linguagens de Programação
Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier.
Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim.
Haskell Programação Funcional Diego Lima Rubem Moreira.
Sintaxe de uma Linguagem
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Projeto II - PLP Prof. Augusto Sampaio
PARADIGMAS DE LINGUAGENS EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe :Ana Paula Cavalcanti (apcc2) Clélio Feitosa (cfs) Zildomar C.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
ProgramaçãoConcorrente Glêdson Elias
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Transcrição da apresentação:

Tipos Explícitos e Tipos Polimórficos para LF1 Alexandre Barza José Benito Laís Neves

RoadMap Parte 1 Parte 2 Implementação dos tipos explícitos Melhoria das mensagens de erros de tipos Implementação de tipos polimórficos para funções

BNF Modificada ExpDeclaracao ::= "let" DeclaracaoFuncional "in" Expressao DeclaracaoFuncional ::= DecVariavel | DecFuncao | DeclaracaoFuncional "," DeclaracaoFunciona DecVariavel::= “var” Id “:” Tipo “=” Expressao DecFuncao ::= “fun” Id “:” ListaTipo “->” Tipo ListaId “=” Expressao Tipo := “string” | “int” | “boolean” | TipoPolimorfico TipoPolimorfico := “T” <IDENTIFICADOR_NUMERICO> ListaTipo ::= Tipo | ListaTipo, ListaTipo Regra Modificada Nova Regra

Parser Modificado Barza! Tokens de tipos

Parser Modificado Regra Tipo

Parser Modificado Regra Tipo Polimórfico

Exemplos Tipos Explícitos Declaração de Variável let var x : int= 1 in x + 1 let var a : string = "hello" in a ++ "world” letvar b : boolean= true in b and true Declaração de Função let fun prod : int int -> int x y = if y == 0 then 0 else x + prod(x,y-1) in prod(3,3)

Antes um Breve Parênteses Tipos Polimórficos em Java Erro: tipos incompatíveis da imagem (int) e da expressão x (T0) Erro: tipos incompatíveis da imagem (T0) e da expressão y(T1) Erros em tempo de compilação! public <T0, T1> int sec(T0 x, T1 y){ return x; } let fun sec : T0 T1 -> T0 x y = y in sec(1, “true”) public <T0, T1> T0 sec1(T0 x, T1 y) { return y; }

Tipos Polimórficos em Java Erro: tipos incompatíveis da imagem (T0) e da expressão y (boolean) Erro: tipos incompatíveis da imagem (T0) e da expressão 2+1(int) public <T0> T0 sec2(T0 x, boolean y){ return y; } public <T0, T1> T0 sec3(T0 x, T1 y){ return 2+1; } let fun sec : T0 T1-> T0 x y = 2+1 in sec(1, true)

Tipos Polimórficos em Java Exemplos Corretos public <T0, T1> int sec4(T0 x, T1 y){ return 1+2; } public <T0, T1> T0 sec5(T0 x, T1 y) { return x; } Let fun sec : T0 T1 -> T0 x y = x in sec(1, true)

Tipos Polimórficos em LF1 let fun sec : T0 T1 -> int x y = x in sec(1, 2) Exemplos Incorretos let fun sec : T0 T1 -> T0 x y = y in sec(1, true) let fun sec : T0 boolean-> T0 x y = y in sec(1, true) let fun sec : T0 T1-> T0 x y = 2+1 in sec(1, true) Exemplos Corretos let fun sec : T0 T1 -> int x y = 1+2 in sec(1, true) let fun sec : T0 T1 -> T0 x y = x in sec(1, true)

Análise da Implementação DefFuncao Novos Atributos Lais

DefFuncao Empilhamento dos Tipos Checagem de Tipos da Expressão Checagem de Tipos da Imagem

DefFuncao Verifica se Imagem e Expressão são Tipos Polimórficos Verifica se Imagem e Expressão são Tipos Primitivos So compara se imagem e expressao forem ambas Primitivas ou Polimorficas Verifica se Tipos Primitivos são Compatíveis

Verifica os tipos polimórficos após eles terem sido inferidos Tipo Função Verifica os tipos polimórficos após eles terem sido inferidos

Apenas compara se tokens forem iguais Tipo Polimórfico Método eIgual(Tipo tipo) Apenas compara se tokens forem iguais

Demonstração