Semântica de Ações Conceitos Básicos de Semântica de Ações, Especificações em Semântica de Ações, Primeiros Exemplos de Ações, WebAni Semântica de Ações formalismo para especificação de linguagens de programação composicional denotacional: o significado de programas (frases da linguagem) são ações a semântica de uma linguagem de programação é dada em termos de ações primitivas e combinadores de ações padrões Semântica de Ações (cont.) melhor reutilização descrições mais claras de linguagens de programação (melhor legibilidade) Pascal, Standard ML, Joyce, Beta, CCS, CSP, ... A Notação de Ações ação uma entidade que pode ser executada, recebendo e produzindo dados ações podem ser combinadas usando-se combinadores de ações A Notação de Ações (cont.) a execução de uma ação: completa, corresponde ao término normal da execução; ou falha, corresponde ao abandono da execução da ação; ou diverge, a execução da ação nunca termina; ou escapa, corresponde à terminação excepcional da execução. A Notação de Ações (cont.) a execução depende da informação corrente, que é a informação processada pela execução de uma ação. a informação corrente pode ser classificada de acordo com a sua propagação: transitória com escopo estável permanente A Notação de Ações (cont.) facetas (processa no máximo uma espécie de informação por vez): de controle (básica), fluxo de controle e independência da espécie de informação funcional, processa informação transitória, dados são dados às ações e ações dão dados declarativa, processa informação com escopo, ações recebem e produzem bindings (ligações) A Notação de Ações (cont.) imperativa, processa informação estável, ações reservam e liberam células de memória, e mudam o dado armazenado em células comunicativa, processa informação permanente, ações enviam mensagens, recebem mensagens, e oferecem contratos a agentes ações diretivas ações híbridas A Notação de Ações (cont.) sorte (sort) é uma escolha de indivíduos um indivíduo é um elemento do sorte um indivíduo é visto como um sorte que classifica uma única entidade: 1 : integer 1:1 1 < integer integer < integer A Notação de Ações (cont.) produtores (yielders) entidades que podem ser avaliadas durante a execução de uma ação avaliação depende da informação corrente avaliação não afeta a informação corrente dados (data) notação de dados: inteiros, strings, listas, etc abstrações: dados que incorporam ações Algumas Ações give 4 bind “x” to 456 store 29 in the given cell give 4 or give 8 give 4 and bind “x” to 456 bind “x” to 456 hence give the integer bound to “x” give 5 then give sum(4,the given integer) Descrições em Semântica de Ações estrutura modular Abstract Syntax. Semantic Functions needs: Abstract Syntax, Semantic Entities. Semantic Entities. sub-módulos (M/Mi) módulos podem ser mutuamente dependentes ordem de apresentação não importa Qual a semântica do programa? program simples = var x : int := 3 in x := x + 5 end. Semântica de Ações de NanoSpecimen (parte) Abstract Syntax grammar: (1) Programa = program Identificador = Declaração in Comando end . . (2) Declaração = const Identificador : Tipo = Expressão | var Id : Tipo := Expressão | fun Identificador Identificador : Tipo -> Tipo = Expressão | Declaração ; Declaração . (3) Comando = Identificador := Expressão | while Expressão do Comando end | local Declaração in Comando end | Comando ; Comando . (4) Expressão = Número | Identificador | if Expressão then Expressão else Expressão | Identificador ( Expressão ) | Expressão Operador Expressão | Operador Expressão | ( Expressão ) . (5) Operador = + | - | * | / | = | < . (6) Tipo = int . (7) Identificador = ... Número = ... closed. (8) Semantic Functions/Programas • rode _ :: Programa -> action . (1) rode [[ program I:Identificador = D:Declaração in C:Comando end . ]] = | elabore D hence | execute C . Semantic Functions/Declarações • elabore _ :: Declaração -> action . (1) elabore [[ var I:Identificador : T:Tipo := E:Expressão ]] = | avalie E and allocate a cell then | | bind token of I to the given cell#2 | and | | store the given integer#1 in the given cell#2 . Semantic Functions/Expressões • avalie _ :: Expressão -> action . (1) avalie N:Número = give valor-de N . (2) avalie I:Identificador = | give the integer bound to token de I or | give the integer stored in the cell bound to token-de I . (3) avalie [[ I:Identificador ( E:Expressão ) ]] = | avalie E then | enact (application of the abstraction bound to token-de I to the given integer) . Semantic Functions/Comandos • execute _ :: Comando -> action . (1) execute [[ I:Identificador := E:Expressão ]] = | avalie E then | store the given integer in the cell bound to token-de I . (2) execute [[ while E:Expressão do C:Comando ]] = unfolding | | evaluate E | then | | | check (it is 1) and then execute C and then unfold | | or | | | check not (it is 1) . (3) execute [[ local D:Declaração in C:Comando end ]] = | rebind moreover elabore D hence | execute C . rode program simples = var x : int := 3 in x := x + 5 end. = | | give 3 and allocate a cell | then | | bind “x” to the given cell#2 and store the given integer#1 in the given cell#2 hence | | | | | give the integer bound to “x” | | | | or | | | | | give the integer stored in the cell bound to “x” | | | and | | | | give 5 | | then | | | give sum(the given integer#1, the given integer#2) | then | | store the given integer in the cell bound to “x” Um Interpretador de Ações (Ani) um interpretador para a notação de ações implementa boa parte da notacao de dados implementado em Standard ML pode ser usado para construção de um interpretador para uma linguagem o resultado da interpretação de uma ação tem o seguinte formato: Outcome Transients Bindings Storage <outcome status> <transients given by the action> <bindings produced by the action> <storage after action performance> 20 Precisamos de um parser... Especificação Léxica de Pantanal Especificação Sintática de Pantanal ML Lex ML Yacc Programa Fonte em Pantanal Parser para Pantanal AST para o Programa Fonte 21 O Gerador de Acionadores dada a semântica de ações de uma linguagem L, o gerador de acionador gera um programa, o acionador de L, a partir da mesma o acionador de L incorpora a semântica de ações de L quando aplicado à arvore sintática abstrata (AST) de um programa P de L, o acionador de L produz a ação-programa de P 22 Usando o gerador de acionadores... AST de P Semântica de Ações de Pantanal Gerador de Acionadores Acionador de Pantanal Ação-programa de P 23 Um Interpretador para Pantanal Semântica de Ações de Pantanal Gerador de Acionadores programa fonte Acionador de Pantanal Parser de Pantanal AST árvore da ação-programa Ani resultado da interpretaçã o 24 Algumas Considerações sobre Ani um melhor entendimento da notação de ações especificações executáveis em semântica de ações baseado na semântica operacional da notação de ações notação de dados implementada mostramos como construir um interpretador para uma linguagem usando Ani 25 WebAni interface na Web para Ani http://www.cin.ufpe.br/~rat/webani Referências Action Semantics. Peter D. Mosses. Cambridge University Press, 1992. Programming Language Syntax and Semantics. David A Watt. Prentice Hall, 1991. A Tutorial on Action Semantics. Peter D. Mosses, 1996. Action Semantics Home Page. An Overview of Action Semantics. Hermano Moura. 1996. http://www/hermano/publicacoes Semântica de Ações Conceitos Básicos de Semântica de Ações, Especificações em Semântica de Ações, Primeiros Exemplos de Ações, WebAni