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

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

SEMÂNTICA DENOTACIONAL Alexandre Mota

Apresentações semelhantes


Apresentação em tema: "SEMÂNTICA DENOTACIONAL Alexandre Mota"— Transcrição da apresentação:

1 SEMÂNTICA DENOTACIONAL Alexandre Mota acm@cin.ufpe.br

2 Tópicos  Descrevendo o significado dos programas:  Semântica denotacional

3 Semântica  Descreve o significado das expressões, das instruções e unidades de programas  Razões para descrever a semântica  Saber precisamente o que os elementos de uma linguagem de programação fazem/representam  As provas de corretude de um programa recorrem à descrição formal da semântica da linguagem que o produziu

4 Tipos de Semântica Formal  Há várias estilos para descrever a semântica de uma linguagem, cada qual com seu objetivo  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 = x + 1 {x = 5}

5 Semântica Denotacional  Baseada na teoria de funções recursivas  Método mais abstrato de descrição da semântica  Originalmente desenvolvido Scott e Strachey (1970)

6 Semântica Denotacional  Processo de construção da especificação denotacional para uma linguagem define um objeto matemático para cada entidade da linguagem  Define uma função que mapeia instâncias das entidades da linguagem em instâncias dos correspondentes objetos matemáticos

7 Semântica Denotacional  A idéia baseia-se no fato de que há maneiras rigorosas de manipular objetos matemáticos, mas não construções de linguagens de programação

8 Exemplo: Números binários  Seja  “0” | “1” | “0” | “1”  O significado de num_bin é dado pela função Mbin  Relaciona objetos sintáticos com valores decimais  Ou seja,  Mbin(“0”) = 0  Mbin(“1”) = 1  Mbin( “0”) = 2* Mbin( )  Mbin( “1”) = 2* Mbin( )+1

9 Exemplo: Números decimais  Sejam os números decimais descritos por   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9| (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)  O significado de dec_num pode ser dado por:  Mdec('0') = 0, Mdec ('1') = 1, …, Mdec ('9') = 9  Mdec ( '0') = 10 * Mdec ( )  Mdec ( '1’) = 10 * Mdec ( ) + 1  …  Mdec ( '9') = 10 * Mdec ( ) + 9

10 Semântica Denotacional: o estado de um programa  O estado de um programa é denotado pelos valores de todas as variáveis atuais  s = {,, …, }  cada i é o nome de uma variável e v o seu valor  Seja VARMAP uma função que, quando é dado o nome da variável e um estado, retorna o valor atual da variável  VARMAP(ij, s) = vj  E VARMAP(ij, s) = undef (ij não foi encontrada em s)

11 Semântica Denotacional: Expressões   | |     + | *  Mapeia as expressões no conjunto Z  {error}  Assumindo que expressões podem ser: números decimais, variáveis ou expressões booleanas com um operador aritmético e dois operandos

12 Semântica Denotacional: Expressões Me(, s) = case of => Mdec(, s) => if VARMAP(, s) == undef then error else VARMAP(, s) => … ^

13 Semântica Denotacional: Expressões => if (Me(., s) == error OR Me(., s) = error) then error else if (. == ‘+’ then Me(., s) + Me(., s) else Me(., s) * Me(., s)...

14 Semântica Denotacional: Instrução de Atribuição Ma(x := E, s) = if Me(E, s) == error then error else s’ = {,,..., }, where dom(s) = dom(s’) E para j = 1, 2,..., n [ tal que n = #dom(s) ], vj’ = VARMAP(ij, s), if ij <> x Me(E, s), if ij == x Mapeamento de um conjunto de estados em outro conjunto de estados As comparações “ij<>x” e “ij==x” são entre nomes de variáveis e não entre seus valores atuais ^ {

15 Semântica Denotacional: Laços de Pré-teste Lógico  Mapeamento de conjunto de estado em outro  Para simplificar, duas novas funções são usadas Msl relaciona listas de instruções com estados Mb relaciona expressões e valores booleanos (ou error) Ml(while B do L, s) = if Mb(B, s) == error then error else if Mb(B, s) == false then s else if Msl(L, s) == error then error else Ml(while B do L, Msl(L, s)) ^

16 Significado do Laço  O significado do laço é o valor das variáveis do programa após os comandos do laço terem sido executados um número pré-determinado de vezes, assumindo que não ocorram erros  Na essência, o laço foi convertido de iteração para recursão, sendo o controle recursivo definido matematicamente por outras funções de mapeamento de estados recursivos  Recursão, quando comparada com iteração, é mais fácil de descrever com rigor matemático

17 Exercício  Calcule  Ml(while(1/0) x=x+1, {x,0})  Ml(while(true) x=1/0, {x,0})  Ma(x:=2,  )

18 Avaliação da Semântica Denotacional  Pode ser usada para provar a corretude de um programa  Fornece meio formal para analisar programas  Pode ser útil no projeto da linguagem  Instruções com descrições complexas podem ser reavaliadas  Pode ser usada na geração automática de compiladores  Somente para linguagens bastante simples  Devido à sua complexidade, torna-se pouco usada por usuários da linguagem

19 SEMÂNTICA OPERACIONAL E DENOTACIONAL Alexandre Mota acm@cin.ufpe.br


Carregar ppt "SEMÂNTICA DENOTACIONAL Alexandre Mota"

Apresentações semelhantes


Anúncios Google