1 / 69

Semântica de Linguagens de Programação

Semântica de Linguagens de Programação. Centro de Informática, UFPE Luis Carlos (lcsm@cin.ufpe.br) Hermano Moura (hermano@cin.ufpe.br). Objetivo. Introduzir conceitos de semântica formal de linguagens de programação. =. Motivação: Qual o significado do seguinte programa?. program simples =

chandra
Télécharger la présentation

Semântica de Linguagens de Programação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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

  3. = Motivação: Qual o significado do seguinte programa? programsimples= varx:int :=3 in x:=x+5 end. ?

  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

  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

  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

  7. Ciclo de vida de LP baseado em especificações formais projeto especificação formal protótipos compiladores manuais, livros

  8. Introdução • características principais de uma lp: • sintaxe • semântica • pragmática

  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)

  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.

  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

  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

  13. Introdução • características principais de uma lp: • sintaxe • semântica • pragmática

  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

  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.

  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.

  17. Exemplo 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

  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.

  19. Semântica De Ações

  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.

  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.

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

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

  24. Definição • A faceta básica define operadores que não manipulam nenhum tipo de informação apenas controlam o fluxo do programa

  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 bsequêncialmente • aorb -- Executa uma das ações e se esta falhar a outra ação será executada.

  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.

  27. Exemplos de Ações: | complete |complete and then or | complete | fail | complete unfolding and then | | complete | fail | and then | | unfold

  28. Exemplo de Descrições • Comandos vazio • Sintaxe: • Comando --> [[ “;” ]] • Semântica: • execute _ :: Comando --> action. • execute [[ “;” ]] = complete.

  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.

  30. Semântica de Ações - Faceta Funcional

  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.

  32. Principais Operadores Funcionais • givee -- produz o valor resultante da avaliação da expressão e. • xthen 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.

  33. Exemplos de Ações give 10 | give 20 then | give sum(2,the given integer#1)

  34. Exemplos de Ações(cont.) | | give 1 | and then | | give 2 then | give product(the given integer#1, | the given integer # 2)

  35. Exemplo de Descrição • Linguagens de Expressões • 1 + 2 • 4 • 5 * 2

  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.

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

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

  39. Utilização • Qual a semântica de “1 + 2” ? 1o Passo: Analise Sintática: 1 + 2 ==> [[ [[ “1” ]] “+” [[ “2” ]] ]]

  40. Utilização • Qual a semântica de “1 + 2” ? 2o Passo: Executar Função Semântica: avalie [[ [[ “1” ]] “+” [[ “2” ]] ]]

  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)

  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)

  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)

  44. Semântica de Ações: Faceta Declarativa

  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.

  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 tboundto n -- Produtor que recupera o valor associado ao identificador “n” e testa se ele é do tipo “t”

  47. Exemplos 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”)

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

  49. Exemplos: | 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

  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

More Related