A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Semântica de Linguagens de Programação

Apresentações semelhantes


Apresentação em tema: "Semântica de Linguagens de Programação"— Transcrição da apresentação:

1 Semântica de Linguagens de Programação
Centro de Informática, UFPE Recife, 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

3 Qual a semântica do seguinte programa?
rode = program simples = var x : int := 3 in x := x + 5 end. ?

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

5 baseado em especificações formais
Ciclo de vida de LP baseado em especificações formais projeto especificação formal protótipos compiladores manuais, livros

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

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

10 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

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

14 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

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

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

19 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 ]] = ...

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’

23 Semântica Natural para While
<x := a, e> -> e [x |->A [[a]] e] (atr) <skip, s> -> s (skip) <c1, e> -> e’ <c2, e’> -> e’’ <c1 ; c2, e> -> e’’ (comp) <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)

24 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, UFPE Recife, Brasil


Carregar ppt "Semântica de Linguagens de Programação"

Apresentações semelhantes


Anúncios Google