Compiladores. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal. S. Melo de Sousa Compiladores
|
|
- Marcelo Aranha
- 5 Há anos
- Visualizações:
Transcrição
1 Compiladores Verificação e inferência dos Tipos Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal
2 Problema Permitir evitar declarar o tipo das variáveis, das assinaturas de função Deduzir esta informação do contexto em que as expressões analisadas se encontram Dada uma expressão e contendo identificadores x 1, x 2,..., x n. Será que existem tipos τ 1,... τ n e τ tais que x 1 : τ 1,..., x n : τ n e : τ
3 Analise do problema A solução nem sempre é única let f x = x A variável x pode ser de qualquer tipo. Neste contexto estamos interessado no tipo mais geral A solução ao problema está interligada com outros aspectos da linguagem como por exemplo o polimorfismo. let f x y = x + y let f x = hd x O problema da inferência de tipos nem sempre é decidível
4 Linguagens funcionais simplesmente tipados O núcleo da linguagem OCaml O problema da inferência de tipos pode ser colocado num enquadramento muito geral mas conceptualmente muito simples: o λ-cálculo simplesmente tipado. Não há distinção entre valores de base e valores funcionais (como já é o caso no OCaml).
5 Descrição dos tipos Os tipos são (definição indutiva): os tipos de base (inteiros, booleanos, unidade, reais, etc ) construtores de tipos aplicados a tipos (τ 1 τ 2, τ list,...) tipos funcionais τ 1 τ 2. (tipos das funções que aceitam em entrada um elemento de tipo τ 1 e calculam um resultado de tipos τ 2 )
6 Expressões As expressões são (definição indutiva): variáveis introduzidas como parâmetros de funções declaradas pelo utilizador/programador constantes primitivas (podem ser funcionais) Aplicação (f e) duma expressão f (representando uma função) a uma expressãoe (o argumento). abstracção relativamente a uma variável (também chamada de abstracção λ) fun x e Representa a função que a todo o valor v do parâmetro formal x associa o resultado da avaliação de e no qual x foi substituído por v.
7 Programa Um programa é uma sequência de declarações. Cada declaração tem a forma: let x = e let f = fun x e Este formalismo é minimal, mas é surpreendentemente rico: é um dos formalismos equivalente às máquinas de Turing (isto é de facto o famoso λ cálculo de Church), por isso é uma linguagem de programação tão expressiva que o C ou o Java.
8 Expressões complexas A partir dos elementos previamente introduzidos podemos expressar todas as construções habituais das linguagens de programação. Para simplificar vamos aqui assumir a existência de alguma delas. (i.e. vamos atribuir nomes a funções previamente e assumidamente definidas) cond τ : bool τ τ τ cond τ b t 1 t 2 if b then t 1 else t 2 for : int int (int unit) unit for i 1 i 2 f for i = i 1 to i 2 do (f i) done
9 Caso das funções Declarações clássicas de funções: se traduz em let f (x 1 : τ 1 ;... ; x : τ 2 ) : τ = e let f = fun x 1... fun x n e com f de tipo τ 1... τ n t. Esta tradução é válida quando f não é recursiva.
10 Caso das funções recursivas Utilizar um operador de ponto fixo designado de fix: let f = fix(fun f fun x 1... fun x n e) Se F tem por tipo φ φ então (fix F ) tem por tipo φ. A constante fix tem por tipo (φ φ) φ. No nosso exemplo φ τ 1... τ n τ
11 Tipagem Juizo de tipagem: Γ e : τ e é uma expressão, τ é um tipo e Γ é um ambiente, i.e. um conjunto de declarações tipadas de variáveis, {x 1 : τ 1,..., x n : τ n } Cada constante primitiva c tem um tipo associado designado de τ(c)
12 Regras de tipagem Uma regra de tipagem por construção da linguagem Constantes Variaveis Aplicação Γ c : τ(c) x : τ Γ Γ x : τ Γ f : τ 1 τ 2 Γ e : τ 1 Γ (f e) : τ 2 Abstacção Γ, x : τ 1 e : τ 2 Γ fun x e : τ 1 τ 2
13 inferência Um conjunto de variáveis visíveis x 1, x 2..., x n Um termo e Existirá tipos τ 1, τ 2..., τ n e τ tais que x 1 : τ 1, x 2 : τ 2..., x n : τ n e : τ Problema: Vários tipos possíveis... Solução definir o conjunto dos tipos possíveis por um esquema de tipo (tipo com variáveis)
14 Esquemas de tipo Juntar variáveis nas expressões de tipos. Os esquemas de variáveis são assim (definição indutiva): Variáveis de tipo α, β,... Tipos de base (inteiros, booleanos, unidade,...) Construtores e tipos aplicados a esquemas de tipos. (σ 1 σ 2, σ list,...) esquemas de tipos funcionais σ 1 σ 2
15 Ligações entre tipos e esquemas de tipos Um tipo é um esquema de tipo fechado, isto é, que não contém variáveis de tipos. Uma substituição é uma aplicação ρ do conjunto das variáveis de tipo no conjunto dos esquemas de tipo. Esta aplicação tem um suporte finito: ρ(α) = α excepto para um número finito de variável α 1, α 2,..., α n. Notação: ρ = {α 1 σ 1,..., α n σ n } com σ i = ρ(α i )
16 Substituição Uma substituição ρ define uma aplicação ρ dos esquemas de tipos para os esquemas de tipos. Substituir cada variável de tipo α por ρ(alpha) Variáveis: ρ (α) = ρ(α) Constantes: ρ (c) = c Construtores: ρ (σ 1... σ n c) = ρ (σ 1 )... ρ (σ n )c Nota. Funções: [ρ](σ 1 σ 2 ) = [ρ](σ 1 ) [ρ](σ 2 ) Por conveniência utilizaremos a notação ρ(σ) no lugar de [ρ](σ) As substituições podem ser compostas: ρ 1 ρ 2 = {α i ρ 1 (ρ 2 (α i ))}
17 Exemplo σ = (α βα) α β list α ρ = {α bool, β α int} ρ(σ) = (bool α int bool) bool (α int) list bool
18 Instanciação Um esquema de tipo σ representa um conjunto de tipos Types(σ) {ρ 0 (sigma) ρ 0 substituição de tipos (sem variáveis)}. Um esquema de tipo σ 1 é mais geral que um esquema de tipo σ 2 se existe uma substituição ρ tal que Ou seja Types(σ 2 ) Types(σ 1 ). Notação: σ 2 σ 1 ρ(σ 1 ) = σ 2
19 Tipagem com esquemas Precisamos de adaptar as definições. Novo juízo de tipagem: Γ e : σ, Com Γ = x 1 : σ 1,, x n : σ n e σ i e σ esquemas de tipos. Verificado se toda a substituição ρ sem variável: x 1 : ρ(σ 1 ),..., x n : ρ(σ n ) e : ρ(σ) Possibilidade de associar esquemas de tipos (σ(c)) às constantes. cond : bool α α α
20 Regras de tipagem Semelhante ao caso dos tipos. Constantes Variaveis Aplicação Γ c : ρ(σ(c)) x : σ Γ Γ x : σ Γ f : σ 1 σ 2 Γ e : σ 1 Γ (f e) : σ 2 Abstacção Γ, x : σ 1 e : σ 2 Γ fun x e : σ 1 σ 2
21 Tipos e instanciação Se x 1 : σ 1,..., x n : σ n e : σ então, para toda a substituição ρ temos: x 1 : ρ(σ 1 ),..., x n : ρ(σ n ) e : ρ(σ) Por exemplo fun x x : α α mas igualmente fun x x : σ σ para qualquer esquema de tipo σ.
22 inferência restrita Consideremos n variáveis (x 1,..., x n ), um termo e e (n + 1) esquemas de tipos σ 1, σ 2,..., σ n e σ. Vamos descrever um algoritmo que decide se existe uma substituição ρ tal que x 1 : ρ(σ 1 ),..., x n : ρ(σ n ) e : ρ(σ) Inferência geral: Consideramos variáveis de tipo distintas α 1,..., α n, α: ρ.x 1 : ρ(α 1 ),..., x n : ρ(α n ) e : ρ(α) τ 1,..., τ n, τ.x 1 : τ 1,..., x n : τ n e : τ
23 Equações entre esquemas de tipos Problema de unificação. Dizemos que σ 1 e σ 2 são unificáveis (notação σ 1 σ 2 ) se existe uma substituição ρ tal que ρ(σ 1 ) = ρ(σ 2 ). Propriedades. Se ρ(σ 1 ) = ρ(σ 2 ) então para toda a substituição ρ temos igualmente (ρ ρ)(σ 1 ) = (ρ ρ)(σ 2 ) Existência duma solução a mais geral possível (designada de principal) ρ p : ρ p (σ 1 ) = ρ p (σ 2 ) ρ(σ 1 ) = ρ(σ 2 ) = ρ.ρ = ρ ρ p A substituição minimal descreve o conjunto das soluções
24 Unificações - Exemplos int int? = α:? = bool {α int} Falha α α α? = β? = β array? = α array {α β} {α β array} Falha(ou solução recursivamente infinita) (α β array β)list (α β array β)list? = ((β β)list θ int)list {α (int int)list; β int; θ int array}? = ((β β)list float array int)list Falha? (int = float)
25 Inferência minimal Quando uma substituição ρ existe tal que x 1 : ρ(σ 1 ),..., x n : ρ(σ n ) e : ρ(σ) então existe uma substituição principal ρ p, i.e.: x 1 : ρ p (σ 1 ),..., x n : ρ p (σ n ) e : ρ p (σ) e para todo o ρ tal que x 1 : ρ(σ 1 ),..., x n : ρ(σ n ) e : ρ(σ) então existe uma substituição ρ tal que ρ = ρ ρ p
26 Algoritmo de inferência O algoritmo aceita em argumento o contexto Γ = x 1 : σ 1,..., x n : σ n, o termo e para o qual pretendemos encontrar o tipo, e o esquema de tipos σ associado. Este algoritmo falha se não existir de substituição ρ tal que x 1 : ρ(σ 1 ),..., x n : ρ(σ n ) e : ρ(σ) Senão, este retorna a substituição principal que verifica este juizo. O algoritmo procede por analise/recursividade estrutural sobre a expressão e.
27 Algoritmo de inferência - Caso a caso Constante: e = c. Γ c : ρ(σ(c)) Para toda a substituição ρ. Ou seja x 1 : ρ(σ 1 ),..., x n : ρ(σ n ) e : ρ(σ) se e só se ρ(σ) = ρ(σ(c)). O problema aqui traduz-se em procurar se existe uma substituição ρ tal que ρ(σ) = ρ(σ(c)), ou seja um problema de unificação σ = σ(c). Ou temos uma solução ou não há soluções. Variável: e = x. Γ x : φ se e só se x : φ Γ. Ou seja, é um problema de scope ou visibilidade. Se x 1 : ρ(σ 1 ),..., x n : ρ(σ n ) e : ρ(σ) se e só se x = x i (visibilidade) e se ρ(σ i ) = ρ(σ) i.e. σ i = σ
28 Algoritmo de inferência - Caso a caso Γ e 1 : φ ψ Γ e 2 : φ Aplicação: e = (e 1 e 2 ). A regra é: Γ (e 1 e 2 ) : ψ Nova variável de tipo α. Procura-se uma substituição tal que: x 1 : ρ(σ 1 ),..., x n : ρ(σ n ) e 1 : ρ(α σ) e x 1 : ρ(σ 1 ),..., x n : ρ(σ n ) e 2 : ρ(α) 1 Chamada recursiva com Γ = x 1 : σ 1,..., x n : σ n, e = e 1 e σ = α σ. ρ 0 principal tal que x 1 : ρ 0 (σ 1 ),..., x n : ρ 0 (σ n ) e 1 : ρ 0 (α σ) 2 Chamada recursiva com Γ = x 1 : ρ 0 (σ 1 ),..., x n : ρ 0 (σ n ), e = e 2 e σ = ρ 0 (α). ρ 1 principal tal que x 1 : ρ 1 (ρ 0 (σ 1 )),..., x n : ρ 1 (ρ 0 (σ n )) e 2 : ρ 1 (ρ 0 (α)) 3 Como temos x 1 : ρ 1 (ρ 0 (σ 1 )),..., x n : ρ 1 (ρ 0 (σ n )) e 1 : ρ 1 (ρ 0 (α)) ρ 1 (ρ 0 (σ)), então a substituição procurada é: ρ 1 ρ 0
29 Algoritmo de inferência - Caso a caso Γ, x : φ e : ψ Função: e = funx e. A regra é: Γ fun x e : φ ψ Pretendemos encontrar uma substituição ρ tal que ρ(σ) = φ psi com x 1 : ρ(σ 1 ),..., x n : ρ(σ n ), x : φ e : ψ 1 Considera-se duas variáveis α e β. Chamada recursiva com Γ = x 1 : σ 1,..., x n : σ n, x : α, e = e e σ = β. Temos ρ 0 tal que x 1 : ρ 0 (σ 1 ),..., x n : ρ 0 (σ n ), x : ρ 0 (α) e : ρ 0 (β) 2 Encontrar ρ 1 (principal) tal que ρ 1 (σ) = ρ 1 (ρ 0 (α β)) i.e. σ ρ 0 ()α β 3 A substituição ρ 1 ρ 0 é a solução procurada.
30 Exemplos Qual é o tipo de fun n fun f fun x f (n f x)? n : α, f : β, xγ f : β 1 β 2. Solução: {β (β 1 β 2 )} n : α, f : β 1 β 2, x : γ n f x : β 1 n : α, f : β 1 β 2, x : γ n f : α 1 β 1 n : α, f : β 1 β 2, x : γ n f x : α 2(α 1 β 1) Solução {α α 2(α 1 β 1)} n : α 2 (α 1 β 1), f : β 1 β 2, x : γ f : α 2 Solução {α 2 (β 1 β 2)} n : (β 1 β 2 ) (α 1 β 1 ), f : β 1 β 2, x : γ x : α 1 Solução {γ α 1 } n : (β 1 β 2 ) (α 1 β 1 ), f : β 1 β 2, x : α 1 f (nfx) : β 2
31 Exemplos Tipo de fun x (x x)? x : α x x : β 1 x : α x : β 1 β 2. Solução {α (β 1 β 2 ); β (β 1 β 2 )} 2 x : β 1 β 2 x : β 1 Solução para β 1 β 2 β 1? Falha. Não existe solução finita.
Paradigmas de Programação
Paradigmas de Programação Fabrício Olivetti de França 14 de Junho de 2018 1 λ-cálculo 2 Computabilidade Computabilidade é uma área de estudo central da Ciência da Computação. Ela estuda a possibilidade
Leia maisSistemas de Tipos. Cristiano Damiani Vasconcellos.
1 / 24 Sistemas de Tipos Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br Departamento de Ciência da Computação Universidade do Estado de Santa Catarina Tipos 2 / 24 Tipos: Coleção de valores
Leia maisAula Prática 2. Paradigmas da Programação I / Programação Funcional
Aula Prática 2 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se introduzir os conceitos seguintes: valores e expressões; tipos básicos e tipos compostos;
Leia mais1 Lógica de primeira ordem
1 Lógica de primeira ordem 1.1 Sintaxe Para definir uma linguagem de primeira ordem é necessário dispor de um alfabeto. Este alfabeto introduz os símbolos à custa dos quais são construídos os termos e
Leia maisAnálise Semântica e Representação Intermédia
Análise Semântica e Representação Intermédia Compiladores, Aula Nº 22 João M. P. Cardoso 1 Representação do fluxo de controlo Nós de enunciados Nó if Árvore de expressão para a condição Nó para o corpo
Leia maisIntuição da sintaxe de L2 (35)
2.2 A Linguagem L2 2.2 A Linguagem L2 A linguagem L2 é uma extensão de L1 com funções recursivas, memória (acesso e atualização de variáveis), sequência de comandos ( ; ) e laço de repetição while. Primeiro,
Leia maisCompiladores Análise de Tipos
Compiladores Análise de Tipos Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem
Leia maisAnálise Semântica e Representação Intermédia
Análise Semântica e Representação Intermédia Compiladores Cristina C. Vieira 1 Representação do fluxo de controlo Nós de enunciados Nó if Árvore de expressão para a condição Nó para o corpo do then e nó
Leia maisCompiladores Análise de Tipos
Compiladores Análise de Tipos Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem
Leia maisCompiladores Análise de Tipos
Compiladores Análise de Tipos Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem
Leia maisCompiladores Análise de Tipos
Compiladores Análise de Tipos Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem
Leia maisLógica Computacional (CC2003)
Lógica Computacional (CC2003) Nelma Moreira Lógica Computacional 21 Conteúdo 1 Mais Teorias (decidíveis) 1 1.1 Resolução para a lógica proposicional................ 4 1.2 Cláusulas...............................
Leia maisProgramas em L1 pertencem ao conjunto de árvores de sintaxe abstrata definido pela gramática abstrata abaixo:
1 Semântica Operacional e Sistemas de Tipos Vamos definir a semântica operacional de uma série de linguagens no estilo conhecido por semântica operacional estrutural chamado também de semântica operacional
Leia maisPrimeira Prova de Linguagens de Programação - DCC024 -
Primeira Prova de Linguagens de Programação - DCC024 - Ciência da Computação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem consulta.
Leia maisConceitos de Linguagem de Programação - 2
Conceitos de Linguagem de Programação - 2 Arthur Jovita Guerra Thalles Santos Silva Universidade Estadual de Santa Cruz - Ilhéus, BA 1 de novembro de 2011 1 Revisão Natureza das linguagens de Programação
Leia maisSistemas de Tipos. Cristiano Damiani Vasconcellos.
1 / 35 Sistemas de Tipos Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br Departamento de Ciência da Computação Universidade do Estado de Santa Catarina Tipos 2 / 35 Tipos: Coleção de valores
Leia maisComputação efectiva. Que linguagens podem ser reconhecidas por algum tipo de autómato?
Computação efectiva Que linguagens podem ser reconhecidas por algum tipo de autómato? O que é ser computável? Que linguagens são computáveis? Existem linguagens que não são computáveis? Isto é, existem
Leia maisNelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 20
Fundamentos de Linguagens de Programação Nelma Moreira Departamento de Ciência de Computadores da FCUP Fundamentos de Linguagens de Programação Aula 20 Nelma Moreira (DCC-FC) Fundamentos de Linguagens
Leia maisFórmulas da lógica proposicional
Fórmulas da lógica proposicional As variáveis proposicionais p, q, são fórmulas (V P rop ) é fórmula (falso) α e β são fórmulas, então são fórmulas (α β), (α β), (α β) e ( α) DCC-FCUP -TAI -Sistemas Dedutivos
Leia maisProgramação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos
Programação com Objectos Processamento de Dados I 2. Classes, Atributos e Métodos 1 Classes, Atributos e Métodos Modificadores de acesso (visibilidade) Sobrecarga de métodos (method overloading) Variáveis
Leia maisComo podemos provar que este programa termina com x = 100. Correr o programa seguindo a sua semântica operacional é uma opção.
Verificação Automática de Programas Consideremos o seguinte programa para calcular 100 m=1 m: x:=0; y:=1; (while y!=101 do x:=x+y;y:=y+1) Como podemos provar que este programa termina com x = 100 m=1 m.
Leia maisTrabalho de Desenho de Linguagens de Programação e de Compiladores. Mini Pascal
Trabalho de Desenho de Linguagens de Programação e de Compiladores Mini Pascal (cod. 11482) Departamento de Informática Universidade da Beira Interior Ano lectivo 2015/2016 1 Introdução Este trabalho é
Leia maisSEMÂNTICA 02/09/2013. Conceitos de LPs - Semântica
UNIVERSIDADE ESTADUAL DE SANTA CRUZ CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: CONCEITOS DE LINGUAGENS DE PROGRAMAÇÃO DOCENTE: ROGÉRIO VARGAS DISCENTE: MARIANNA NOVAES Semântica SEMÂNTICA Semântica é a área
Leia maisLinguagens de Programação Funcional
Linguagens de Programação Funcional Conceitos de Linguagens de Programação Pedro Libório Setembro de 2013 2 Roteiro Introdução Funções matemáticas Fundamentos das linguagens de programação funcionais A
Leia maisAnalise Semântica. Simão Melo de Sousa
Analise Semântica Simão Melo de Sousa RELEASE - RELiablE And SEcure Computation Group Computer Science Department University of Beira Interior, Portugal desousa@di.ubi.pt http://www.di.ubi.pt/ desousa/
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/lp Let é açúcar sintático Notem a semelhança no interpretador entre o código de let e o código de aplicar uma função
Leia maisNHI Lógica Básica (Lógica Clássica de Primeira Ordem)
NHI2049-13 (Lógica Clássica de Primeira Ordem) página da disciplina na web: http://professor.ufabc.edu.br/~jair.donadelli/logica O assunto O que é lógica? Disciplina que se ocupa do estudo sistemático
Leia maisLógica Computacional Frequência. Universidade da Beira Interior
Lógica Computacional Frequência Duração: 2 horas Universidade da Beira Interior Segunda-Feira 9 de Janeiro de 2017 Prova sem consulta de material pedagógico. É proibido o uso de calculadora e de telemóvel.
Leia maisCapítulo II Gramáticas
Capítulo II Gramáticas II.1 Motivação O que é uma Gramática? Um sistema gerador de linguagens; Um sistema de reescrita; Uma maneira finita de representar uma linguagem; Um dispositivo formal usado para
Leia maisComputação Fiável Indução - exercícios básicos
Computação Fiável Indução - exercícios básicos Simão Melo de Sousa 17 de Outubro de 2011 Conteúdo 1 Indução Estrutural 1 2 Indução Bem Fundada 9 1 Indução Estrutural Exercício 1 Demonstre por indução estrutural
Leia maisINF Semântica Formal - Prova II /1
INF05516 - Semântica Formal - Prova II - 2009/1 Nome: Número: Instruções: Todas as questões são relativas a linguagem L3 sem subtipos, exceto quando explicitamente mencionado. A duração da prova é de 100
Leia maisProgramação por Objectos. Java
Programação por Objectos Java Parte 6: Herança e Polimorfismo LEEC@IST Java 1/50 Herança revisão (1) A herança é um mecanismo em que a subclasse constitui uma especialização da superclasse. A superclasse
Leia maisVerificação Formal de Software Aula 22
Verificação Formal de Software Sandra Alves & Nelma Moreira Verificação Formal de Software Aula 22 Contratos e Recursão mútua Até este ponto não distinguimos programas de comandos; Vamos definir formalmente
Leia maisIntrodução Maquinas de Turing universais O problema da parada. Indecidibilidade. Rodrigo Gabriel Ferreira Soares DEINFO - UFRPE.
DEINFO - UFRPE Julho, 2014 Motivação Introdução O que pode ser computado? E mais intrigantemente, o que não pode ser computado? Motivação Introdução O que pode ser computado? E mais intrigantemente, o
Leia maisPROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@gmail.com
Leia maisNelma Moreira. Aula 17
Lógica e Programação Nelma Moreira Aula 17 Conteúdo 1 Programação em Lógica 1 1.1 Resolução para a lógica proposicional................ 1 1.2 Cláusulas............................... 3 1.3 Conversão para
Leia maisCapítulo 2: Procedimentos e algoritmos
Capítulo 2: Procedimentos e algoritmos Para estudar o processo de computação de um ponto de vista teórico, com a finalidade de caracterizar o que é ou não é computável, é necessário introduzir um modelo
Leia maisNelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 12
Fundamentos de Linguagens de Programação Nelma Moreira Departamento de Ciência de Computadores da FCUP Fundamentos de Linguagens de Programação Aula 12 Nelma Moreira (DCC-FC) Fundamentos de Linguagens
Leia maisAula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006)
Aula Prática 3 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se que os alunos: consolidem os conceitos de expressão, tipo e redução; compreendam a
Leia maisDedução Natural e Sistema Axiomático Pa(Capítulo 6)
Dedução Natural e Sistema Axiomático Pa(Capítulo 6) LÓGICA APLICADA A COMPUTAÇÃO Professor: Rosalvo Ferreira de Oliveira Neto Estrutura 1. Definições 2. Dedução Natural 3. Sistemas axiomático Pa 4. Lista
Leia maisAnálise Sintática Introdução
Análise Sintática Introdução Renato Ferreira Linguagens e Automatas Linguagens formais são importantes em Computação Especialmente em linguagens de programação Linguagens regulares A linguagem formal mais
Leia maisLógica Computacional DCC/FCUP 2017/18
2017/18 Raciocínios 1 Se o André adormecer e alguém o acordar, ele diz palavrões 2 O André adormeceu 3 Não disse palavrões 4 Ninguém o acordou Será um raciocínio válido? Raciocínios Forma geral do raciocínio
Leia maisCapítulo 3 Lógica de Primeira Ordem
Capítulo 3 Lógica de Primeira Ordem Lógica para Programação LEIC - Tagus Park 1 o Semestre, Ano Lectivo 2007/08 c Inês Lynce and Luísa Coheur Bibliografia Martins J.P., Lógica para Programação, Capítulo
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções
Programação Funcional 3 a Aula Definição de funções Pedro Vasconcelos DCC/FCUP 2014 Definição de funções Podemos definir novas funções simples usando funções pré-definidas. minuscula :: Char -> Bool minuscula
Leia maisCompiladores Análise Semântica
Compiladores Análise Semântica Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,
Leia maisMarcos Castilho. DInf/UFPR. 16 de maio de 2019
16 de maio de 2019 Motivação Quais são os limites da computação? O que é um Problema de decisão? Um problema de decisão é um conjunto de perguntas, cada uma das quais tem um SIM ou um NÃO como resposta.
Leia maisLógica Computacional
Aula Teórica 2: Sintaxe da Lógica Proposicional António Ravara Simão Melo de Sousa Departamento de Informática, Faculdade de Ciências e Tecnologia, Universidade Nova de Lisboa Departamento de Informática,
Leia maisLÓGICA DE PROGRAMAÇÃO (JAVA) CLASSES E OBJETOS. Professor Carlos Muniz
LÓGICA DE PROGRAMAÇÃO (JAVA) Classes Uma classe é um tipo definido pelo usuário que contém o molde, a especificação para os objetos, algo mais ou menos como o tipo inteiro contém o molde para as variáveis
Leia maisVariável. Expressões. Atribuição. Tipos básicos Declaração. Aritméticas Lógicas. Professor Leandro Augusto Frata Fernandes
Programação de Computadores III Aula 3 Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2011.1/tcc-03.063 Roteiro da Aula
Leia maisO Cálculo λ sem Tipos
Capítulo 2 O Cálculo λ sem Tipos 21 Síntaxe e Redução Por volta de 1930 o cálculo lambda sem tipos foi introduzido como uma fundação para a lógica e a matemática Embora este objectivo não tenha sido cumprido
Leia maisCentro Universitário do Triângulo
Centro Universitário do Triângulo Cálculo Lambda 1. Introdução A elaboração de modelos de computação (resolução de problemas por uma máquina) baseia-se em trabalhos de dois pesquisadores com enfoques bastante
Leia maisProgramação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Leia maisInterpretação e Compilação de Linguagens de Programação Ligação e âmbito
Interpretação e Compilação de Linguagens de Programação Ligação e âmbito 8 de Março de 2013 Nesta aula serão introduzidas algumas das noções fundamentais no desenho de qualquer linguagem de programação.
Leia maisVerificação Formal de Software
Verificação Formal de Software Nelma Moreira & Sabine Broda Departamento de Ciência de Computadores da FCUP Verificação Formal de Software Aula 16 Nelma Moreira (DCC-FC) Verificação Formal de Software
Leia maisSEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.
SEMÂNTICA program simples = var x : int := 3 in x := x + 5 end. rode =? Rogério Rocha Roteiro Introdução Sintaxe Semântica Dinâmica (Métodos formais) Operacional Axiomática Denotacional Estática Conclusão
Leia maisprinting problem: dado um programa e um valor arbitrários, o problema de determinar se sim ou não se vai obter como output do programa esse valor;
1 Introdução 1 No texto que se segue vão ser apresentados resultados sobre não decidibilidade de alguns predicados (sobre os naturais). Para certos predicados vai ser apresentada uma prova de que não é
Leia maisLógica Computacional
Aula Teórica 2: da Lógica Proposicional António Ravara Simão Melo de Sousa Departamento de Informática, Faculdade de Ciências e Tecnologia, Universidade Nova de Lisboa Departamento de Informática, Faculdade
Leia maisEntão (τ x, ) é um conjunto dirigido e se tomarmos x U U, para cada U vizinhança de x, então (x U ) U I é uma rede em X.
1. Redes Quando trabalhamos no R n, podemos testar várias propriedades de um conjunto A usando seqüências. Por exemplo: se A = A, se A é compacto, ou se a função f : R n R m é contínua. Mas, em espaços
Leia maisCapítulo II Gramáticas
Capítulo II Gramáticas II.1 Motivação O que é uma Gramática? Um sistema gerador de linguagens; Um sistema de reescrita; Uma maneira finita de representar uma linguagem; Um dispositivo formal usado para
Leia maisProgramação de Computadores I. Professor Ilaim Costa Junior
Programação de Computadores I Professor Ilaim Costa Junior ilaim@ic.uff.br Roteiro da Aula de Hoje ariável Tipos básicos Declaração Expressões Aritméticas Lógicas Atribuição 2 ariável Representa uma região
Leia maisTipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 11 Tipos Algébricos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/33 1 Tipos Algébricos 2/33 Tópicos 1 Tipos Algébricos 3/33
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/lp Expressões condicionais Scala tem uma expressão if-else para expressar escolha entre alternativas que se parece muito
Leia mais4 Simbolização de enunciados 24
Matemática Discreta Tópicos da Linguagem e da Lógica Matemáticas Texto da Semana 1, Parte 3 Simbolização de Enunciados Sumário 1 Conectivos e simbolização dos conectivos 18 2 Enunciados componentes 18
Leia maisProgramação Orientada a Objetos
Programação Orientada a Objetos Faculdade de Computação Aula Revisão Marcelo Zanchetta do Nascimento Material elaborado pela Profa. Ana Carolina Lorena - UNIFESP Desenvolvimento de Software ANÁLISE IMPLEMENTAÇÃO
Leia maisInstituto Federal de Educação, Ciência e Tecnologia do RN Câmpus Currais Novos. LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I
LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I Prof. Bruno E. G. Gomes Uma variável em um algoritmo pode ser vista como uma gaveta. A declaração de uma variável reserva uma gaveta (posição) de um certo
Leia maisMatemática Discreta para Ciência da Computação
Matemática Discreta para Ciência da Computação P. Blauth Menezes blauth@inf.ufrgs.br Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação
Leia maisLógica Computacional
Lógica Computacional Modus Ponens e Raciocínio Hipotético Introdução e eliminação da Implicação e da Equivalência Completude e Coerência do Sistema de Dedução Natural 24 Outubro 2016 Lógica Computacional
Leia maisCompiladores Ficha de exercícios práticos
Compiladores Ficha de exercícios práticos Simão Melo de Sousa Ano lectivo 2004/2005 O objectivo desta ficha é a implementação dos pequenos programas ou funções sugeridos pelo enunciado dos exercícios seguintes.
Leia maisSobre Equações Recursivas e Construções de Ponto Fixo Parte I
Sobre Equações Recursivas e Construções de Ponto Fixo Parte I Alfio Martini www.inf.pucrs.br/alfio Clube de Lógica em Ciência da Computação Faculdade de Informática - PUCRS 19 de setembro de 2013 Sumário
Leia maisProcessamento de Linguagens e Compiladores
Processamento de Linguagens e Compiladores LMCC, Universidade do Minho Ano lectivo 2005/2006 João Saraiva Ficha TeóricoPrática N o 1 Este texto está escrito em literate Haskell. Isto é, pode ser interpretado
Leia maisTÉCNICO DE INFORMÁTICA - SISTEMAS
782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp Introdução Quais das expressões abaixo têm o mesmo significado? (vector-ref a 42) Introdução Quais das expressões
Leia mais02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre maiúsculas e minúsculas?
01. [Sebesta, 2000] Quais são as questões de projeto referentes a nomes? Nomes, Vinculações, Verificação de Tipos e Escopos 02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre
Leia maisPrimeira Prova de Linguagens de Programação - DCC024 - Sistemas de Informação
Primeira Prova de Linguagens de Programação - DCC024 - Sistemas de Informação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem
Leia maisCompiladores - Gramáticas
Compiladores - Gramáticas Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura do programa
Leia maisintrodução de um novo valor semântico de erro; e A[E 2 ]s 0 erro erro se B [b]s = erro
Propriedades de segurança Na semântica que consideramos todas as expressões avaliam para um determinado valor e os comandos executam sem provocarem s. Vamos considerar algumas alterações que aproximem
Leia maisTeoria da Computação. Computabilidade e complexidade computacional
Teoria da Computação Computabilidade e complexidade computacional 1 Computabilidade e Complexidade Computabilidade: verifica a existência de algoritmos que resolva uma classe de linguagens trata a possibilidade
Leia maisParadigmas de Linguagem de. Programação Profª. Roberta B Tôrres de programação referem-se a:
Paradigmas de Linguagem de Programação Conceitos Elementares Profª. Roberta B Tôrres rbtorresiff@gmail.com Conceitos Elementares de uma Linguagem de Programação Os conceitos mais elementares, suportados
Leia maisSéries Temporais e Modelos Dinâmicos. Econometria. Marcelo C. Medeiros. Aula 4
em Econometria Departamento de Economia Pontifícia Universidade Católica do Rio de Janeiro Aula 4 O Processo Média-Móvel Muitas vezes, a estrutura auto-regressiva não é suficiente para descrever totalmente
Leia maisComo construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 1 - Introdução Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir um
Leia maisMódulo II: Implementação do λ-calculus
Módulo II: Implementação do λ-calculus 0 Módulo II: Implementação do λ-calculus MCC - 2 o ano José Bernardo Barros (jbb@di.uminho.pt) José Carlos Bacelar Almeida (bacelar@di.uminho.pt) Departamento de
Leia maisCompiladores - Gramáticas
Compiladores - Gramáticas Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura do programa
Leia maisFundamentos de Programação
Fundamentos de Programação Solução do Segundo Teste 23 de Janeiro de 2012 09:00 10:30 Nome: Número: 1. (1.0) Explique em que consiste a abstracção de dados, usando os termos barreiras de abstracção, encapsulação
Leia maisV.2 Especificação Sintática de Linguagens de Programação
V.2 Especificação Sintática de Linguagens de Programação Deve ser baseada: No planejamento da Linguagem / Compilador Objetivos, Filosofia, Potencialidades,... Nos critérios de projeto/avaliação Legibilidade,
Leia maisLinguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos
Linguagem de Programação II Programação Orientada a Objetos Orientação a Objetos Prof. Alessandro Borges 2 Tópicos Introdução à Programação Orientada a Objetos Conceitos Objetivos Classes e Objetos Atributos
Leia maisLinguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática
Linguagens Formais Aula 01 - Conceitos Básicos Prof. Othon Batista Mestre em Informática Sumário Introdução à Linguagem Alfabeto Cadeias de Símbolos, Palavras Tamanho de Palavra Prefixo, Sufixo ou Subpalavra
Leia maisPROGRAMAÇÃO ORIENTADA A OBJETOS JAVA
PROGRAMAÇÃO ORIENTADA A OBJETOS JAVA PÁTIO DE MATERIAIS Discente: Nielson Soares Disciplina: Algoritmo e Estrutura de Dados INTRODUÇÃO Orientação a objetos. Linguagem de programação JAVA. Pátio de matérias
Leia maisSemântica Denotacional
Semântica Denotacional Uma introdução ISBN 0-321-19362-8 Semântica denotacional é um método formal para definir a semântica de linguagens de programação. Interessa a: projetista de linguagens, quem escreve
Leia maisACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 18. Cap O Problema da Parada
ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO Aula 18 Cap 4.2 - O Problema da Parada Profa. Ariane Machado Lima ariane.machado@usp.br 1 Nas últimas aulas Tese de Church-Turing Problemas computacionais descritos
Leia maisInterpretação e Compilação de Linguagens de Programação Semântica CALCI com Ambiente
Interpretação e Compilação de Linguagens de Programação Semântica CALCI com Ambiente 14 de Março de 2013 Nesta aula apresenta-se uma definição mais eficiente da semântica operacional da linguagem CALCI.
Leia maisIntrodução à Programação. Uma Abordagem Funcional
Introdução à Programação Uma Abordagem Funcional Tipos em Haskell Linguagem fortemente tipada Em Haskell, conhecendo-se o tipo das operações e funções que compõem uma expressão podemos determinar o tipo
Leia maisNomes, Amarração, Verificação de Tipos, e Escopo
5 Nomes, Amarração, Verificação de Tipos, e Escopo Concepts of Programming Languages, 5/e Robert W. Sebesta Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave
Leia maisCompiladores Análise Semântica
Compiladores Análise Semântica Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Semântica Muitos erros no programa não podem ser detectados sintaticamente, pois precisam de contexto
Leia maisProgramação Funcional - Introdução a Cálculo Lambda
Programação Funcional - Introdução a Cálculo Lambda Cristiano Damiani Vasconcellos Universidade do Estado de Santa Catarina 1. Definição Cálculo lambda (λ-cálculo) é um modelo matemático capaz de ilustrar
Leia maisParadigmas de Linguagens
Paradigmas de Linguagens Aula 2: Tipos de dados Professora Sheila Cáceres Tipos de dados Dados são a matéria prima da computação junto com os programas. LPs precisam manipular dados. LPS utilizam os conceitos
Leia maisLógica Proposicional
Lógica Proposicional Lógica Computacional Carlos Bacelar Almeida Departmento de Informática Universidade do Minho 2007/2008 Carlos Bacelar Almeida, DIUM LÓGICA PROPOSICIONAL- LÓGICA COMPUTACIONAL 1/28
Leia maisTécnicas de análise de algoritmos
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Técnicas de análise de algoritmos Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ nataliabatista@decom.cefetmg.br
Leia maisLayout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs
Layout Ao contrário de quase todas as linguagens de programação, o Haskell não necessita de marcas para delimitar as diversas declarações que constituem um programa. Em Haskell a identação do texto (isto
Leia maisIntrodução à Linguagem de Programação Java 1 INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO JAVA
1 INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO JAVA 2 INDICE 1. COMENTÁRIOS... 4 1.1. Comentário de uma linha... 4 1.2. Comentário de múltiplas linhas... 4 2. IMPRESSÃO DE TEXTOS... 5 2.1. Imprimindo um texto
Leia maisCompiladores Análise Semântica
Compiladores Análise Semântica Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,
Leia mais