Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMaria Antonieta Lacerda Mendonça Alterado mais de 7 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.