Traduções Dirigidas por Sintaxe

Slides:



Advertisements
Apresentações semelhantes
gerador de código intermediário
Advertisements

Tradução Dirigida por Sintaxe
Faculdade Pernambucana - FAPE Setembro/2007
Fundamentos de Sistemas Operacionais Aula 2 Princípios de Programação Prof. Belarmino.
Compiladores - Introdução. O que é um Compilador? “Um compilador é um programa que lê um programa escrito em uma linguagem (linguagem fonte) e a traduz.
Relatórios.  O Relatório é um componente ActiveX chamado ActiveReport, que permite a visualização e impressão de valores instantâneos de variáveis do.
Lógica de Programação Aula 25 Prof. Auler Gomes. Introdução - subrotina Muitos problemas grandes ou nem tão grandes, mas de solução mais complexa podem.
1 Aula 06 – Funções Prof. Filipe Mutz Colocar mais exemplos de funções simples no começo.
Reconhecimento de Padrões Métodos Sintático e Estrutural Disciplina: Tópicos em Inteligência Artificial Prof. Josué Castro.
COMPONENTE DE GERAÇÃO DE BOLETOS BANCÁRIOS EM DELPHI Aluno: Jonas Ricardo Viel Prof. Adilson Vahldick - Orientador.
Ambiente Virtual de Avaliações Utilizando Certificados Digitais Fernando Gevard – Acadêmico Paulo Fernando da Silva - Orientador.
DIAGRAMA DE SEQUENCIA Sandro Carvalho. OBJETIVO DO DIAGRAMA Apresentar as interações entre objetos na ordem temporal em que elas acontecem.
Ferramenta Web para testes de fórmulas matemáticas Kauê da Silva Vieira Orientador: Aurélio Faustino Hoppe.
Lógica de programação Introdução à lógica de programação Diagrama de bloco Programação Sequencial 1.
UM FRAMEWORK PARA ALGORITMOS BASEADOS NA TEORIA DOS GRAFOS Acadêmico: Maicon Rafael Zatelli Orientador: Dr. Paulo C é sar Rodacki Gomes.
Douglas Matheus de Souza Prof. Marcel Hugo, Mestre - Orientador.
Estruturas de Repetição
Aula 3 - Estruturas de Repetição
Plano de Ensino, Recados Importantes & Exercícios
Polimorfismo e suas aplicações em C++.
Projeto de Compiladores
Prof Adm Dilcimar G. Araújo CRA-MG /D
Teoria da Computação Prof. Msc. Ricardo Loiola
Criação: Caroline Brasileiro Atualização: Laura Matos
INSTITUTO FEDERAL DO CEARÁ Mauro Oliveira
IP – Listas Prof. Eduardo Falcão.
Introdução ao VisuALG Prof. Andrew Rodrigues
GERAÇÃO DE CÓDIGO PARA A MÁQUINA VIRTUAL DE RÓTULOS
Introdução a Linguagem Java
Módulo I Capítulo 2: IDE e Variáveis
PROGRAMAÇÃO ORIENTADA A OBJETO - JAVA
Prof. Wellington Franco Sub-Rotinas:Funções e Procedimentos
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Arquitetura de Computadores
Diagrama de Estado Prof. Thales Castro.
Estrutura de dados Pilhas e filas
Diagrama de Atividade Prof. Thales Castro.
FUNDAMENTOS DE PROGRAMAÇÃO
FUNDAMENTO DE PROGRAMAÇÃO
Introdução à Programação BCC 201 Aula
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
Sistemas de Numeração O número é um conceito abstrato que representa a idéia de quantidade. Sistema de numeração é o conjunto de símbolos utilizados para.
Kroton Educacional Universidade uniderp (Unidade Matriz)
Algoritmos e Técnicas CEFET/RN.
IP – Repetições for Prof. Eduardo Falcão.
Aula 2: Representação de dados
COMPILADORES 06 Prof. Marcos.
Algoritmos e Programação I

Construções Lógico –Matemáticas – Aula 08
Aula 22 Modularização 22/10/08.
MBA em Gestão de Projetos
LÓGICA DE PROGRAMAÇÃO LÓGICA: parte da filosofia que trata das formas do pensamento em geral (dedução, indução, hipótese, inferência).
Linguagem de Programação
MER – Modelo de Entidade Relacionamento
Rosemary Silveira Filgueiras Melo
Título do Trabalho Trabalho de Conclusão de Curso (1 ou 2)
Prof. Elisson de Andrade
MODELANDO SISTEMAS LTI NO DOMÍNIO DA FREQUÊNCIA.
Prof.: Bruno Rafael de Oliveira Rodrigues
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
MODELANDO SISTEMAS LTI NO DOMÍNIO DA FREQUÊNCIA.
Grafos: Conceitos Básicos
Introdução a lógica de programação Tipos de algoritmos.
Apresentação da Disciplina Disciplina: Linguagens de Programação Prof. Antonio Oseas.
Tipos Primitivos de Dados
Compiladores – Conceitos Básicos
Tratamento de Não Conformidade Necessidade ou expectativa que é expressa, geralmente, de forma implícita ou obrigatória. Requisito.
Análise Sintática (parte 1) “Pois o salário do pecado é a morte, mas o dom gratuito de Deus é a vida eterna em Cristo Jesus, nosso Senhor.” (Romanos 6:23)
Transcrição da apresentação:

Traduções Dirigidas por Sintaxe “E o segundo é semelhante a ele: ‘Ame ao próximo como a si mesmo’. Destes dois mandamentos dependem toda a Lei e os profetas.” (Mateus 22:39-40)

Etapas da Compilação Front-End (Análise) Back-End (Síntese) Análise Léxica Análise Sintática Analise Semântica Geração de Código Intermediário Final Front-End (Análise) Back-End (Síntese)

Sumário Introdução Definição Dirigida por Sintaxe Esquema de Tradução

1. Introdução

Traduções Dirigidas por Sintaxe As produções de uma gramática são suas “regras sintáticas” Traduções Dirigidas por Sintaxe associam regras semânticas a cada uma dessas regras sintáticas, com algum objetivo Regra sintática → Regra semântica

Exemplo

Traduções Dirigidas por Sintaxe Possíveis aplicações Criação da árvore sintática em memória Verificação de tipos Geração de código intermediário Etc. Enfim, ela pode ser usada em todo o restante das etapas do front-end...

Traduções Dirigidas por Sintaxe Existem dois tipos Definição Dirigida por Sintaxe – cada nó da árvore possui atributos, e as regras semânticas definem os valores que eles devem receber Esquemas de Tradução – associam código qualquer a cada produção, para ser executado durante a análise sintática (parsing) A distinção é um pouco confusa...

Traduções Dirigidas por Sintaxe “Definição Dirigida por Sintaxe” é uma descrição mais abstrata e formal de uma tradução Especifica a tradução Já um “Esquema de Tradução” é a descrição concreta do código que vai ser executado para cada produção Projeta a implementação de uma definição dirigida por sintaxe

2. Definição Dirigida por Sintaxe

Definição Dirigida por Sintaxe É a gramática da linguagem acrescida de: Descrição dos atributos que cada símbolo (terminal ou não-terminal) possui Regras semânticas, associadas a cada produção, para definir os valores dos atributos Chamaremos de DDS, apesar de, em inglês, a sigla ser SDD (Syntax-Directed Definition)

Exemplo 1 Com base em uma gramática de expressões, o objetivo do exemplo é avaliar o valor numérico das expressões Para os não-terminais L, E, T e F, vamos considerar que possuem o atributo “val” O símbolo terminal digit terá um atributo “lexval”, com o seu valor numérico O símbolo terminal ; (ponto-e-vírgula) não tem importância nesta tradução

Exemplo 1 Produção Regra Semântica L → E ; E → T + E1 E → T T → F * T1 L.val = E.val E → T + E1 E.val = T.val + E1.val E → T E.val = T.val T → F * T1 T.val = F.val * T1.val T → F T.val = F.val F → digit F.val = digit.lexval

Exemplo 2 Este exemplo usa uma gramática de expressões com soma e subtração apenas O objetivo da DDS neste exemplo é construir a árvore sintática Cada não-terminal tem um atributo “node” que representa o nó da árvore que representa aquela ocorrência do não-terminal

Exemplo 2 Produção Regra Semântica E → E1 + T E → E1 - T E → T E.node = new Op(‘+’, E1.node, T.node) E → E1 - T E.node = new Op(‘-’, E1.node, T.node) E → T E.node = T.node T → ( E ) T.node = E.node T → num T.node = new Leaf(num) T → identifier T.node = new Leaf(identifier)

Definição Dirigida por Sintaxe Não se preocupa com detalhes, como a ordem de definição dos atributos Sua principal aplicação é para especificar traduções mais simples Mais abstrata

3. Esquema de Tradução

Esquema de Tradução É uma extensão do conceito de DDS Possui trechos de código como regras semânticas (que passam a ser chamadas ações semânticas) Controla a ordem de execução das ações semânticas Implementação da tradução (ou da DDS) Mais concreta

Esquema de Tradução Assim, um Esquema de Tradução é uma gramática acrescida de: Descrição dos atributos que cada símbolo (terminal ou não-terminal) possui Ações semânticas, associadas a cada produção Descritas na forma de trechos de código de uma linguagem de programação real Posicionadas dentro da produção como se fossem um símbolo, para indicar o momento exato de executar a ação

Exemplo 3 Exemplo 5.18 do livro do dragão (2ª edição) Parecida com a gramática do Exemplo 1 (avalia expressões) Porém, entenda as regras como código Ao final, imprime o resultado

Exemplo 3

Exemplo 4

Exemplo 4 Indique qual seria a saída para esta entrada (que pode ser reconhecida sem ambiguidade): 2 + (3 * 4)

Sobre os Exemplos 3 e 4 Todas as ações vêm no final da produção Porém, em alguns casos, as ações precisam vir no meio da produção

Exemplo 5 Exemplo 5.21 do livro O objetivo deste Esquema de Tradução é imprimir traduzir expressões para a notação prefixada Exemplo: traduz de “1+2*3” para “+1*23” Não-terminais sem atributos

Exemplo 5

Ordem das Ações Nesta gramática, algumas ações vêm no início das produções Para garantir imprimir na forma prefixada Como entender a ordem em que as ações são disparadas? Montar a árvore, tratando as ações como símbolos!

Exemplo 5: Árvore Exemplo de árvore para a entrada “3*5+4”

Exemplo 5: Execução Para executar, “visitar” cada nó examinando seus filhos da esquerda para a direita Quando for uma ação, executa-a Quando for outro nó, prossegue recursivamente Saída (console) para o caso anterior (3*5+4): + * 3 5 4

Exemplo 5: Exercício Qual a saída gerada para a entrada “1*2+3” ? Desenhar a árvore Executar Mostrar a saída que seria impressa no console

Implementando um Esquema de Tradução Se você for implementar um pequeno “compilador” baseado em um dos Esquemas de Tradução deste slide, como você faria? Quais formas de implementar ? Discutir...

Implementando um Esquema de Tradução Os exemplos apresentados devem ter sugerido a você duas formas de implementar: Durante a análise sintática Por meio da criação de uma árvore sintática

1. Durante a Análise Sintática O parser vai intercalar ações de reconhecimento sintático, com ações semânticas Durante reconhecimento de uma produção, Quando o parser chega no ponto onde a ação foi posicionada (exemplo: após certo símbolo, etc.) Ele dispara a ação semântica desejada Ação hard-coded no parser... Depois, prossegue o reconhecimento...

1. Durante a Análise Sintática Nem sempre é possível implementar um Esquema de Tradução durante a análise sintática O exemplo 5 é um desses casos As ações das produções 2 e 4 precisam ser executadas antes do parser identificar qual a produção ele vai reconhecer

2. Na Árvore Sintática Primeiro, a árvore é construída Por um Esquema de Tradução no parser Criar funções que visitam os nós da árvore Nelas, estarão “hard-coded” as ações semânticas Depois de criada a árvore, o Esquema de Tradução é disparado chamando a função que visita a raiz (símbolo inicial)

2. Na Ávore Sintática Funções para visitar cada nó Disparam sucessivamente novas visitas aos filhos deste nó, da esquerda para a direita Porém, no lugar onde o Esquema de Tradução prevê uma ação semântica, ao invés de visitar o próximo filho, a função vai executar a ação Rever o exemplo 5

Análise Vantagens de fazer na Análise Sintática: Análise Sintática e Esquema de Tradução feitos percorrendo 1 vez apenas o código de entrada Vantagens de fazer na Árvore: Permite disparar ações posicionadas em qualquer lugar da produção (ex.: no início) É possível implementar diferentes Esquemas de Tradução, de forma mais modularizada Ex.: um para verificação semântica, outro para geração de código intermediário, etc.

Conclusão Dois tipos de Traduções Dirigidas por Sintaxe: Definição Dirigida por Sintaxe definição mais abstrata serve para especificar Esquema de Tradução definição mais concreta (ação = código) serve para projetar a implementação Veremos mais detalhes de implementação de Esquemas de Tradução na próxima aula