Вы находитесь на странице: 1из 27

Semântica de Linguagens de

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)

Representando o estado através de tabelas


Representando o estado através de uma mapeamento

16
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.
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

<c1, e1> -> e1’ ... <cn, en> -> en’


if ...
<c, e> -> e’
22
Semântica Natural para While
<x := a, e> -> e [x |->A [[a]] e] (atr)
<skip, s> -> s (skip)

<c1, e> -> e’ <c2, e’> -> e’’


(comp)
<c1 ; c2, e> -> e’’
<c1,e> -> e’
if B [[b]] e = true (if-true)
<if b then c1 else c2, e> -> e’

<c2, e> -> e’


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

<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

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