1 semântica de linguagens de programação centro de informática, ufpe recife, brasil

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

Upload: alexandre-rapozo

Post on 07-Apr-2016

216 views

Category:

Documents


1 download

TRANSCRIPT

1

Semântica de Linguagens de Programação

Centro de Informática, UFPERecife, Brasil

2

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

program simples =var x : int := 3

inx := x + 5

end.

rode =

Qual a semântica do seguinte programa?

?

4

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

projeto

compiladoresmanuais,livros

protótipos

especificaçãoformal

Ciclo de vida de LPbaseado em especificaçõesformais

6

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

7

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

8

Sintaxe Concreta x Sintaxe Abstrata sintaxe concreta

como construir árvores sintáticas de forma única (parse trees)

z := x; x := y; y := zi := 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

9

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 Whilea ::= 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

11

Semântica Denotacional

12

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)

13

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áriosSintaxe Abstrata

n ::= 0 | 1 | n 0 | n 1

Domínios SemânticosN0 : N, 1 : N, 2 : N, ...+ : (N, N) -> N* : (N, N) -> N

Funções SemânticasN : Num -> N

N [[ 0 ]] = 0N [[ 1 ]] = 1N [[ n 0 ]] = 2 * N [[ n ]]N [[ n 1 ]] = 2 * N [[ n ]] + 1

15

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

16

Semântica Denotacional para While Booleanos (B) Identificadores (Id) Números Inteiros (Z) Estado (Memória)

e : Estado = Id -> Ze ( x ) (projeção)e [ v / x ] (atualização)

Representando o estado através de tabelasRepresentando 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

18

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= 4Note que 1 é um numeral (entre colchetes sintáticos) enquanto que 1 é um número.

Semântica para Comandos de WhileC : Com -> (Estado ~> Estado)

C [[ x := a ]] e = let v = A [[ a ]] e in e [v/x]C [[ skip ]] e = eC [[ 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 ]] = ...

20

Semântica Operacional

21

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

22

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

<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)

<x := a, e> -> e [x |->A [[a]] e] (atr)

<skip, s> -> s (skip)

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

(comp)

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)

25

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

26

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.

27

Semântica de Linguagens de Programação

Centro de Informática, UFPERecife, Brasil