Semântica de Linguagens de Programação

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Tópicos em Compiladores
gerador de código intermediário
Compiladores Claudio Benossi
Compiladores I Cristiano Damiani Vasconcellos
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Software Básico Silvio Fernandes
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Prof. Heloise Manica Paris Teixeira
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Wagner Santos C. de Jesus
Construção de Compiladores
Introdução ao -calculus
Prof. Bruno Moreno Aula 4 – 11/03/2011
João Lucas de Oliveira Torres
Análise léxica e sintática
Aula prática - análise contextual
Compiladores, Aula Nº 9 João M. P. Cardoso
Linguagem de programação I A
Gramáticas Livres de Contexto
Introdução a Programação
Teoria e Implementação de Linguagens Computacionais – IF688
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Estudo dos Conceitos e Paradigmas de Programação
DI UFPE Semântica de Java Java and the Java Virtual Machine - Definition, Verification, Validation Robert Stark, Joachim Schmid, and Egon Borger Wolfram.
Semântica de Linguagens de Programação
Análises léxica e sintática
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Augusto Sampaio e Paulo Borba Centro de Informática
Augusto Sampaio e Paulo Borba Centro de Informática
Modelos de Paradigmas de programação
Linguagem Pascal Prof. Sérgio Rodrigues.
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Paradigmas de Linguagens de Programação Aula 2
Análises léxica e sintática
CSP-Z Disciplina: Especificação de Sistemas Distribuídos Mestrado em Ciências da Computação Aleciano Jr. Leonilson Barbosa
Analise Semântica aula-10-analise-semântica.pdf.
PROGRAMAÇÃO ou LINGUAGEM C?
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Algumas notas sobre a linguagem de programação C
Análise Sintática Prof. Alexandre Monteiro
Equipe: Osias Carneiro, Anderson Soares, André Araújo
Tradução Dirigida por Sintaxe
Métodos Formais.
Aula 1 – Profª Danielle Costa
Programação Lógica com Prolog
Faculdade Pernambucana - FAPE Setembro/2007
A Linguagem Formal de Especificação VDM-SL
Semântica Denotacional Semântica para Funções Centro de Informática, UFPE Recife, Brasil.
COMPILADORES 04 Prof. Marcos.
FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.
Programação de Computadores - 1
Métodos Formais Juan Andrés Mussini.
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
Semântica de Ações Conceitos Básicos de Semântica de Ações, Especificações em Semântica de Ações, Primeiros Exemplos de Ações, WebAni.
Sintaxe de uma Linguagem
Semântica em Linguagens de Programação Semântica Denotacional
SISTEMAS DE INFORMAÇÃO
Paradigmas das Linguagens de Programação - História
PARADIGMAS DE LINGUAGENS EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Estrutura de Dados Prof. André Cypriano M. Costa
Análise Contextual Mauro Araújo Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco.
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
SEMÂNTICA DENOTACIONAL Alexandre Mota
Transcrição da apresentação:

Semântica de Linguagens de Programação Centro de Informática, UFPE Recife, Brasil

Objetivo e Motivação introduzir conceitos de semântica de linguagens de programação ênfase em aspectos importantes para uma compreensão mais precisa sobre programas e linguagens

Qual a semântica do seguinte programa? rode = program simples = var x : int := 3 in x := x + 5 end. ?

Aplicações importante para projetistas, implementadores e usuários (programadores) um padrão preciso para implementação documentação útil para o usuário uma ferramenta para projeto e análise de linguagens geração de compiladores

baseado em especificações formais Ciclo de vida de LP baseado em especificações formais projeto especificação formal protótipos compiladores manuais, livros

Introdução características principais de uma lp: sintaxe semântica pragmática métodos de especificação semântica: semântica operacional semântica denotacional semântica axiomática

Sintaxe define a forma e estrutura de uma lp significado (semântica) para programas sintaticamente corretos símbolos, palavras, frases e sentenças (estruturas) BNF (Backus-Naur Form) é uma notação para expressar a estrutura sintática de uma linguagem

Sintaxe Concreta x Sintaxe Abstrata como construir árvores sintáticas de forma única (parse trees) z := x; x := y; y := z i := e, assign e to i, i = e, etc sintaxe abstrata estrutura de frases da linguagem independente de sinais de pontuação e disambiguação atribuição: i e

A Linguagem While (Nielson&Nielson‘92) Notação Sintática n será usada para representar numerais, Num x será usada para representar variáveis, Var a será usada para representar expressões aritméticas, ExpA b será usada para representar expressões booleanas, ExpB c será usada para representar comandos, Com

Sintaxe Abstrata de While a ::= n | x | a1 + a2 | a1 * a2 | a1 - a2 b ::= true | false | a1 = a2 | a1 < a2 | ~b | b1 and b2 c ::= x := a | skip | c1 ; c2 | if b then c1 else c2 | while b do c

Semântica Denotacional

Semântica Denotacional denotação (significado) são entidades matemáticas: números, funções, etc. estrutura básica de uma especificação: sintaxe abstrata domínios semânticos (álgebras semânticas) funções semânticas (funções de avaliação)

Semântica Denotacional (cont.) a função semântica mapeia as estruturas sintáticas de uma linguagem em significados a partir dos domínios semânticos. definida estruturalmente: o significado de uma frase (árvore de derivação) é determinado a partir do significado de suas subfrases (sub-árvores de derivação).

Semântica para Numerais Binários Sintaxe Abstrata n ::= 0 | 1 | n 0 | n 1 Domínios Semânticos N 0 : N, 1 : N, 2 : N, ... + : (N, N) -> N * : (N, N) -> N Funções Semânticas N : Num -> N N [[ 0 ]] = 0 N [[ 1 ]] = 1 N [[ n 0 ]] = 2 * N [[ n ]] N [[ n 1 ]] = 2 * N [[ n ]] + 1

Qual o valor do numeral 101? O valor de 101 é N [[ 101 ]]! N [[ 101 ]] = 2 * N [[ 10 ]] + 1 = 2 * (2 * N [[ 1 ]]) + 1 = 2 * (2 * 1) + 1 = 5

Semântica Denotacional para While Booleanos (B) Identificadores (Id) Números Inteiros (Z) Estado (Memória) e : Estado = Id -> Z e ( x ) (projeção) e [ v / x ] (atualização) Representando o estado através de tabelas Representando o estado através de uma mapeamento

Semântica para Expressões Aritméticas de While A : ExpA -> (Estado -> Z) A [[ n ]] e = N [[ n ]] A [[ x ]] e = e (x) A [[ a1 + a2 ]] e = A [[ a1 ]] e + A [[ a2 ]] e A [[ a1 * a2 ]] e = A [[ a1 ]] e * A [[ a2 ]] e A [[ a1 - a2 ]] e = A [[ a1 ]] e - A [[ a2 ]] e

Exemplo. Qual a semântica de x + 1? Suponha que s (x) = 3. Então: A [[ x + 1 ]] s = A [[ x ]] s + A [[ 1 ]] s = s (x) + N [[ 1 ]] = 3 + 1 = 4 Note que 1 é um numeral (entre colchetes sintáticos) enquanto que 1 é um número.

Semântica para Comandos de While C : Com -> (Estado ~> Estado) C [[ x := a ]] e = let v = A [[ a ]] e in e [v/x] C [[ skip ]] e = e C [[ c1 ; c2 ]] e = C [[c2]] (C [[ c1 ]] e) C [[ if b then c1 else c2 ]] e = B [[ b ]] e -> C [[ c1 ]] e | C [[ c2 ]] e C [[ while b do c ]] = ...

Semântica Operacional

Semântica Operacional foco em “como” programas são executados e não nos resultados da execução como os “estados” são modificados duas abordagens: semântica natural: descreve como o resultado global de execuções é obtido semântica operacional estrutural: descreve como os passos individuais das computações ocorrem

Semântica Natural para While sistema de transição (regras de inferência) <c, e> representa que o comando c deve ser executado a partir do estado e e representa o estado final <c, e> -> e’ (transição) regra <c1, e1> -> e1’ ... <cn, en> -> en’ if ... <c, e> -> e’

Semântica Natural para While <x := a, e> -> e [x |->A [[a]] e] (atr) <skip, s> -> s (skip) <c1, e> -> e’ <c2, e’> -> e’’ <c1 ; c2, e> -> e’’ (comp) <c1,e> -> e’ <if b then c1 else c2, e> -> e’ if B [[b]] e = true (if-true) <c2, e> -> e’ <if b then c1 else c2, e> -> e’ if B [[b]] e = false (if-false)

Semântica Natural para While (cont.) <c,e> -> e’ <while b do c, e’> -> e’’ <while b do c, e> -> e’’ if B[[b]] e = true (while-true) <while b do c, e> -> e if B[[b]] e = false (while-false)

Resumo sintaxe, semântica e pragmática sintaxe concreta x sintaxe abstrata vários formalismos para especificação de lp semântica denotacional semântica natural

Algumas Referências Semantics with Applications, A Formal Introduction. H. R. Nielson e F. Nielson. Wiley 1992. Denotational Semantics, A Methodology for Language Development. D. A. Schmidt. Allyn and Bacon, 1986. Natural Semantics. Gilles Khan. LNCS #247, 1987.

Semântica de Linguagens de Programação Centro de Informática, UFPE Recife, Brasil