1 semântica de linguagens de programação centro de informática, ufpe luis carlos...

69
1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos ([email protected]) Hermano Moura ([email protected])

Upload: internet

Post on 19-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

1

Semântica de Linguagens de Programação

Centro de Informática, UFPE

Luis Carlos ([email protected])Hermano Moura ([email protected])

Page 2: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

2

Objetivo

Introduzir conceitos de semântica formal de linguagens

de programação

Page 3: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

program simples =var x : int := 3

inx := x + 5

end.

=

Motivação: Qual o significado do seguinte programa?

?

Page 4: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

4

Motivaçã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

Page 5: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

5

Mé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

Page 6: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

6

Aplicaçõ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

Page 7: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

projeto

compiladoresmanuais,livros

protótipos

especificaçãoformal

Ciclo de vida de LPbaseado em especificaçõesformais

Page 8: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

8

Introdução características principais de uma lp:

sintaxe semântica pragmática

Page 9: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

9

Sintaxe 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)

Page 10: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

10

Gramáticas Livres de Contexto Estrutura principal:

Comando <-- [[ “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.

Page 11: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

11

Sintaxe 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

Page 12: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

12

Ferramentas de Implementação Disponíveis ferramentas que geram

implementações eficientes: lex+yacc, javacc, etc.

O desenvolvedor não utiliza linguagens de uso geral para implementação da linguagem. Mais detalhes: Disciplina de compiladores

Page 13: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

13

Introdução características principais de uma lp:

sintaxe semântica pragmática

Page 14: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

14

Semâ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

Page 15: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

15

Formalismos 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.

Page 16: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

16

Abordagens 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.

Page 17: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

17

Exemplo da 1a. Abordagem

Semântica de [[ Exp1 “+” Exp2 ]] =Semântica de Exp1Semântica de Exp2Sum

A semântica traduz o programa em operadores de uma linguagem com significado conhecido

Page 18: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

18

Exemplo 2a. Abordagem

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

execute (x “+” y) = (c1+c2)

A semântica define como executar um programa diretamente, sem traduzi-lo para uma outra notação intermediária.

Page 19: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

19

Semântica De Ações

Page 20: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

20

Semâ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.

Page 21: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

21

Notaçã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.

Page 22: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

22

Definiçã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.)

Page 23: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

23

Semântica de Ações - Faceta Básica

Page 24: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

24

Definição A faceta básica define operadores que

não manipulam nenhum tipo de informação apenas controlam o fluxo do programa

Page 25: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

25

Principais 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.

Page 26: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

26

Principais Operadores (cont.) unfolding a -- executa a ação a. unfold -- Desvia o fluxo da execução

para a última ação unfolding executada.

Page 27: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

27

Exemplos de Ações:

| complete |completeand then or| complete | fail

| complete unfoldingand then | | complete| fail | and then

| | unfold

Page 28: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

28

Exemplo de Descrições Comandos vazio Sintaxe:

Comando --> [[ “;” ]] Semântica:

execute _ :: Comando --> action. execute [[ “;” ]] = complete.

Page 29: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

29

Exemplo de Descrições Sequência de Comandos: Sintaxe:

Comando --> [[ Comando Comando ]] Semântica:

execute _ :: Comando --> action. execute [[ c1 c2 ]] =

| execute c1

and then| execute c2.

Page 30: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

30

Semântica de Ações - Faceta Funcional

Page 31: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

31

Definiçã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.

Page 32: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

32

Principais 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.

Page 33: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

33

Exemplos de Ações

give 10

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

Page 34: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

34

Exemplos de Ações(cont.)

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

Page 35: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

35

Exemplo de Descrição Linguagens de Expressões

1 + 2 4 5 * 2

Page 36: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

36

Exemplo de descrição Constantes Numéricas. Sintaxe:

Expressão <-- [[ Integer ]]. Semântica:

avalie _ :: Expressão --> action.avalie [[ x : Integer ]] = give valuation of

x.

Page 37: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

37

Exemplo de descrição Soma de Expressões. Sintaxe:

Expressão <-- [[ Expressão “+” Expressão ]]. Semântica:

avalie _ :: Expressão --> action.avalie [[ x “+” y ]] = |avalie x and then avalie y then | give sum(the given integer#1, the given

integer#2).

Page 38: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

38

Utilização Qual a semântica de: 1 + 2

Page 39: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

39

Utilização Qual a semântica de “1 + 2” ?1o Passo: Analise Sintática:

1 + 2 ==> [[ [[ “1” ]] “+” [[ “2” ]] ]]

Page 40: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

40

Utilização Qual a semântica de “1 + 2” ?2o Passo: Executar Função Semântica:

avalie [[ [[ “1” ]] “+” [[ “2” ]] ]]

Page 41: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

41

Utilizaçã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 integer#1, the given integer # 2)

Page 42: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

42

Utilizaçã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 integer#1, the given integer # 2)

Page 43: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

43

Utilizaçã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 integer#1, the given integer # 2)

Page 44: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

44

Semântica de Ações: Faceta Declarativa

Page 45: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

45

Definiçã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.

Page 46: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

46

Principais 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”

Page 47: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

47

Exemplos de Ações

bind “x” to 10

| | bind “x” to 20| and then| | bind “y” to 1hence| give sum(the value bound to “x”, | the value bound to “y”)

Page 48: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

48

Outros 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”.

Page 49: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

49

Exemplos:| bind “x” to 1 | bind “x” to 2moreover before| bind “x” to 2 | bind “y” to the

| integer bound to “x”

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

Page 50: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

50

Exemplo de Descrição Linguagens com declarações:

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

Page 51: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

51

Exemplo de descrição Declaração de Constantes. Sintaxe:

Expressão <--[[ “let” Identifier “=“ Expressão “in” Expressão ]].

Semântica:avalie _ :: Expressão --> action.elabore [[ “let” i “=“ x “in” y ]] = | furthermore | | avalie x then bind token of i to the given value hence | avalie y.

Page 52: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

52

Exemplo de descrição Expressões de Constantes. Sintaxe:

Expressão<--[[ Identifier ]]. Semântica:

avalie _ :: Expressão --> action.avalie [[i : Identifier]] = give the value bound “i”.

Page 53: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

53

Semântica de Ações:Faceta Imperativa

Page 54: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

54

Definição A faceta imperativa define ações que

manipulam a memória do programa Utilizada principalmente na

declaração de variáveis

Page 55: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

55

Principais 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.

Page 56: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

56

Exemplos de Ações

| allocate a cellthen| | store 10 in the given cell| and then| | store 20 in the given cell| and then| | give the integer stored in the given cell.

Page 57: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

57

Exemplo de Descrição Linguagem com declarações e

variáveis e comandos imperativos:int x;int y;x = 1;y = x + 1;

Page 58: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

58

Exemplo de Descrição Declaração de Variáveis Sintaxe:

Declaração <-- [[ “int” Identifier ]] . Semântica:

elabore _ :: Declaração --> action. elabore [[ “int” i ]] =

| allocate a cellthen| bind token of i to the given cell.

Page 59: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

59

Exemplo de Descrição Comando de Atribuição Sintaxe:

Comando <-- [[ Identifier “=” Expressão]] . Semântica:

execute _ :: comando --> action. execute [[ c “=” e ]] =

| avalie ethen| store the given value in the cell bound to token to c.

Page 60: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

60

Exemplo de Descrição Comandos com declarações locais de

variáveis Sintaxe:

Comando <-- [[ Declaração Comando ]] . Semântica:

execute _ :: Comando --> action. execute [[ d:Declaração c:Comando ]] =

| furthermore elaborate dhence| execute c.

Page 61: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

61

Exemplo de Descrição Comando While Sintaxe:

Comando <-- [[ “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.

Page 62: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

62

Notação de Ações:Faceta Reflexiva

Page 63: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

63

Descriçã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.

Page 64: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

64

Principais 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.

Page 65: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

65

Exemplos| give abstraction of | | bind “a” to 5| | give 10 | hencethen | | 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 integerthen| enact application the given| abstraction to 5

Page 66: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

66

Exemplos de Descrição Declaração de Procedimentos Sintaxe:

Declaração <-- [[ “proc” Identifier “is” Commando “end” ]].

Semântica: elabore [[ “proc” i “is” c “end” ]] =

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

Page 67: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

67

Exemplos de Descrição Chamada a procedimento Sintaxe:

Comando <-- [[ Identifier “()” ]] . Semântica:

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

Page 68: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

68

Pratica

Page 69: 1 Semântica de Linguagens de Programação Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br)

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.