1
Semântica em Linguagens de Programação
Semântica DenotacionalParadigmas de Linguagens de Programação
Cin/UFPE
Fred Durão ([email protected])Kellyton Brito ([email protected])Leonardo Martins ([email protected])
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;
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;
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}
5
Tipos de Semântica Formal Semântica Operacional
Semântica Denotacional
Semântica Axiomática
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;
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
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 Σ → Σ
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]] }
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]] }
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}
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
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
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: Γ(φ) = φ.
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 }
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;
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
18
Semântica Denotacional Ferramenta
Utilização de Aspectos
Inserção dos métodos:meaning();denotational();
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
20
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
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