Análise Sintática Ascendente ­

Slides:



Advertisements
Apresentações semelhantes
FAPE - Curso de Ciência da Computação
Advertisements

Software Básico Silvio Fernandes
Marco Antonio Montebello Júnior
Prova Considere a sequencia de B-trees geradas pela inclusão das chaves 1, 2, 3, 4,..., nesta ordem, numa B-tree de ordem 2 inicialmente vazia.
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.
III – Análise sintáctica
III – Análise sintáctica
III – Análise sintáctica
III – Análise sintáctica Parsers ascendentes Instruções shift-reduce Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.5 LFA 1999/ Jorge.
Prof. Yandre Maldonado e Gomes da Costa
Prof. Yandre Maldonado e Gomes da Costa
Compiladores FIC– Ciência da Computação Professor: Ciro Meneses Santos
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Forma Normal de Chomsky
Profa. Heloise Manica Paris Teixeira
Análise Sintática - Continuação
Análise Sintática - Continuação
Linguagens Livres de Contexto
Linguagens Livre de Contexto
esquerda p/ direita,read only
Identificando Linguagens Não Regulares
Aplicações de Pilhas Pilhas são fundamentais em diversas áreas da computação: Sistemas Operacionais Arquitetura de Computadores Compiladores Entre outros.
YACC.
Análise Sintática Ascendente
Relações em uma Gramática
Linguagem de Prog. e Programas
Análise Léxica Supondo o trecho de programa abaixo:
Construção de Compiladores
*(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada.
Construção de Compiladores
Construção de Compiladores
5.6 – Complementos de Yacc – Usando Yacc com gramáticas ambíguas
Introdução a Computação e Cálculo Numérico
Lema do Bombeamento Linguagens Livres de Contexto
Determinar o tipo de gramática
Compiladores, Aula Nº 19 João M. P. Cardoso
Compiladores, Aula Nº 9 João M. P. Cardoso
Gramáticas Livres de Contexto
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Compiladores, Aula Nº 10 João M. P. Cardoso
Análises léxica e sintática
Análise Léxica e Sintática
Aulão de Linguagens Formais e Compiladores
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Esquemas L-atribuídos
Análise Sintática LR Prof. Alexandre Monteiro
Análises léxica e sintática
Projeto de Tradutor Preditivo. Introdução Introdução Esquemas L-atribuidos são reconhecidos por analisadores Top-Down. Entre estes analisadores, se encontra.
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.
Compiladores.
Análise Sintática Prof. Alexandre Monteiro
CES-41 COMPILADORES Aulas Práticas Capítulo II A Ferramenta Yacc.
Aula 18 1 Análise Sintáctica Compiladores, Aula Nº 18 João M. P. Cardoso.
Exercícios de Pilha e Fila
Mas para que serve um analisador sintático? Verificar se a estrutura gramatical do programa está correta Escrito de outra forma: O texto segue as regras.
Linguagens Livres de Contexto
Faculdade Pernambucana - FAPE Setembro/2007
COMPILADORES 04 Prof. Marcos.
Sintaxe de uma Linguagem
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
Analisador sintático: Tipos de análises sintáticas
1 CIn / UFPE Algoritmos de Parsing Gustavo Carvalho Março 2011.
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Reverso de uma Linguagem Regular
1 Decidibilidade continuação…. 2 Teorema: Para qualquer linguagem recursivamente enumerável é indecidível determinar se é finita Prova: Vamos reduzir.
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.
IF688 – Análise Sintática. Resumo desta aula Revisão de conceitos gerais de parsing Método de parsing top down e bottom up.
Transcrição da apresentação:

Análise Sintática Ascendente ­ BottomUp

Bottom Up: (empilha-reduz) Constrói a árvore de derivação de baixo para cima, das folhas para raíz; - Produz uma derivação mais à direita para uma cadeia de entrada; Processo de redução de uma string X para o símbolo inicial da gramática; Em cada passo da redução, uma substring é associada com o corpo de uma produção e obtém-se a parte principal dessa produção; Decisões chave: quando reduzir e quais produções utilizar; - Por definição, redução é o inverso da derivação. Obs: bottom up parsing constrói uma derivação em modo reverso.

Operações lícitas: – empilha (shift): coloca no topo da pilha o símbolo que está sendo lido e avança o cabeçote de leitura na string; – reduz (reduce): substitui o handle no topo da pilha pelo não terminal correspondente; – aceita: reconhece que a sentença foi gerada pela gramática; – erro: ocorrendo erro de sintaxe, chama uma subrotina de atendimento a erros;

Poda do Handle Handle é uma subcadeia que “casa” com o corpo de uma produção e cuja redução representa um passo da derivação mais à direita ao inverso; -Uma derivação mais à direita em ordem reversa pode ser obtida pela “poda do handle” 1. Iniciar com uma string de terminais “w”. Se “w” é uma sentença da gramática dada, então w=yn onde “yn” é a n-ésima forma sentencial mais à direita de alguma derivação mais à direita desconhecida; 2. Para reconstruir a derivação, localizar handle Bn em “yn” e substituir Bn pelo lado esquerdo da produção An -> Bn para obter a forma sentencial anterior yn-1; 3. Repetimos esse processo até alcançar o símbolo inicial da gramática. Caso contrário, uma mensagem de erro deve ser gerada.

Analisadores shift-reduce Forma de análise ascendente onde uma pilha contém símbolos da gramática e um buffer de entrada contém o restante da cadeia a ser reconhecida sintaticamente; Usa-se o símbolo “$” para marcar o fim da pilha e o último caracter da entrada; Durante o parsing (da esquerda para direita), o analisador desloca (shift) zero ou mais símbolos de entrada na pilha, até que está pronto para reduzir (reduce) uma string B (no topo da pilha) para a “cabeça” da produção apropriada; - O analisador sintático repete esse ciclo até encontrar um erro (nenhuma produção é encontrada) ou até que a pilha contém o símbolo de início e a entrada está vazia; Exemplos de algoritmos para o parsing Shift-Reduce (empilha-reduz): – LR(0) – SLR(1) – LR(1) – LALR(1)

Ações em Parsing Empilha-Reduz

Exemplo 1: Passo 1: “A” recebe “c” Passo 2: “B” recebe “ca” Passo 4: “B” recebe “cbB” Solução: S  AB - conflito reduce/reduce

Passo 4: “aABe” recebe “S” Passo 2: “Abc” recebe “A” Exemplo 2: Passo 3: “d” recebe “B” Passo 4: “aABe” recebe “S” Passo 2: “Abc” recebe “A” Passo 1: “b” recebe “A” handle = seqüência de símbolos do lado direito da produção, tais que suas reduções levam, no final, ao símbolo inicial da gramática Redução = substituição do lado direito de uma produção pelo não terminal correspondente (lado esquerdo)

Conflitos durante execução do analisador shiftreduce: - Quando o analisador não consegue decidir se deve realizar um shift ou um reduce, temos um conflito shift/reduce; - Quando o analisador não consegue determinar qual redução fazer, temos um conflito reduce/reduce;

Referências: 1. http://www.gpec.ucdb.br/ricrs/Courses/CompilerI/Lectures/Lec06.pdf 2. http://www.inf.ufrgs.br/~nmaillard/pdf/Compiladores08-LR0.pdf 3. http://gersonc.anahy.org/repcomp/Compiladores08-Bottom-up.pdf 4. http://osorio.wait4.org/oldsite/compil/aula-botton-up-parsing.pdf