Escolar Documentos
Profissional Documentos
Cultura Documentos
Tpicos Introduo O problema de descrever a sintaxe Mtodos formais para descrever a sintaxe Gramticas de atributos Descrevendo o significado dos programas: semntica dinmica
Semntica
Descreve o significado das expresses, das instrues e das unidades de programas Razes para descrever a semntica
Saber precisamente o que as instrues de uma linguagem fazem As provas de exatido do programa recorrem a descrio formal da semntica da linguagem
Semntica Denotacional
O que o programa significa? Que objetos matemticos ele denota?
Semntica Axiomtica
Quais proposies lgicas so vlidas para um programa? ex.:{x = 4} x = x + 1 {x = 5}
Semntica Operacional Descreve o significado de um programa pela execuo de suas instrues em uma mquina, seja ela real ou simulada As mudanas no estado da mquina (memria, registradores, etc.) definem o significado da instruo
Semntica Operacional
Para usar a semntica operacional em linguagens de alto nvel, uma mquina virtual necessria Um interpretador puro (hardware) seria muito caro Um interpretador puro (software) possui problemas
Os detalhes de um computador em particular (do hardware e do sistema operacional) tornariam algumas aes de difcil entendimento Tal definio semntica apenas estaria disponvel quelas pessoas com um computador identicamente configurado
Esses problemas podem ser evitados substituindo um computador real por uma computador virtual
O processo:
Construir um tradutor (traduzir o cdigofonte para o cdigo de mquina de um computador idealizado) Construir um simulador para o computador idealizado
Semntica Operacional
Esse processo bsico das semnticas operacionais no incomum.
usado nos livros didticos de programao e nos manuais de consulta das linguagens
Bom se usado informalmente (manuais da linguagem, etc.) Extremamente complexo se usado formalmente
Semntica Axiomtica
Baseada em lgica (clculo de predicados) Propsito original
Verificao formal de programas
Axiomas ou regras de inferncia so definidas para cada tipo de instruo na linguagem (para permitir transformaes de expresses para outras expresses) As expresses so chamadas de asseres (predicados)
Semntica Axiomtica
Pr-condio
Uma assero que precede imediatamente uma instruo de programa e descreve as variveis dela nesse ponto
Ps-condio
Uma assero que segue imediatamente a uma instruo e descreve as novas restries a essas variveis (e possivelmente a outras) depois da execuo da instruo
Exemplo
soma = 2*x + 1 {soma >1} Uma pr-condio possvel {x > 10}
Ps-condio
Semntica Axiomtica
A pr-condio mais fraca a menos restritiva que garantir a validade da ps-condio associada. Exemplo
soma = 2*x + 1 {soma >1}
Nesse exemplo existem vrias pr-condies possveis {x>10}, {x>100}, {x>1000} Entretanto, a mais fraca de todas as pr-condies, nesse caso, {x>0}
Um exemplo
a = b + 1
{b > 10}
{a > 1}
Axioma
uma afirmao lgica que se presume verdadeira
Regra de inferncia
um mtodo de suposio da verdade de uma assero, baseando-se nos valores de outras asseres
Instrues de Atribuio a = b/21 {a<10} A pr-condio mais fraca ser computada da seguinte maneira b/2-1 < 10 b < 22
Semntica Axiomtica
Instrues de Atribuio Prova de exatido de programas Um outro exemplo {x>3} x = x 3 {x>0} Usando o axioma de atribuio em x = x 3 {x>0} Produz {x>3}, que a pr-condio dada Portanto, provamos a instruo lgica acima
Semntica Axiomtica
Semntica Axiomtica
Instrues de Atribuio Entretanto, nesse caso {x>5} x = x 3 {x>0} A pr-condio no a mesma que a assero produzida pelo axioma. Porm, {x>5}{x>3} Para usarmos isso numa prova, precisamos de uma regra de inferncia, chamada regra de conseqncia
{P} S {Q}, P' P, Q Q' {P'} S {Q'}
Instrues de Atribuio A regra de conseqncia bastante til em provas Se admitirmos que P {x>3}, que Q e Q so {x>0} e P {x>5}, teremos
{P} S {Q}, P' P, Q Q' {P'} S {Q'}
Semntica Axiomtica
Axioma de atribuio para o then y = y 1 {y>0}, produzir y>1 Axioma de atribuio para o else y = y + 1 {y>0}, produzir y>-1
Sabendo que {y>1}{y>-1}, a regra de conseqncia nos permite usar {y>1} para a pr-condio da instruo de seleo.
I a invariante do lao (hiptese indutiva) I uma assero crucial para encontrar a prcondio mais fraca
{I and B} S {I}
finalizado
Semntica Axiomtica: Laos de Pr-teste Lgico Exemplo: til tratarmos o processo de produo de uma condio mais fraca como uma funo, wp wp(instruo, ps-condio) = pr-condio while y<>x do y=y+1 end {y=x}
Semntica Axiomtica: Laos de Pr-teste Lgico Pode-se ver que {y<x} para casos de uma ou mais iteraes Combinando isso com {y=x}, zero iteraes Obtemos {y<=x} O qual pode ser usado como a invariante de lao
Semntica Axiomtica: Laos de Pr-teste Lgico Uma pr-condio para a instruo while pode ser determinada a partir da invariante de lao Nesse caso P = I, pode ser usado Mas devemos assegurar a exigncia dos critrios anteriores
4.
5.
O lao finalizado?
Semntica Denotacional
Baseado na teoria de funes recursivas O mtodo mais abstrato de descrio da semntica Originalmente desenvolvido Scott e Strachey (1970)
Semntica Denotacional
O processo de construo da especificao denotacional para uma linguagem define um objeto matemtico para cada entidade da linguagem
Define uma funo que mapeia instncias das entidades da linguagem em instncias dos correspondentes objetos matemticos
A idia baseia-se no fato de que h maneiras rigorosas de manipular objetos matemticos, mas no construes de linguagens de programao
Essa a semntica dirigida para a sintaxe As entidades sintticas so associadas a objetos matemticos com significado concreto
Semntica Denotacional: Exemplo Um exemplo semelhante para descrever o significado sinttico dos literais decimais
<dec_num> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | <dec_num> (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9) As relaes denotacionais para essas regras de sintaxe so: Mdec('0') = 0, Mdec (<dec_num> Mdec (<dec_num> Mdec (<dec_num> Mdec ('1') = 1, , Mdec ('9') = 9 '0') = 10 * Mdec (<dec_num>) '1) = 10 * Mdec (<dec_num>) + 1 '9') = 10 * Mdec (<dec_num>) + 9
Semntica Denotacional vs Operacional Na semntica operacional, as mudanas de estados so definidas por algoritmos codificados Na semntica denotacional, as mudanas de estados so definidas por funes matemticas
Semntica Denotacional: o estado de um programa O estado de um programa denotado pelos valores de todas as variveis correntes
s = {<i1, v1>, <i2, v2>, , <in, vn>} cada i o nome de uma varivel e v o seu valor
Seja VARMAP uma funo que, quando dado o nome da varivel e um estado, retorna o valor corrente da varivel VARMAP(ij, s) = vj
Nmeros Decimais
<dec_num> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | <dec_num> (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9) Mdec('0') = 0, Mdec (<dec_num> Mdec (<dec_num> Mdec (<dec_num> Mdec ('1') = 1, , Mdec ('9') = 9 '0') = 10 * Mdec (<dec_num>) '1) = 10 * Mdec (<dec_num>) + 1 '9') = 10 * Mdec (<dec_num>) + 9
Mapeia as expresses no conjunto Z {error} Assumindo que expresses podem ser: nmeros decimais, variveis ou expresses booleanas com um operador aritmtico e dois operandos
<binary_expr> => if (Me(<binary_expr>.<left_expr>, s) == undef OR Me(<binary_expr>.<right_expr>, s) = undef) then error else if (<binary_expr>.<operator> == + then Me(<binary_expr>.<left_expr>, s) + Me(<binary_expr>.<right_expr>, s) else Me(<binary_expr>.<left_expr>, s) * Me(<binary_expr>.<right_expr>, s) ...
Ml(while B do L, s) = if Mb(B, s) == undef 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))
Significado do Lao
O significado do lao o valor das variveis do programa aps os comandos do lao terem sido executados um nmero pr-determinado de vezes, assumindo que no ocorram erros Na essncia, o lao foi convertido de iterao para recurso, sendo o controle recursivo definido matematicamente por outras funes de mapeamento de estados recursivos Recurso, quando comparada com iterao, mais fcil de descrever com rigor matemtico
Resumo
BNF e gramtica livre de contexto so equivalentes a meta-linguagens
Adequadas para descrever a sintaxe de linguagens de programao
Gramtica de atributos um formalismo que permite descrever a sintaxe e a semntica esttica de uma linguagem
A semntica esttica aquela que pode ser verificada em tempo de compilao