Semântica Denotacional

Documentos relacionados
Semântica Denotacional Adaptação de A Practical Introduction to Denotational Semantics Por Lloyd Allison Cambridge University Press, 1986

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

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

Paradigmas de Programação

Linguagens de Programação

Prof. Adriano Maranhão COMPILADORES

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens

Semântica Operacional

Introdução à Programação

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

Algoritmos e Técnicas de Programação Introdução Givanaldo Rocha de Souza

Linguagens de Programação Aula 3

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Compiladores - Análise Léxica

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

Compiladores - Análise Léxica

ao paradigma imperativo

Análise Sintática Introdução

I1, I2 e In são instruções simples ou estruturadas da linguagem Pascal.

Projeto de Compiladores

I.2 Introdução a Teoria da Computação

Introdução O problema geral de descrever sintaxe Métodos formas de descrever sintaxe Gramática de atributos Semântica dinâmica

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Introdução à Programação

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.

Análise Sintática. Fabiano Baldo

Linguagens de Programação

Compiladores. Fabio Mascarenhas

Compiladores - Autômatos

Construção de Compiladores

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação

FACCAT Sistemas de Informação. Estruturas de Dados

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

4) Defina o que vem a ser um algoritmo, e porque, o mesmo depende do processo.

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Compiladores. Análise Léxica

Python e sua sintaxe LNCC UFRJ

Estrutura geral de um compilador programa-fonte

Compiladores 02 Analise léxica

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Algoritmos e Programação

Paradigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica

Linguagem Pascal. Definição e Tipos de Dados. Professora Lara Popov Zambiasi Bazzi Oberderder. Linguagem PASCAL 1

Compiladores. Introdução

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final)

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Linguagem de Programação I Prof. Tiago Eugenio de Melo.

Aula 3: Algoritmos: Formalização e Construção

Linguagens Formais e Autômatos P. Blauth Menezes

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Linguagem Computacional. Estruturas de Controle: Estruturas de Repetição. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Introdução à Programação

Linguagens de Programação

Linguagem Pascal. Prof. Antonio Almeida de Barros Junior

Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07

INF 1005 Programação I

Universidade Federal de Alfenas

Slides trabalhados durante a quinta aula

Programação II RECURSÃO

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

Introdução à Ciência da Computação. Prof. Dr. Rogério Vargas

Linguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa;

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Como construir um compilador utilizando ferramentas Java

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Compilador de LP3 para C3E e P3

Ferramentas Programação. UDESC - Prof. Juliano Maia 1

Modularização. Prof. Antonio Almeida de Barros Junior

Working 03 : Conceitos Básicos I

Programação Estruturada

LINGUAGENS FORMAIS E AUTÔMATOS

Alfabeto, Cadeias, Operações e Linguagens

LFA. Aula 04. Sintaxe e Semântica. Conceitos Básicos Alfabeto Palavra Linguagem

Universidade Estadual De Santa Cruz (UESC)

Introdução Definição Conceitos Básicos de Linguagem

Linguagem de Programação

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

Gramática. Gramática. Gramática

Introdução à Linguagem C

TÉCNICO DE INFORMÁTICA - SISTEMAS

LP II Estrutura de Dados

INE Programação Funcional - Transparência Resolução de alguns problemas de redução:

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ.

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

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

Linguagens de Programação Classificação

1 TEORIA DOS CONJUNTOS

Estruturas de Repetição

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI

Transcrição:

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 compiladores e programadores. Estes indivíduos têm critérios diferentes para julgar um método).

Requisitos para método deve ser conciso, não ambíguo, aberto à análise matemática, verificável mecanicamente, executável e legível dependendo do seu ponto de vista. A semântica denotacional é uma tentativa de satisfazer a estes objetivos diversos. É um método formal pois é baseado em fundamentos matemáticos bem entendidos e usa uma notação rigorosamente definida (meta-linguagem)

Problema do programador escrever um programa que irá transformar dados satisfazendo algumas propriedades ou asserções P em resultados satisfazendo Q. {P} programa {Q}

Semântica Denotacional A semântica denotacional reconhece a sutil diferença entre uma função um conjunto de pares ordenados possivelmente infinito {<entrada i, saida i >}- e um algoritmo como uma descrição finita de uma função.

Semântica Denotacional Um programa é o algoritmo escrito em uma linguagem particular de programação. Um programa define, ou denota, uma função. Uma semântica denotacional de uma linguagem dá o mapeamento de programas na linguagem para a função denotada

Exemplo: Fatorial = {<0,1>,<1,1>,<2,2>,<3,6>,<4,24>,...} Fat = if n =0 then 1 else n * fat(n-1) Uma boa semântica deve confirmar que o programa denota a função fatorial.

Descrição da Semântica denotacional é escrita em λ-notação que é o cálculo λ de Church com tipos de dados. O método é conciso e poderoso o suficiente para descrever as características das linguagens de programação atuais. Definições formais só são legíveis com prática, sendo a notação equivalente a uma linguagem de programação poderosa mas difícil de ler. É mais adequada ao projetista e implementador de uma linguagem de programação que ao programador.

Vantagens da Semântica denotacional Pode ser mecanizada Mosses desenvolveu um interpretador para semântica denotacional que permite que uma definição seja executada. Algumas linguagens funcionais tais como ML são muito próximas da notação λ com tipo, e podem ser usadas para escrever e executar definições denotacionais

Exemplo de números decimais é apresentado. Os números decimais formam uma linguagem, Num, sobre o alfabeto {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Ela pode ser definida pela gramática ν ::= ν δ δ δ::= 0 1 2 3 4 5 6 7 8 9

Exemplo O símbolo ::= pode ser lido como é ou pode ser substituído por. O pode ser lido como ou. Um dígito δ é um 0, ou um 1, ou um 2, e assim por diante. Um numeral é simples dígito ou um numeral seguido de um dígito. As letras gregas ν e δ são variáveis sintáticas sobre partes da linguagem Num.

números decimais são normalmente tomados por significarem, ou denotarem, inteiros que são objetos abstratos. Esta interpretação convencional pode ser feita formalmente pela definição de uma função de valoração V

Função de valoração V V: Num Int V [ν δ] = 10 x V[ν] + V[δ] V[0] =0 V[1] =1 V[2] =3 V[3] =3 V[4] =4 V[5] =5 V[6] =6 V[7] =7 V[8] =8 V[9] =9

V é uma função das sentenças da linguagem Num para os inteiros Int. V édefinido por uma análise caso a caso das alternativas da gramática para Num. Elementos da linguagem estão dentro de chaves para distingui-los da meta linguagem fora. Dentro das chaves estão seqüências de caracteres (strings). Os inteiros fora das chaves estão em itálico. 7 é um caracter que denota o inteiro 7.

valor de um numeral em particular pode agora ser calculado V[123] = 10 x V[12] + 3 = 10 x (10x V[1]+2)+3 = 123

E daí? Não é óbvio?

devemos estar satisfeitos pela definição formal concordar com a intuição em casos simples. Esta é uma característica de boas teorias. O formalismo é necessário quando a intuição não é forte o suficiente. O leitor que não percebe que 7 = 7 não apenas não é verdadeiro mas é um erro em diversas LP (ex Pascal), pode ter perdido o sentido. Note que V capturou a essência da notação posicional, e que V[123] = V[0123] e assim por diante.

Exemplo de uso (uso em compiladores) If ch in [ 0.. 9 ] then Begin n:= ord(ch) ord( 0 ); Ch:= nextch {retorna o próximo char e avança a entrada} While ch in [ 0.. 9 ] do Begin n:= n*10 + ord[ch()- ord( 0 ); Ch := nextch; End End

Exercício Se a definição de V é alterada para V [ν δ] = - 10 x V[ν] + V[δ] Quais são as novas características de V? Qual vantagem esta nova interpretação de Num tem?