Beruflich Dokumente
Kultur Dokumente
Programação
Centro de Informática, UFPE
Recife, Brasil
1
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
2
Qual a semântica do seguinte
programa?
program simples =
?
var x : int := 3
rode 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
4
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
6
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
7
Sintaxe Concreta x Sintaxe Abstrata
sintaxe concreta
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
8
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
9
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
11
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)
12
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).
13
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
15
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)
16
Semântica para Expressões Aritméticas de While
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.
18
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
20
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
21
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
25
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.
26
Semântica de Linguagens de
Programação
Centro de Informática, UFPE
Recife, Brasil
27