A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Traduções Dirigidas por Sintaxe

Apresentações semelhantes


Apresentação em tema: "Traduções Dirigidas por Sintaxe"— Transcrição da apresentação:

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

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

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

4 1. Introdução

5 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

6 Exemplo

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

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

9 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

10 2. Definição Dirigida por Sintaxe

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

12 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

13 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

14 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

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

16 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

17 3. Esquema de Tradução

18 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

19 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

20 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

21 Exemplo 3

22 Exemplo 4

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

24 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

25 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

26 Exemplo 5

27 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!

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

29 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

30 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

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

32 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

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

34 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

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

36 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

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

38 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


Carregar ppt "Traduções Dirigidas por Sintaxe"

Apresentações semelhantes


Anúncios Google