Semântica de Linguagens de Programação

Slides:



Advertisements
Apresentações semelhantes
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Advertisements

Nilo Menezes – Lógica de Programação –
INFORMAÇÕES COMPLEMENTARES
Vamos contar D U De 10 até 69 Professor Vaz Nunes 1999 (Ovar-Portugal). Nenhuns direitos reservados, excepto para fins comerciais. Por favor, não coloque.
Capa Disciplina: Ajustamento de Observações
Operadores e Funções do LINGO
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Exercício do Tangram Tangram é um quebra-cabeças chinês no qual, usando 7 peças deve-se construir formas geométricas.
Linguagem de Montagem Visão geral.
TEORIA DA COMPUTAÇÃO Parte II  Linguagens Livres de Contexto
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 3.
Software Básico Silvio Fernandes
Curso de ADMINISTRAÇÃO
Prof. Heloise Manica Paris Teixeira
Relações Adriano Joaquim de O Cruz ©2002 NCE/UFRJ
Introdução a Informática
EXPRESSÕES ARITMÉTICAS
EXPRESSÕES ARITMÉTICAS
Sistemas Operacionais
Aula 2 Aspectos Preliminares
Aula 4 Nomes, Vinculações, Tipos e Escopos
Aula 5 Tipos de Dados Universidade do Vale do Rio dos Sinos
EXEMPLOS DE ESTRUTURAS PROTENDIDAS
AP 1.
Provas de Concursos Anteriores
Instituto de Geociências Universidade Federal de Minas Gerais
Caracterização de Projeto
Paradigmas de programação
Renda até 2 SM.
Prof. Bruno Moreno Aula 4 – 11/03/2011
(CESPE/ Técnico Judiciário do TRT 17ª Região/ES) O Superior Tribunal de Justiça entende que o candidato aprovado em concurso público dentro do limite.
MECÂNICA - DINÂMICA Exercícios Cap. 13, 14 e 17. TC027 - Mecânica Geral III - Dinâmica © 2013 Curotto, C.L. - UFPR 2 Problema
1 CENTRO DE DESENVOLVIMENTO E PLANEJAMENTO REGIONAL – 2006 P Ó S-GRADUA Ç ÃO EM ECONOMIA Microeconomia I Prof.: Edson Domingues Cap í tulo II: Escolha.
CATÁLOGO GÉIA PÁG. 1 GÉIA PÁG. 2 HESTIA PÁG. 3.
Lemas (Sudkamp)  .
Gramáticas Livres de Contexto
Plataforma Brasil – Submissão de pesquisa
Projeto Marcas que Eu Gosto 1 PROJETO MARCAS QUE EU GOSTO Estudos Quantitativo de Consumidores Janeiro / 2005.
Irradiações 1- Definição 2- Mecânica da Irradiação
Teoria e Implementação de Linguagens Computacionais – IF688
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Estudo dos Conceitos e Paradigmas de Programação
DI UFPE Semântica de Java Java and the Java Virtual Machine - Definition, Verification, Validation Robert Stark, Joachim Schmid, and Egon Borger Wolfram.
Análises léxica e sintática
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Paradigma Funcional Apresentação de LF1.
Modelos de Paradigmas de programação
DIEGO RICARDO DE ARAUJO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO INSTITUTO DE CIÊNCIA EXATAS UNIVERSIDADE FEDERAL DE JUIZ DE FORA Seleção de Características.
1 Aplicações do Fecho Regular. 2 A interseção de uma linguagem livre de contexto e uma linguagem regular é uma linguagem livre de contexto livre de contexto.
Olhe fixamente para a Bruxa Nariguda
Linguagem Pascal Prof. Sérgio Rodrigues.
Capítulo II Gramáticas e Linguagens
Máquina de Turing Universal
Analise sintática aula-07-analise-sintática.pdf.
Analise Semântica aula-10-analise-semântica.pdf.
Arquiteturas de Gerenciamento
AM020C A interface entre Meio Ambiente, Sociedade e Economia Indicadores de produtividade e empregabilidade da agricultura do Brasil. Aluna Andressa Santos.
Aula 1 – Profª Danielle Costa
PCS - Departamento de Engenharia de Computação e Sistemas Digitais Projeto de Formatura – Turmas 2010 Integrantes: Professor Orientador: Co-orientador:
Semântica Denotacional Semântica para Funções Centro de Informática, UFPE Recife, Brasil.
COMPILADORES 04 Prof. Marcos.
Semântica de Linguagens de Programação
1 IO em LF1 Paradigmas de Linguagens de Programação 2007 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier.
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.
Sintaxe de uma Linguagem
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
SEMÂNTICA DENOTACIONAL Alexandre Mota
Transcrição da apresentaçã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)

Introduzir conceitos de semântica formal de linguagens de programação Objetivo Introduzir conceitos de semântica formal de linguagens de programação

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

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

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

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

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

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

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)

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.

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

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

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

Semântica Objetivo: Tipos de semântica 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

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.

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.

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

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.

Semântica De Ações

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.

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.

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

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

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

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.

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

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

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

Exemplo de Descrições Sequência de Comandos: Sintaxe: Semântica: Comando --> [[ Comando Comando ]] Semântica: execute _ :: Comando --> action. execute [[ c1 c2 ]] = | execute c1 and then | execute c2.

Semântica de Ações - Faceta Funcional

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.

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.

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

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

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

Exemplo de descrição Constantes Numéricas. Sintaxe: Semântica: Expressão <-- [[ Integer ]]. Semântica: avalie _ :: Expressão --> action. avalie [[ x : Integer ]] = give valuation of x.

Exemplo de descrição Soma de Expressões. Sintaxe: Semântica: 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).

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

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

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

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)

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)

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)

Semântica de Ações: Faceta Declarativa

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.

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”

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

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

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

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

Exemplo de descrição Declaração de Constantes. Sintaxe: Semântica: 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.

Exemplo de descrição Expressões de Constantes. Sintaxe: Semântica: Expressão<--[[ Identifier ]]. Semântica: avalie _ :: Expressão --> action. avalie [[i : Identifier]] = give the value bound “i”.

Semântica de Ações: Faceta Imperativa

Definição A faceta imperativa define ações que manipulam a memória do programa Utilizada principalmente na declaração de variáveis

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.

Exemplos de Ações | allocate a cell then | | store 10 in the given cell | and then | | store 20 in the given cell | | give the integer stored in the given cell.

Exemplo de Descrição Linguagem com declarações e variáveis e comandos imperativos: int x; int y; x = 1; y = x + 1;

Exemplo de Descrição Declaração de Variáveis Sintaxe: Semântica: Declaração <-- [[ “int” Identifier ]] . Semântica: elabore _ :: Declaração --> action. elabore [[ “int” i ]] = | allocate a cell then | bind token of i to the given cell.

Exemplo de Descrição Comando de Atribuição Sintaxe: Semântica: Comando <-- [[ Identifier “=” Expressão]] . Semântica: execute _ :: comando --> action. execute [[ c “=” e ]] = | avalie e then | store the given value in the cell bound to token to c.

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 d hence | execute c.

Exemplo de Descrição Comando While Sintaxe: Semântica: 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.

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

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.

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.

Exemplos | 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 | enact application the given | abstraction to 5

Exemplos de Descrição Declaração de Procedimentos Sintaxe: Semântica: 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.

Exemplos de Descrição Chamada a procedimento Sintaxe: Semântica: Comando <-- [[ Identifier “()” ]] . Semântica: execute [[ i “()” ]] = enact the abstraction bound to i.

Pratica

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.