Esquemas L-atribuídos

Slides:



Advertisements
Apresentações semelhantes
Lógica de Predicados e Representação de Conhecimento
Advertisements

Software Básico Silvio Fernandes
gerador de código intermediário
AULA 8 Profa. Sandra de Amo GBC053 – BCC
5.5 – Análise Bottom-Up Tentativa de construir uma árvore sintática para a sentença analisada, começando das folhas, indo em direção à raiz (pós-ordem.
Teoria da Computação VERIFICAÇÃO DE EQUIVALÊNCIA FORTE DE PROGRAMAS
III – Análise sintáctica
I - Noções dum compilador
IV – Análise semântica DEI Associação de regras semânticas a produções
Exercícios PAA- Grafos
Prof. Yandre Maldonado e Gomes da Costa
Teoria da Computação FIC– Ciência da Computação
Análise Sintática Ascendente ­
Estrutura de Dados e Algoritmos e Programação e Computadores II
Algoritmos de Junção – BNL e IndexNL AULA 16 Profa. Sandra de Amo GBC053 – BCC
Profa. Heloise Manica Paris Teixeira
Análise Sintática - Continuação
Análise Sintática - Continuação
Árvores.

André Lopes Pereira Luiz Carlos Barboza Júnior
Classificação e Pesquisa de Dados
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Análise Sintática Ascendente
Relações em uma Gramática
Análise Léxica Supondo o trecho de programa abaixo:
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
5.6 – Complementos de Yacc – Usando Yacc com gramáticas ambíguas
Grafos Msc. Cintia Carvalho Oliveira Doutoranda em Computação – UFU
Folha de Cálculo Como Dar Nome a Uma ou mais Células?
T ÓPICOS DE I.A. Métodos de Busca Busca em Espaços de Estado Prof. Mário Dantas.
Lema do Bombeamento Linguagens Livres de Contexto
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
INF 1010 Estruturas de Dados Avançadas
Compiladores, Aula Nº 11 João M. P. Cardoso
Lema do Bombeamento Linguagens Livres de Contexto
Gramáticas Livres de Contexto
Compiladores, Aula Nº 10 João M. P. Cardoso
Capítulo 11 Programação Lógica
Análises léxica e sintática
Esquemas de Tradução Prof. Alexandre Monteiro
Algoritmos e Estruturas de Dados I – Ponteiros
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Faculdade Talentos Humanos - FACTHUS - Algoritmo I - Rogério Rodrigues
Análises léxica e sintática
Construção e Análise de Algoritmos
Projeto de Tradutor Preditivo. Introdução Introdução Esquemas L-atribuidos são reconhecidos por analisadores Top-Down. Entre estes analisadores, se encontra.
Análise Sintática Prof. Alexandre Monteiro
Tradução Dirigida por Sintaxe
CES-41 COMPILADORES Aulas Práticas Capítulo II A Ferramenta Yacc.
Linguagens Livres de Contexto
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Faculdade Pernambucana - FAPE Setembro/2007
COMPILADORES 04 Prof. Marcos.
Uma Infraestrutura para a
O que é CSS? O CSS (Cascading Style Sheets) ou Folhas de Estilo em Cascatas é uma documentação que define as regras de formatação que serão aplicadas aos.
Sintaxe de uma Linguagem
PLP – JavaCC Java Compiler Compiler
Analisador sintático: Tipos de análises sintáticas
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.
Informática Teórica Engenharia da Computação. Teoria da Computação Contexto do que vamos começar a estudar As linguagens também podem ser definidas formalmente.
INE5408 Estruturas de Dados Árvores Binárias de Busca - Características - Algoritmos - Inserção, deleção e pesquisa.
Transcrição da apresentação:

Esquemas L-atribuídos

Conceitos Permitem usar atributos herdados e sintetizados Dada uma produção A→ X1 X2 X3 ... Os atributos herdados de X2 só devem depender de atributos de A e de X1. Os atributos herdados de X3 só devem depender de atributos de A, de X1 e de X2. E assim por diante. Todo esquema S-atribuído será também L-atribuído

Avaliação de atributos Para avaliar os atributos, usa-se o algoritmo de caminhamento: Caminhamento_profundidade(n:nodo) Inicio Para cada filho m de n, da esquerda para a direita, faça: Calcule os atributos herdados de m; Caminhamento_profundidade(m); Fim para Calcule os atributos sintetizados de n; Fim

Ordenação das ações semânticas Ao se definir a gramática, deve ser garantido que um atributo já seja conhecido ao ser referenciado em alguma ação. Portanto: Ação para calcular atributo herdado de símbolo na parte direita da produção deve estar à esquerda desse símbolo. Ação para calcular atributo não terminal à esquerda da produção deve estar no final da produção. Ação para calcular atributo sintetizado de símbolo na parte direita da produção deve estar à direita desse símbolo.

Implementação de esquemas L-atribuidos Esquemas L-atribuídos normalmente serão implementados por analisadores top-down. Deve-se portanto, eliminar a recursividade à esquerda das produções, se existirem. Ao se eliminar a recursividade, as ações semânticas da produção também devem ser modificadas.

Implementação de esquemas L-atribuidos Sendo a produção genérica com recursividade: A → A1 B {A.a = g(A1.a, B.b)} A → C {A.a = f(C.c)} A eliminação da recursividade da gramática pode ser feita inserindo o símbolo X, tal que: A → C X X → B X | ε

Implementação de esquemas L-atribuidos Sendo a produção genérica com recursividade: A → A1 B {A.a = g(A1.a, B.b)} A → C {A.a = f(C.c)} A função calculada na ação da segunda produção será transferida para a produção gerada por A, porém seu valor irá para atributo herdado do símbolo X. O atributo sintetizado de A será obtido no final da avaliação da produção, e irá depender de atributo sintetizado de X. A → C {X.h = f(C.c)} X {A.a = X.s}

Implementação de esquemas L-atribuidos Sendo a produção genérica com recursividade: A → A1 B {A.a = g(A1.a, B.b)} A → C {A.a = f(C.c)} A função calculada na ação da primeira produção será transferida para a produção gerada por X, porém seu valor irá para atributo herdado do símbolo X1. O atributo sintetizado de X será obtido da mesma forma, no final da avaliação. X → B {X1.h = g(X.h, B.b)} X1 {X.s = X1.s}

Implementação de esquemas L-atribuidos Sendo a produção genérica com recursividade: A → A1 B {A.a = g(A1.a, B.b)} A → C {A.a = f(C.c)} A produção que gera palavra vazia gerada por X será usada para se obter o valor do atributo sintetizado de X, da forma: X → ε {X.s = X.h}

Implementação de esquemas L-atribuidos Sendo a produção genérica com recursividade: A → A1 B {A.a = g(A1.a, B.b)} A → C {A.a = f(C.c)} Eliminando-se a recursividade teremos: A → C {X.h = f(C.c)} X {A.a = X.s} X → B {X1.h = g(X.h, B.b)} X1 {X.s = X1.s} X → ε {X.s = X.h}

Exemplo Gramática a ser avaliada: E→E1 + T {E.val = E1.val + T.val} E→E1 - T {E.val = E1.val - T.val} E→T {E.val = T.val} T→(E) {T.val = E.val} T→num {T.val = num.lexval} (Recursividade em E. Não é preciso modificar as duas últimas produções)

Exemplo Eliminando a recursividade, inserindo o símbolo X: E→T {X.h = T.val} X {E.val = X.s} X→ + T {X1.h = X.h +T.val} X1{X.s = X1.s} X→ - T {X1.h = X.h – T.val} X1{X.s = X1.s} X → ε {X.s = X.h} T→(E) {T.val = E.val} T→num {T.val = num.lexval}

Exemplo E T X.h= X E.val= num T.val= + T X1.h= X1 X.s= num T.val= Avaliando a sentença 8 + 4 – 1, teremos a árvore: E T X.h= X E.val= num T.val= + T X1.h= X1 X.s= num T.val= - T X2.h= X2 X1.s= num T.val= ε X2.s =

Exemplo E T X.h= X E.val= num T.val= + T X1.h= X1 X.s= 8 num T.val= Atribuindo valores ao símbolo num: E T X.h= X E.val= num T.val= + T X1.h= X1 X.s= 8 num T.val= 4 - T X2.h= X2 X1.s= num T.val= ε X2.s = 1

Exemplo E T X.h= X E.val= num T.val=8 + T X1.h= X1 X.s= 8 num T.val= Fazendo o caminhamento na árvore: E T X.h= X E.val= num T.val=8 + T X1.h= X1 X.s= 8 num T.val= 4 - T X2.h= X2 X1.s= num T.val= ε X2.s = 1

Exemplo E T X.h=8 X E.val= num T.val=8 + T X1.h= X1 X.s= 8 num T.val= Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X1.h= X1 X.s= 8 num T.val= 4 - T X2.h= X2 X1.s= num T.val= ε X2.s = 1

Exemplo E T X.h=8 X E.val= num T.val=8 + T X1.h= X1 X.s= 8 num T.val=4 Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X1.h= X1 X.s= 8 num T.val=4 4 - T X2.h= X2 X1.s= num T.val= ε X2.s = 1

Exemplo E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1 X.s= Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1 X.s= 8 num T.val=4 4 - T X2.h= X2 X1.s= num T.val= ε X2.s = 1

Exemplo E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1 X.s= Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1 X.s= 8 num T.val=4 4 - T X2.h= X2 X1.s= num T.val=1 ε X2.s = 1

Exemplo E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1 X.s= Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1 X.s= 8 num T.val=4 4 - T X2.h=11 X2 X1.s= num T.val=1 ε X2.s = 1

Exemplo E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1 X.s= Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1 X.s= 8 num T.val=4 4 - T X2.h=11 X2 X1.s= num T.val=1 ε X2.s = 11 1

Exemplo E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1 X.s= Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1 X.s= 8 num T.val=4 4 - T X2.h=11 X2 X1.s= 11 num T.val=1 ε X2.s = 11 1

Exemplo E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1X.s= 11 Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X1.h=12 X1X.s= 11 8 num T.val=4 4 - T X2.h=11 X2 X1.s= 11 num T.val=1 ε X2.s = 11 1

Exemplo E T X.h=8 X E.val= 11 num T.val=8 + T X1.h=12 X1 X.s= 11 Fazendo o caminhamento na árvore: E T X.h=8 X E.val= 11 num T.val=8 + T X1.h=12 X1 X.s= 11 8 num T.val=4 4 - T X2.h=11 X2 X1.s= 11 num T.val=1 ε X2.s = 11 1

Obtenção da árvore sintática Alterando algumas ações da gramática (os não terminais terão ponteiros – ptr - e será gerado nó ao invés de cálculo): E→T {X.h = T.ptr} X {E.ptr = X.s} X→ + T {X1.h = geranodo(‘+’,X.h,T.ptr)} X1{X.s = X1.s} X→ - T {X1.h = geranodo(‘-’,X.h ,T.ptr)} X1 {X.s = X1.s} X → ε {X.s = X.h} T→(E) {T.ptr = E.ptr} T→num {T.ptr = gerafolha(num,num.lexval)} T→id {T.ptr = gerafolha(id,id.indice)}

Obtenção da árvore sintática Portanto, serão geradas folhas da árvore ao se processar produções em T, e nodos ao se processar as produções em X. Para a entrada x - 2 + y, a árvore de derivação fica: E T X id - T X + num T X Gerar nodo id ε Gerar folha Gerar nodo Gerar folha Gerar folha

Árvore de sintaxe obtida + - id y id x num 2