Title: Sem
1Semântica de Linguagens de Programação
- Centro de Informática, UFPE
- Luis Carlos (lcsm_at_cin.ufpe.br)
- Hermano Moura (hermano_at_cin.ufpe.br)
2Objetivo
- Introduzir conceitos de semântica formal de
linguagens de programação
3Motivação Qual o significado do seguinte
programa?
program simples var x int 3 in x x
5 end.
?
4Motivação
- estudo de linguagens de programação requer que
possamos descrever linguagens de programação de
forma precisa e de fácil compreensão - Utilização de descrições informais
- Frases de significado duvidoso
- Geração de manuais imprecisos
- Não existe técnicas que auxiliem a implementação
(erros de codificação) - Solução Utilização de métodos formais
5Métodos Formais
- Técnica utilizada para desenvolvimento de sistema
- Utiliza notações bem-definidas
- Significado descrito matematicamente
- Evita a existência de ambigüidades
- Permite a utilização de técnicas de verificação
de erros e implementação automática
6Aplicações em Linguagens de Programação
- Interface entre projetistas, implementadores e
usuários - Projetista
- Define precisamente a linguagem desejada
- Permite a identificação precoce de erros
- Implementador
- Possibilita a utilização de geradores
(semi-)automáticos - Dificulta o aparecimento de erros
- Usuários Produção de bons manuais da linguagem
7Ciclo de vida de LP baseado em especificações form
ais
projeto
especificação formal
protótipos
compiladores
manuais, livros
8Introdução
- características principais de uma lp
- sintaxe
- semântica
- pragmática
9Sintaxe
- Define a forma e estrutura de uma linguagem
- Símbolos, palavras, frases e sentenças
(estruturas) - Principal formalismo
- Gramáticas Livres de Contexto e Expressões
Regulares - Notação mais utilizada BNF (Backus-Naur Form)
10Gramáticas Livres de Contexto
- Estrutura principal
- Comando lt--
- if Expressão then Comando else
Comando - Significado
- Um Comando da linguagem definida pode ser formado
pela palavra chave if seguida de uma Expressão
da linguagem, da palavra chave then, de um
Comando da linguagem, da palavra chave else, e
de um outro Comando da linguagem.
11Sintaxe Concreta x Sintaxe Abstrata
- Sintaxe concreta Descreve a estrutura da
linguagem com todos os detalhes. - Considera elementos estéticos como comentários,
palavras reservadas, precedência de operadores, e
outros açucares sintáticos. - Utilizado para construir reconhecedores para
programas. - Sintaxe abstrata Descreve apenas os elementos
relevantes da linguagem de programação. - Ignora comentários e outros elementos que não
contribuem para a semântica do programa - Utilizada para representar programas internamente
no compilador
12Ferramentas de Implementação
- Disponíveis ferramentas que geram implementações
eficientes - lexyacc, javacc, etc.
- O desenvolvedor não utiliza linguagens de uso
geral para implementação da linguagem. - Mais detalhes Disciplina de compiladores
13Introdução
- características principais de uma lp
- sintaxe
- semântica
- pragmática
14Semântica
- Objetivo
- Descrever o significados das estruturas do
programa expressos na sua sintaxe - Tipos de semântica
- Semântica estática Descreve as características
de uma programa válido - Semântica dinâmica Descreve os resultados da
execução do programa
15Formalismos Utilizados
- Ao contrário da sintaxe, não existe ainda um
formalismo aceito globalmente para descrever a
semântica da linguagem - Exemplos de formalismos
- Semântica Operacional Estrutural, Máquinas de
Estado Abstratas, Semântica Denotacional,
Semântica de Ações, Montages, etc.
16Abordagens para Descrição Semântica
- A especificação semântica de uma linguagem pode
- 1 - Definir um mapeamento entre a sintaxe do
programa e seu significado. Ex. Semântica
Denotacional, Semântica de Ações, Semântica
Algébrica, etc. - 2 - Definir uma máquina que executa programas da
linguagem. Ex. Semântica Natural, Máquinas de
Estado Abstratas.
17Exemplo da 1a. Abordagem
- Semântica de Exp1 Exp2
- Semântica de Exp1
- Semântica de Exp2
- Sum
- A semântica traduz o programa em operadores de
uma linguagem com significado conhecido
18Exemplo 2a. Abordagem
- if (execute(x)c1 and execute(y) c2) then
- execute (x y) (c1c2)
- A semântica define como executar um programa
diretamente, sem traduzi-lo para uma outra
notação intermediária.
19Semântica De Ações
20Semântica De Ações
- Formalismo para definição de linguagens de
programação. - Define um mapeamento da sintaxe do programa para
o seu significado. - Significado de programa é dado através da notação
de ações.
21Notação de Ações
- Biblioteca que descreve os principais conceitos
encontrados em linguagens de programação que
foram estudados nesse curso (valores, bindings,
memória, etc.) - Durante essa aula e a próxima estudaremos os
operadores que implementam cada conceito
estudado. - Operadores que manipulam os mesmos conceitos são
agrupados em facetas.
22Definição de Ações
- Uma ação é uma entidade que pode ser executada.
- Quando uma ação é executada ela pode
- Terminar com sucesso
- Terminar com um erro
- Gerar uma exceção (escape)
- Não-terminar (executar para sempre)
- Durante a execução de uma ação ela produz e
consome vários tipos de informação (transientes,
bindings, memória, etc.)
23Semântica de Ações - Faceta Básica
24Definição
- A faceta básica define operadores que não
manipulam nenhum tipo de informação apenas
controlam o fluxo do programa
25Principais Operadores
- complete -- Executa com sucesso sem produzir
nenhuma informação. - fail -- Produz uma falha na execução da ação
- a and then b -- Executa as ações a e b
sequêncialmente - a or b -- Executa uma das ações e se esta falhar
a outra ação será executada.
26Principais Operadores (cont.)
- unfolding a -- executa a ação a.
- unfold -- Desvia o fluxo da execução para a
última ação unfolding executada.
27Exemplos de Ações
- complete complete
- and then or
- complete fail
- complete unfolding
- and then complete
- fail and then
- unfold
28Exemplo de Descrições
- Comandos vazio
- Sintaxe
- Comando --gt
- Semântica
- execute _ Comando --gt action.
- execute complete.
29Exemplo de Descrições
- Sequência de Comandos
- Sintaxe
- Comando --gt Comando Comando
- Semântica
- execute _ Comando --gt action.
- execute c1 c2
- execute c1
- and then
- execute c2.
30Semântica de Ações - Faceta Funcional
31Definição
- A faceta funcional define ações que manipulam
valores temporários (transitórios) produzidos
pela execução de um programa. - Utilização principal Modelagem da avaliação de
expressões em um programa.
32Principais Operadores Funcionais
- give e -- produz o valor resultante da avaliação
da expressão e. - x then y -- Executa as ações x e y
seqüencialmente, os valores transitórios
produzidos por x serão repassados para a ação y. - the given t n -- Expressão (produtor) que
recupera o n-ésimo valor passado para essa ação e
verifica se este é do tipo t.
33Exemplos de Ações
- give 10
- give 20
- then
- give sum(2,the given integer1)
34Exemplos de Ações(cont.)
- give 1
- and then
- give 2
- then
- give product(the given integer1,
- the given integer 2)
35Exemplo de Descrição
- Linguagens de Expressões
- 1 2
- 4
- 5 2
36Exemplo de descrição
- Constantes Numéricas.
- Sintaxe
- Expressão lt-- Integer .
- Semântica
- avalie _ Expressão --gt action.
- avalie x Integer give valuation of x.
37Exemplo de descrição
- Soma de Expressões.
- Sintaxe
- Expressão lt-- Expressão Expressão .
- Semântica
- avalie _ Expressão --gt action.
- avalie x y
- avalie x and then avalie y
- then
- give sum(the given integer1, the given
integer2).
38Utilização
39Utilização
- Qual a semântica de 1 2 ?
- 1o Passo Analise Sintática
- 1 2 gt 1 2
40Utilização
- Qual a semântica de 1 2 ?
- 2o Passo Executar Função Semântica
- avalie 1 2
41Utilização
- Qual a semântica de 1 2 ?
- 2o Passo Executar Função Semântica
- avalie 1
- and then
- avalie 2
- then
- give sum
- (the given integer1, the given integer 2)
42Utilização
- Qual a semântica de 1 2 ?
- 2o Passo Executar Função Semântica
- give valuation of 1
- and then
- give valuation of 2
- then
- give sum
- (the given integer1, the given integer 2)
43Utilização
- Qual a semântica de 1 2 ?
- 2o Passo Executar Função Semântica
- give 1
- and then
- give 2
- then
- give sum
- (the given integer1, the given integer 2)
44Semântica de Ações Faceta Declarativa
45Definição
- A faceta declarativa define ações que controlam
os bindings de um programa (mapeamento de
identificadores e seus significados) - Utilização em LP Modelagem de Declarações em um
programa.
46Principais Operadores Declarativos
- bind n to b -- Associa o identificador n ao
significado b. - a hence b -- Executa as ações a e b
seqüencialmente, os bindings produzidos pela ação
a serão repassados para a ação b - the t bound to n -- Produtor que recupera o
valor associado ao identificador n e testa se
ele é do tipo t
47Exemplos de Ações
- bind x to 10
- bind x to 20
- and then
- bind y to 1
- hence
- give sum(the value bound to x,
- the value bound to y)
48Outros Operadores Declarativos
- furthermore a -- Executa a ação a e produz a
união entre os bindings recebidos pela ação os
produzidos por a. - x moreover y -- Executa as ações x e y sendo
que os bindings produzidos por y tem prioridade
aos bindings produzidos por x. - x before y -- Executa a ação x, os bindings
produzidos pela ação x são adicionados aos
recebidos pela ação combinada e fornecidos para a
ação y.
49Exemplos
- bind x to 1 bind x to 2
- moreover before
- bind x to 2 bind y to the
- integer bound to x
- bind x to 1
- hence
- furthermore bind y to 2
50Exemplo de Descrição
- Linguagens com declarações
- let x 1 in x 2
- let x 1 in let y 3 in x y 1
51Exemplo de descrição
- Declaração de Constantes.
- Sintaxe
- Expressão lt-- let Identifier Expressão
in Expressão . - Semântica
- avalie _ Expressão --gt action.
- elabore let i x in y
- furthermore
- avalie x then bind token of i to the given
value - hence
- avalie y.
52Exemplo de descrição
- Expressões de Constantes.
- Sintaxe
- Expressãolt-- Identifier .
- Semântica
- avalie _ Expressão --gt action.
- avalie i Identifier
- give the value bound i.
53Semântica de AçõesFaceta Imperativa
54Definição
- A faceta imperativa define ações que manipulam a
memória do programa - Utilizada principalmente na declaração de
variáveis
55Principais Ações
- allocate a cell -- reserva uma posição de memória
livre e retorna o valor alocado como valor
transitório - deallocate c -- libera a posição de memória c
- store x in c -- armazena o valor x na célula de
memória c. - the t stored in c -- Expressão que recupera o
valor armazenado na posição de memória c.
56Exemplos de Ações
- allocate a cell
- then
- store 10 in the given cell
- and then
- store 20 in the given cell
- and then
- give the integer stored in the given cell.
57Exemplo de Descrição
- Linguagem com declarações e variáveis e comandos
imperativos - int x
- int y
- x 1
- y x 1
58Exemplo de Descrição
- Declaração de Variáveis
- Sintaxe
- Declaração lt-- int Identifier .
- Semântica
- elabore _ Declaração --gt action.
- elabore int i
- allocate a cell
- then
- bind token of i to the given cell.
59Exemplo de Descrição
- Comando de Atribuição
- Sintaxe
- Comando lt-- Identifier Expressão .
- Semântica
- execute _ comando --gt action.
- execute c e
- avalie e
- then
- store the given value in the cell bound to
token to c.
60Exemplo de Descrição
- Comandos com declarações locais de variáveis
- Sintaxe
- Comando lt-- Declaração Comando .
- Semântica
- execute _ Comando --gt action.
- execute dDeclaração cComando
- furthermore elaborate d
- hence
- execute c.
61Exemplo de Descrição
- Comando While
- Sintaxe
- Comando lt-- while Expressão do Commando
endwhile - Semântica
- execute while e do c endwhile
- unfolding
- avalie e
- then
- check the given value is true and then
- execute c and then unfold
- or
- check the given value is false.
62Notação de AçõesFaceta Reflexiva
63Descrição
- A Faceta Reflexiva define operadores capazes de
encapsular ações na forma de abstrações. - Utilizada principalmente na modelagem de
procedimentos e funções.
64Principais Operadores
- abstraction of a -- Expressão que retorna uma
abstração que incorpora a computação definida por
a - enact e -- Avalia a expressão e e se ela
retornar uma abstração executa-a. Caso contrário
gera uma mensagem de erro. - closure a -- modifica a abstração a de forma a
incorporar os bindings correntes durante a
avaliação de a. - application of a to v -- define uma abstração
semelhante a abstração a mas que quando for
executada receberá v como valores transitórios.
65Exemplos
- give abstraction of bind a to 5
- give 10 hence
- then give closure abstraction of
- enact the given abstraction. give the
integer bound to a - then
- give abstraction of enact the given
abstraction - give the given integer
- then
- enact application the given
- abstraction to 5
66Exemplos de Descrição
- Declaração de Procedimentos
- Sintaxe
- Declaração lt-- proc Identifier is Commando
end . - Semântica
- elabore proc i is c end
- bind token of i to closure abstraction of
- execute c.
67Exemplos de Descrição
- Chamada a procedimento
- Sintaxe
- Comando lt-- Identifier () .
- Semântica
- execute i ()
- enact the abstraction bound to i.
68Pratica
69- Baixe os Seguintes Arquivos
- http//www.cin.ufpe.br/rat/download/abaco-beta230
.zip - http//www.cin.ufpe.br/if686/laboratorio.prj
- Descompacte o arquivo Zip em um diretório de
trabalho. - Execute o arquivo abaco2.30.jar.