semântica em linguagens de programação semântica denotacional

22
1 Semântica em Linguagens de Programação Semântica Denotacional Paradigmas de Linguagens de Programação Cin/UFPE Fred Durão ([email protected]) Kellyton Brito ([email protected]) Leonardo Martins ([email protected])

Upload: carlo

Post on 22-Jan-2016

50 views

Category:

Documents


0 download

DESCRIPTION

Semântica em Linguagens de Programação Semântica Denotacional. Paradigmas de Linguagens de Programação Cin/UFPE Fred Durão ([email protected]) Kellyton Brito ([email protected]) Leonardo Martins ([email protected]). Semântica Denotacional. Motivação - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Semântica em Linguagens de Programação Semântica Denotacional

1

Semântica em Linguagens de Programação

Semântica Denotacional

Paradigmas de Linguagens de ProgramaçãoCin/UFPE

Fred Durão ([email protected])

Kellyton Brito ([email protected])

Leonardo Martins ([email protected])

Page 2: Semântica em Linguagens de Programação Semântica Denotacional

2

Semântica Denotacional

Motivação

Analisar um programa a partir somente da sintaxe da linguagem, sem necessariamente ter que executá-la;

Aplicações

Provar a exatidão de programas; Verificar a equivalência semântica; Auxiliar a criação do projeto da linguagem; Criar compiladores;

Page 3: Semântica em Linguagens de Programação Semântica Denotacional

3

Semântica Denotacional

História

Dana Scott em 1970 Lambda cálculo;

Funções Computacionais

Teoria do Domínio; teoria matemática de linguagens de programação;

aproximação e convergência de conjuntos (ponto fixo); o significado das estruturas de uma linguagem de programação;

Page 4: Semântica em Linguagens de Programação Semântica Denotacional

4

Tipos de Semântica Formal

Semântica Operacional Como o programa é executado? Que operações são realizadas?

Semântica Denotacional O que o programa significa? Que objetos matemáticos ele denota?

Semântica Axiomática Quais proposições lógicas são válidas para um programa?

ex.:{x = 4} x + 1 {x = 5}

Page 5: Semântica em Linguagens de Programação Semântica Denotacional

5

Tipos de Semântica Formal

Semântica Operacional

Semântica Denotacional

Semântica Axiomática

Page 6: Semântica em Linguagens de Programação Semântica Denotacional

6

Semântica Denotacional Conceito

Estuda o significado dos programas; Mapeia construções sintáticas para objetos matemáticos, através de uma funções semântica

Ex: C[[x := a]] = {(σ, σ [n/X]) | σ Є Σ & n = A[[a]]σ}

Para C[[x := 3]] = {(σ, σ [n/X]) | σ Є Σ & n = A[[3]]σ}

Outras estruturas sintáticas que podem ser mapeadas: Comandos:

Skip; While; Write; Read; If Then Else; Atribuição Expressões:

Aritméticas; Boleanas;

Page 7: Semântica em Linguagens de Programação Semântica Denotacional

7

Semântica Denotacional

Notações para expressar a semântica

Notações Indução Estrutural

A[[n]] = {(σ, n) | σ Є Σ}

Notação Lambda Ex: A[[n]] = λσ Є Σ.n

Page 8: Semântica em Linguagens de Programação Semântica Denotacional

8

Semântica Denotacional

Domínios Sintáticos

Aexp a ::= x | n | a1 + a2 | a1 − a2 | a1 a2∗

os significados de elementos de Aexp pertencem ao conjunto de funções totais Σ → IZ

Bexp b ::= t | a1 = a2 | a1 < a2 | ¬b | b1 ^ b2 | b1 v b2

os significados de elementos de Bexp pertencem ao conjunto de funções totais Σ → IB

Com c ::= skip | x := n | C1; C2 | if b then C1 else C2 | while b do C

os significados de elementos de Com pertencem ao conjunto de funções Σ → Σ

Page 9: Semântica em Linguagens de Programação Semântica Denotacional

9

Semântica Denotacional

Semântica Composicional

O significado de comandos de uma linguagem IMP deve ser uma função pertencente ao conjunto de funções parciais Σ -> Σ.

Ex1: C[[C0; C1]] = C[[c1]] o C[[c0]]

A denotação de uma parte de um programa é determinada somente pela

denotação das suas subpartes (a semântica é dita composicional).

Ex2: A[[a0 + a1]] = {(σ,n0 + n1) | (σ,n0) Є A[[a0]] & (σ,n1) Є A[[a1]] }

Page 10: Semântica em Linguagens de Programação Semântica Denotacional

10

Semântica Denotacional

Equações Semânticas para Aexp

A[[n]] = {(σ, n) | σ Є Σ}

A[[X]] = {(σ, σ (X)) | σ Є Σ}

A[[a0 + a1]] = {(σ,n0 + n1) | (σ,n0) Є A[[a0]] & (σ,n1) Є A[[a1]] }

A[[a0 - a1]] = {(σ,n0 - n1) | (σ,n0) Є A[[a0]] & (σ,n1) Є A[[a1]] }

A[[a0 * a1]] = {(σ,n0 * n1) | (σ,n0) Є A[[a0]] & (σ,n1) Є A[[a1]] }

Page 11: Semântica em Linguagens de Programação Semântica Denotacional

11

Semântica Denotacional Equações Semânticas para Bexp

B[[true]] = {(σ, true) | σ Є Σ}

B[[false]] = {(σ, false) | σ Є Σ}

B[[a0 = a1]] = A[[a0]] σ = z A[[a1]] σ

B[[a0 ≤ a1]] = A[[a0]] σ ≤ z A[[a1]] σ

B[[a0 ^ a1]] = A[[a0]] σ ^ T A[[a1]] σ

B[[a0 v a1]] = A[[a0]] σ v T A[[a1]] σ

B[[¬b]] = ¬T B[[b]] σ

onde T = {true, false}

Page 12: Semântica em Linguagens de Programação Semântica Denotacional

12

Semântica Denotacional

Equações Semânticas para Com

C[[skip]] = {(σ, σ) | σ Є Σ}

C[[x := a]] = {(σ, σ[n/X]) | σ Є Σ & n = A[[a]] σ}

C[[c0; c1]] = C[[c1]] o C[[c0]]

C[[if b then c0 else c1]] = {(σ, σ’) | B[[b]] σ = true & (σ, σ’) Є C[[c0]] }

U (σ, σ’) | B[[b]] σ = false &(σ, σ’) Є C[[c1]] }

C[[while b do c]] = . . . Essa aqui é pau visse..! Vide Bula…Next Page

Page 13: Semântica em Linguagens de Programação Semântica Denotacional

13

Semântica Denotacional Equação Semântica do WHILE

Considerando que w ≡ while b do c nota- se a equivalência:

w ~ if b then c; w else skip

Semântica de C[[W]] então é dada por:

C[[w]] = {(σ, σ’) | B[[b]] σ = true & (σ, σ’) Є C[[w]] o C[[c]] } U {(σ, σ’) | B[[b]] σ = false }

Considerando que C[[w]] = φ, nota – se que: φ = Γ(φ);

Essa relação é se aproxima do conceito de ponto fixo

Equação Recursiva

Page 14: Semântica em Linguagens de Programação Semântica Denotacional

14

Semântica Denotacional

Ponto Fixo

Em função de primeira ordem:

Um ponto fixo de uma funcão é qualquer valor x para que f(x) = x; Ex: F(x) = x2 Pontos Fixos = {0,1} pois (0)2 = 0 e (1) 2 = 1;

Em funções de alta ordem:

Os argumentos agora são funcões -> fix(f); Ex do Caso do While para fix(Γ), temos: Γ(φ) = φ.

Page 15: Semântica em Linguagens de Programação Semântica Denotacional

15

Semântica Denotacional

Equações Semânticas do While

C[[while b do c]] = fix(Γ), onde

Γ(φ) = {(σ, σ’) | B[[b]] σ = true & (σ, σ’) Є φ o C[[c]] } U

{(σ, σ’) | B[[b]] σ = false }

Page 16: Semântica em Linguagens de Programação Semântica Denotacional

16

Semântica Denotacional

O Projeto

Objetivo inicial:Expressar Semântica Operacional/Denotacional da

Linguagem;

Abordagem da Equipe:Visão Operacional;

FerramentaAprofundamento dos Conceitos de Semântica

Denotacional;

Page 17: Semântica em Linguagens de Programação Semântica Denotacional

17

Semântica Denotacional

O Projeto – Abordagem Operacional

Apresentação do comportamento do ambiente Criação da Ferramenta:

Exibição da visão operacional do ambienteExibição das funções semânticas

Page 18: Semântica em Linguagens de Programação Semântica Denotacional

18

Semântica Denotacional

Ferramenta Utilização de Aspectos

Inserção dos métodos:meaning();denotational();

Page 19: Semântica em Linguagens de Programação Semântica Denotacional

19

Implementação da Ferramenta

O Projeto – Abordagem Operacional

Apresentação do comportamento do ambiente Criação da Ferramenta:

Exibição da visão operacional do ambienteExibição das funções semânticas

Page 20: Semântica em Linguagens de Programação Semântica Denotacional

20

Page 21: Semântica em Linguagens de Programação Semântica Denotacional

21

Semântica Denotacional

Trabalho Futuro - O Projeto de Fato

1 - Tradução da sintaxe original para uma linguagem semântica

var a = 2; -> {(σ, σ [n/X]) | σ Є Σ & n = A[[2]] σ}var b = 3; -> {(σ, σ [n/X]) | σ Є Σ & n = A[[3]] σ} {(σ, σ [n/X]) | σ Є Σ & n = A[[2]] o n = A[[3]] σ}

2 – Criação de um interpretador para a linguagem semântica• Criação do Ambiente Semântico;• Etc…

3 – Execução da linguagem semântica ou Animação

Page 22: Semântica em Linguagens de Programação Semântica Denotacional

22

Referências Programming Language Syntax and Semantics. David A Watt. Prentice Hall,

1991. Capítulo 3.; Semantics With Applications, A Formal Introduction. Hanne Nielson, Flemming

Nielson; The Formal Semantics of Programming Languages, Glynn Winskel