Você está na página 1de 69

Semntica de Linguagens de

Programao
Centro de Informtica, UFPE
Luis Carlos (lcsm@cin.ufpe.br)
Hermano Moura
(hermano@cin.ufpe.br)

Objetivo
Introduzir conceitos de
semntica formal de linguagens
de programao

Motivao: Qual o
significado do seguinte
programa?
program simples =
var x : int := 3
in
x := x + 5
end.

Motivao

estudo de linguagens de programao


requer que possamos descrever linguagens
de programao de forma precisa e de fcil
compreenso
Utilizao de descries informais:

Frases de significado duvidoso


Gerao de manuais imprecisos
No existe tcnicas que auxiliem a
implementao (erros de codificao)

Soluo: Utilizao de mtodos formais


4

Mtodos Formais

Tcnica utilizada para desenvolvimento


de sistema
Utiliza notaes bem-definidas

Significado descrito matematicamente

Evita a existncia de ambigidades


Permite a utilizao de tcnicas de
verificao de erros e implementao
automtica
5

Aplicaes em Linguagens
de Programao

Interface entre projetistas, implementadores e


usurios
Projetista:

Implementador:

Define precisamente a linguagem desejada


Permite a identificao precoce de erros
Possibilita a utilizao de geradores (semi-)automticos
Dificulta o aparecimento de erros

Usurios: Produo de bons manuais da linguagem


6

Ciclo de vida de LP
baseado em especificaes
projeto
formais

especificao
formal

prottipos
manuais,
livros

compiladores

Introduo

caractersticas principais de uma lp:

sintaxe
semntica
pragmtica

Sintaxe

Define a forma e estrutura de uma


linguagem
Smbolos, palavras, frases e sentenas
(estruturas)
Principal formalismo:

Gramticas Livres de Contexto e Expresses


Regulares
Notao mais utilizada: BNF (Backus-Naur Form)
9

Gramticas Livres de
Contexto

Estrutura principal:
Comando <-[[ if Expresso then Comando else
Comando ]]

Significado:

Um Comando da linguagem definida pode ser


formado pela palavra chave if seguida de uma
Expresso da linguagem, da palavra chave then,
de um Comando da linguagem, da palavra chave
else, e de um outro Comando da linguagem.

10

Sintaxe Concreta x Sintaxe


Abstrata

Sintaxe concreta: Descreve a estrutura da


linguagem com todos os detalhes.

Considera elementos estticos como comentrios, palavras


reservadas, precedncia de operadores, e outros aucares
sintticos.
Utilizado para construir reconhecedores para programas.

Sintaxe abstrata: Descreve apenas os elementos


relevantes da linguagem de programao.

Ignora comentrios e outros elementos que no contribuem


para a semntica do programa
Utilizada para representar programas internamente no
compilador

11

Ferramentas de
Implementao

Disponveis ferramentas que geram


implementaes eficientes:

lex+yacc, javacc, etc.

O desenvolvedor no utiliza
linguagens de uso geral para
implementao da linguagem.

Mais detalhes: Disciplina de compiladores


12

Introduo

caractersticas principais de uma lp:

sintaxe
semntica
pragmtica

13

Semntica

Objetivo:

Descrever o significados das estruturas


do programa expressos na sua sintaxe

Tipos de semntica

Semntica esttica: Descreve as


caractersticas de uma programa vlido
Semntica dinmica: Descreve os
resultados da execuo do programa
14

Formalismos Utilizados

Ao contrrio da sintaxe, no existe ainda


um formalismo aceito globalmente para
descrever a semntica da linguagem
Exemplos de formalismos:

Semntica Operacional Estrutural, Mquinas


de Estado Abstratas, Semntica
Denotacional, Semntica de Aes,
Montages, etc.
15

Abordagens para Descrio


Semntica

A especificao semntica de uma


linguagem pode:
1 - Definir um mapeamento entre a sintaxe
do programa e seu significado. Ex.:
Semntica Denotacional, Semntica de
Aes, Semntica Algbrica, etc.
2 - Definir uma mquina que executa
programas da linguagem. Ex.: Semntica
Natural, Mquinas de Estado Abstratas.
16

Exemplo da 1a. Abordagem


Semntica de [[ Exp1 + Exp2 ]] =
Semntica de Exp1
Semntica de Exp2
Sum

A semntica traduz o programa em


operadores de uma linguagem com
significado conhecido
17

Exemplo 2a. Abordagem


if (execute(x)=c1 and execute(y)= c2) then
execute (x + y) = (c1+c2)

A semntica define como executar um


programa diretamente, sem traduzi-lo
para uma outra notao
intermediria.
18

Semntica De Aes

19

Semntica De Aes

Formalismo para definio de


linguagens de programao.
Define um mapeamento da sintaxe do
programa para o seu significado.
Significado de programa dado
atravs da notao de aes.

20

Notao de Aes

Biblioteca que descreve os principais


conceitos encontrados em linguagens de
programao que foram estudados nesse
curso (valores, bindings, memria, etc.)
Durante essa aula e a prxima estudaremos
os operadores que implementam cada
conceito estudado.
Operadores que manipulam os mesmos
conceitos so agrupados em facetas.
21

Definio de Aes

Uma ao uma entidade que pode ser


executada.
Quando uma ao executada ela pode:

Terminar com sucesso


Terminar com um erro
Gerar uma exceo (escape)
No-terminar (executar para sempre)

Durante a execuo de uma ao ela produz e


consome vrios tipos de informao:
(transientes, bindings, memria, etc.)
22

Semntica de Aes - Faceta


Bsica

23

Definio

A faceta bsica define operadores que


no manipulam nenhum tipo de
informao apenas controlam o fluxo
do programa

24

Principais Operadores

complete -- Executa com sucesso sem


produzir nenhuma informao.
fail -- Produz uma falha na execuo da
ao
a and then b -- Executa as aes a e b
sequncialmente
a or b -- Executa uma das aes e se
esta falhar a outra ao ser executada.
25

Principais Operadores (cont.)

unfolding a -- executa a ao a.
unfold -- Desvia o fluxo da execuo
para a ltima ao unfolding
executada.

26

Exemplos de Aes:
| complete
and thenor
| complete

|complete
| fail

| complete
unfolding
and then| | complete
| fail| and then
| | unfold
27

Exemplo de Descries

Comandos vazio
Sintaxe:

Comando --> [[ ; ]]

Semntica:

execute _ :: Comando --> action.


execute [[ ; ]] = complete.

28

Exemplo de Descries

Sequncia de Comandos:
Sintaxe:

Comando --> [[ Comando Comando ]]

Semntica:

execute _ :: Comando --> action.


execute [[ c1 c2 ]] =
| execute c1
and then
| execute c2.

29

Semntica de Aes Faceta Funcional

30

Definio

A faceta funcional define aes que


manipulam valores temporrios
(transitrios) produzidos pela
execuo de um programa.
Utilizao principal: Modelagem da
avaliao de expresses em um
programa.
31

Principais Operadores
Funcionais

give e -- produz o valor resultante da


avaliao da expresso e.
x then y -- Executa as aes x e y
seqencialmente, os valores transitrios
produzidos por x sero repassados para a
ao y.
the given t # n -- Expresso (produtor) que
recupera o n-simo valor passado para essa
ao e verifica se este do tipo t.
32

Exemplos de Aes
give 10
| give 20
then
| give sum(2,the given integer#1)
33

Exemplos de Aes(cont.)
| | give 1
| and then
| | give 2
then
| give product(the given integer#1,
| the given integer # 2)
34

Exemplo de Descrio

Linguagens de Expresses

1+2
4
5*2

35

Exemplo de descrio

Constantes Numricas.
Sintaxe:
Expresso <-- [[ Integer ]].

Semntica:
avalie _ :: Expresso --> action.
avalie [[ x : Integer ]] = give valuation of
x.
36

Exemplo de descrio

Soma de Expresses.
Sintaxe:
Expresso <-- [[ Expresso + Expresso ]].

Semntica:
avalie _ :: Expresso --> action.
avalie [[ x + y ]] =
|avalie x and then avalie y
then
| give sum(the given integer#1, the given integer#2).

37

Utilizao

Qual a semntica de: 1 + 2

38

Utilizao
Qual a semntica de 1 + 2 ?
1o Passo: Analise Sinttica:
1 + 2 ==> [[ [[ 1 ]] + [[ 2 ]] ]]

39

Utilizao
Qual a semntica de 1 + 2 ?
2o Passo: Executar Funo Semntica:
avalie [[ [[ 1 ]] + [[ 2 ]] ]]

40

Utilizao
Qual a semntica de 1 + 2 ?
2o Passo: Executar Funo Semntica:

| | avalie [[ 1 ]]
| and then
| | avalie [[ 2 ]]
then
| give sum
| (the given integer#1, the given integer # 2)
41

Utilizao
Qual a semntica de 1 + 2 ?
2o Passo: Executar Funo Semntica:

| | give valuation of 1
| and then
| | give valuation of 2
then
| give sum
| (the given integer#1, the given integer # 2)
42

Utilizao
Qual a semntica de 1 + 2 ?
2o Passo: Executar Funo Semntica:

| | give 1
| and then
| | give 2
then
| give sum
| (the given integer#1, the given integer # 2)
43

Semntica de Aes:
Faceta Declarativa

44

Definio

A faceta declarativa define aes que


controlam os bindings de um
programa (mapeamento de
identificadores e seus significados)
Utilizao em LP: Modelagem de
Declaraes em um programa.

45

Principais Operadores
Declarativos

bind n to b -- Associa o identificador n ao


significado b.
a hence b -- Executa as aes a e b
seqencialmente, os bindings produzidos
pela ao a sero repassados para a ao
b
the t bound to n -- Produtor que recupera
o valor associado ao identificador n e
testa se ele do tipo t
46

Exemplos de Aes
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)
47

Outros Operadores
Declarativos

furthermore a -- Executa a ao a e produz a


unio entre os bindings recebidos pela ao os
produzidos por a.
x moreover y -- Executa as aes x e y
sendo que os bindings produzidos por y tem
prioridade aos bindings produzidos por x.
x before y -- Executa a ao x, os bindings
produzidos pela ao x so adicionados aos
recebidos pela ao combinada e fornecidos
para a ao y.
48

Exemplos:
| bind x to 1
moreover
| bind x to 2

| bind x to 2
before
| bind y to the
| integer bound to

x
| bind x to 1
hence
| furthermore bind y to 2

49

Exemplo de Descrio

Linguagens com declaraes:

let x = 1 in x + 2
let x = 1 in let y = 3 in x * y + 1

50

Exemplo de descrio

Declarao de Constantes.
Sintaxe:
Expresso <--[[ let Identifier = Expresso in
Expresso ]].

Semntica:
avalie _ :: Expresso --> action.
elabore [[ let i = x in y ]] =
| furthermore
| | avalie x then bind token of i to the given value
hence
| avalie y.

51

Exemplo de descrio

Expresses de Constantes.
Sintaxe:
Expresso<--[[ Identifier ]].

Semntica:
avalie _ :: Expresso --> action.
avalie [[i : Identifier]] =
give the value bound i.

52

Semntica de Aes:
Faceta Imperativa

53

Definio

A faceta imperativa define aes que


manipulam a memria do programa
Utilizada principalmente na
declarao de variveis

54

Principais Aes

allocate a cell -- reserva uma posio de


memria livre e retorna o valor alocado como
valor transitrio
deallocate c -- libera a posio de memria
c
store x in c -- armazena o valor x na clula
de memria c.
the t stored in c -- Expresso que recupera o
valor armazenado na posio de memria c.
55

Exemplos de Aes
| 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.
56

Exemplo de Descrio
Linguagem com declaraes e
variveis e comandos imperativos:
int x;
int y;
x = 1;
y = x + 1;

57

Exemplo de Descrio

Declarao de Variveis
Sintaxe:

Declarao <-- [[ int Identifier ]] .

Semntica:

elabore _ :: Declarao --> action.


elabore [[ int i ]] =
| allocate a cell
then
| bind token of i to the given cell.

58

Exemplo de Descrio

Comando de Atribuio
Sintaxe:

Comando <-- [[ Identifier = Expresso]] .

Semntica:

execute _ :: comando --> action.


execute [[ c = e ]] =
| avalie e
then
| store the given value in the cell bound to token to c.

59

Exemplo de Descrio

Comandos com declaraes locais de variveis


Sintaxe:

Comando <-- [[ Declarao Comando ]] .

Semntica:

execute _ :: Comando --> action.


execute [[ d:Declarao c:Comando ]] =
| furthermore elaborate d
hence
| execute c.

60

Exemplo de Descrio

Comando While
Sintaxe:

Comando <-- [[ while Expresso do Commando endwhile ]]

Semntica:

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.

61

Notao de Aes:
Faceta Reflexiva

62

Descrio

A Faceta Reflexiva define operadores


capazes de encapsular aes na
forma de abstraes.
Utilizada principalmente na
modelagem de procedimentos e
funes.

63

Principais Operadores

abstraction of a -- Expresso que retorna uma


abstrao que incorpora a computao definida por a
enact e -- Avalia a expresso e e se ela retornar uma
abstrao executa-a. Caso contrrio gera uma
mensagem de erro.
closure a -- modifica a abstrao a de forma a
incorporar os bindings correntes durante a avaliao de
a.
application of a to v -- define uma abstrao
semelhante a abstrao a mas que quando for
executada receber v como valores transitrios.

64

Exemplos
| give abstraction of
| | give 10
then
| enact the given abstraction.
bound to a
| give abstraction of
| | give the given integer
then
| enact application the given
| abstraction to 5

| | bind a to 5
| hence
| | give closure abstraction of
| | | give the integer
then
| enact the given abstraction

65

Exemplos de Descrio

Declarao de Procedimentos
Sintaxe:

Declarao <-- [[ proc Identifier is


Commando end ]].

Semntica:

elabore [[ proc i is c end ]] =


bind token of i to closure abstraction of
| execute c.

66

Exemplos de Descrio

Chamada a procedimento
Sintaxe:

Comando <-- [[ Identifier () ]] .

Semntica:

execute [[ i () ]] =
enact the abstraction bound to i.

67

Pratica

68

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 diretrio de trabalho.


Execute o arquivo abaco2.30.jar.

69

Você também pode gostar