Compiladores. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal. S. Melo de Sousa Compiladores

Tamanho: px
Começar a partir da página:

Download "Compiladores. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal. S. Melo de Sousa Compiladores"

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 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 mais

Sistemas de Tipos. Cristiano Damiani Vasconcellos.

Sistemas 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 mais

Aula Prática 2. Paradigmas da Programação I / Programação Funcional

Aula 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 mais

1 Lógica de primeira ordem

1 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 mais

Análise Semântica e Representação Intermédia

Aná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 mais

Intuição da sintaxe de L2 (35)

Intuiçã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 mais

Compiladores Análise de Tipos

Compiladores 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 mais

Análise Semântica e Representação Intermédia

Aná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 mais

Compiladores Análise de Tipos

Compiladores 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 mais

Compiladores Análise de Tipos

Compiladores 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 mais

Compiladores Análise de Tipos

Compiladores 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 mais

Lógica Computacional (CC2003)

Ló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 mais

Programas em L1 pertencem ao conjunto de árvores de sintaxe abstrata definido pela gramática abstrata abaixo:

Programas 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 mais

Primeira Prova de Linguagens de Programação - DCC024 -

Primeira 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 mais

Conceitos de Linguagem de Programação - 2

Conceitos 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 mais

Sistemas de Tipos. Cristiano Damiani Vasconcellos.

Sistemas 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 mais

Computaçã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? 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 mais

Nelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 20

Nelma 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 mais

Fórmulas da lógica proposicional

Fó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 mais

Programaçã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 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 mais

Como podemos provar que este programa termina com x = 100. Correr o programa seguindo a sua semântica operacional é uma opção.

Como 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 mais

Trabalho 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 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 mais

SEMÂNTICA 02/09/2013. Conceitos de LPs - Semântica

SEMÂ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 mais

Linguagens de Programação Funcional

Linguagens 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 mais

Analise Semântica. Simão Melo de Sousa

Analise 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 mais

Linguagens de Programação

Linguagens 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 mais

NHI Lógica Básica (Lógica Clássica de Primeira Ordem)

NHI 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 mais

Lógica Computacional Frequência. Universidade da Beira Interior

Ló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 mais

Capítulo II Gramáticas

Capí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 mais

Computação Fiável Indução - exercícios básicos

Computaçã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 mais

INF Semântica Formal - Prova II /1

INF 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 mais

Programação por Objectos. Java

Programaçã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 mais

Verificação Formal de Software Aula 22

Verificaçã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 mais

Introdução Maquinas de Turing universais O problema da parada. Indecidibilidade. Rodrigo Gabriel Ferreira Soares DEINFO - UFRPE.

Introduçã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 mais

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

PROGRAMAÇÃ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 mais

Nelma Moreira. Aula 17

Nelma 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 mais

Capítulo 2: Procedimentos e algoritmos

Capí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 mais

Nelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 12

Nelma 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 mais

Aula 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) 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 mais

Dedução Natural e Sistema Axiomático Pa(Capítulo 6)

Deduçã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 mais

Análise Sintática Introdução

Aná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 mais

Lógica Computacional DCC/FCUP 2017/18

Ló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 mais

Capítulo 3 Lógica de Primeira Ordem

Capí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 mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções

Pedro 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 mais

Compiladores Análise Semântica

Compiladores 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 mais

Marcos Castilho. DInf/UFPR. 16 de maio de 2019

Marcos 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 mais

Lógica Computacional

Ló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 mais

LÓGICA DE PROGRAMAÇÃO (JAVA) CLASSES E OBJETOS. Professor Carlos Muniz

LÓ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 mais

Variável. Expressões. Atribuição. Tipos básicos Declaração. Aritméticas Lógicas. Professor Leandro Augusto Frata Fernandes

Variá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 mais

O Cálculo λ sem Tipos

O 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 mais

Centro Universitário do Triângulo

Centro 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 mais

Programação: Vetores

Programaçã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 mais

Interpretaçã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 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 mais

Verificação Formal de Software

Verificaçã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 mais

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

SEMÂ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 mais

printing 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;

printing 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 mais

Lógica Computacional

Ló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 mais

Entã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.

Entã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 mais

Capítulo II Gramáticas

Capí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 mais

Programação de Computadores I. Professor Ilaim Costa Junior

Programaçã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 mais

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Tipos 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 mais

Linguagens de Programação

Linguagens 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 mais

4 Simbolização de enunciados 24

4 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 mais

Programação Orientada a Objetos

Programaçã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 mais

Instituto Federal de Educação, Ciência e Tecnologia do RN Câmpus Currais Novos. LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I

Instituto 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 mais

Matemática Discreta para Ciência da Computação

Matemá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 mais

Lógica Computacional

Ló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 mais

Compiladores Ficha de exercícios práticos

Compiladores 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 mais

Sobre Equações Recursivas e Construções de Ponto Fixo Parte I

Sobre 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 mais

Processamento de Linguagens e Compiladores

Processamento 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 mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

TÉ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 mais

Linguagens de Programação

Linguagens 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 mais

02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre maiúsculas e minúsculas?

02. [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 mais

Primeira Prova de Linguagens de Programação - DCC024 - Sistemas de Informação

Primeira 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 mais

Compiladores - Gramáticas

Compiladores - 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 mais

introdução de um novo valor semântico de erro; e A[E 2 ]s 0 erro erro se B [b]s = erro

introduçã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 mais

Teoria da Computação. Computabilidade e complexidade computacional

Teoria 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 mais

Paradigmas de Linguagem de. Programação Profª. Roberta B Tôrres de programação referem-se a:

Paradigmas 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 mais

Séries Temporais e Modelos Dinâmicos. Econometria. Marcelo C. Medeiros. Aula 4

Sé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 mais

Como construir um compilador utilizando ferramentas Java

Como 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 mais

Módulo II: Implementação do λ-calculus

Mó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 mais

Compiladores - Gramáticas

Compiladores - 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 mais

Fundamentos de Programação

Fundamentos 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 mais

V.2 Especificação Sintática de Linguagens de Programação

V.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 mais

Linguagem 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 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 mais

Linguagens 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 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 mais

PROGRAMAÇÃO ORIENTADA A OBJETOS JAVA

PROGRAMAÇÃ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 mais

Semântica Denotacional

Semâ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 mais

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 18. Cap O Problema da Parada

ACH2043 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 mais

Interpretaçã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 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 mais

Introdução à Programação. Uma Abordagem Funcional

Introduçã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 mais

Nomes, Amarração, Verificação de Tipos, e Escopo

Nomes, 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 mais

Compiladores Análise Semântica

Compiladores 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 mais

Programação Funcional - Introdução a Cálculo Lambda

Programaçã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 mais

Paradigmas de Linguagens

Paradigmas 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 mais

Lógica Proposicional

Ló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 mais

Técnicas de análise de algoritmos

Té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 mais

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs

Layout. 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 mais

Introdução à Linguagem de Programação Java 1 INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO JAVA

Introduçã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 mais

Compiladores Análise Semântica

Compiladores 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