Compiladores. Top-Down x Bottom Up. Plano da aula. Redução exemplo 1. Redução exemplo 1. Lembrando: construir a tabela de análise LL(1) A Abc b B d

Documentos relacionados
Análise Bottom-Up. Compiladores. Parsing LR. Tabela Ações/Transições. Análise LR. Construindo tabelas LR

Analisadores Ascendentes ou Empilha-Reduz. Mais um exemplo... Mais um exemplo... Top-Down x Bottom Up. Conteúdo da aula. Analisadores Ascendentes

Análise sintática. Análise sintática ascendente. Parte-se dos símbolos terminais em direção ao símbolo inicial da gramática. Derivação mais à direita

Análise Sintática (Cap. 04) Análise Sintática Ascendente Analisador Sintático LR

Compiladores - Análise Ascendente

Análise Sintáctica. Definições: Conjuntos First() e Follow() Compiladores, Aula Nº 19 João M. P. Cardoso. Conjunto First(β)

Compiladores - Análise Ascendente

Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto

Análise Sintática Bottom-up

Analisadores Sintáticos LR

Análise sintática. Questão. E se a análise sintática pudesse ser modelada por autômatos?

Análise sintática. Prof. Thiago A. S. Pardo. Análise sintática ascendente

INE5317 Linguagens Formais e Compiladores. AULA 10: Anális e S intática

Construção de Compiladores Aula 18 - Análise Sintática Ascendente

Analisadores Descendentes Tabulares; Cjs First Follow

V Teoria de Parsing. Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada

Plano da aula. Compiladores. Top-Down x Bottom Up. Redução Exemplo 1. Redução Exemplo 1. Redução Exemplo 1. A Abc b B d.

INE5318 Construção de Compiladores. AULA 4: Análise Sintática

Introdução Análise Sintática Descendente Análise Sintática Ascendente. Aula Prática. Fernando Antônio Asevedo Nóbrega

Análise sintática. Análise sintática ascendente. Bottom-up, ascendente ou redutiva. Analisadores de precedência de operadores Analisadores LR

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Compiladores - Análise SLR

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34

Revisão. Fases da dacompilação

Construção de Compiladores Aula 16 - Análise Sintática

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

Linguagens Livres de Contexto

Compiladores - Análise LL(1)

Análise Sintática. Fabiano Baldo

Compiladores - Análise LL(1)

BNF (Backus-Naur Form) Gramática Livres de Contexto / Estruturas Recursivas

Processamento de Linguagens I LESI + LMCC (3 o ano)

Compiladores Aula 4. Celso Olivete Júnior.

LL Parser ( TOP-DOWN)

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Compiladores. Análise Sintática

Problemas decidíveis para LICs

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Compiladores. Parser LL 10/13/2008

Automata e Linguagens Formais

Análise Sintática LL(1)

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

Análise Sintática (Cap. 04) Análise Sintática Descendente

Problemas decidíveis para LICs

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Análise Sintática - Final

Análise Sintática II: Analisadores Descendentes Preditivos

Tokens, Padroes e Lexemas

Capítulo 5 Análise sintática

Vantagens de uma Gramática. Sintaxe de uma Linguagem. Analisador Sintático - Parser. Papel do Analisador Sintático. Tiposde Parsers para Gramáticas

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

Compiladores I. Caracterizar um método de análise bottom-up. Compreender os mecanismos básicos envolvidos no processo de análise LR.

INE5317 Linguagens Formais e Compiladores AULA 9: Propriedades e Reconhecimento das Linguagens Livres do Contexto

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

LINGUAGENS FORMAIS E AUTÔMATOS

Compiladores Aula 6. Celso Olivete Júnior.

LINGUAGENS FORMAIS E AUTÔMATOS. Prova 2-10/06/ Prof. Marcus Ramos

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Linguagens Formais e Autômatos P. Blauth Menezes

IV Gramáticas Livres de Contexto

Aula de 28/10/2013. sticas; Implementação. em Ruby

Análise sintática. Análise sintática. Top-down ou descendente. Com retrocesso: por tentativa e erro. Preditiva: para gramáticas LL(1) 09/04/2012

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados.

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Como construir um compilador utilizando ferramentas Java

Parsing Preditivo. Antes de ser abordado o Parsing Preditivo, será apresentado o Analisador Sintático Descendente Recursivo.

Análise Sintática Introdução

Se o símbolo inicial não fizer parte do conjunto de símbolos férteis, a linguagem gerada pela gramática é vazia.

MAB Análise Sintática. Wednesday, April 4, 12

QUESTÃO 1 (0,6 ponto) Classifique os processadores de linguagens com relação aos tipos das linguagens-fonte e objeto.

Linguagens Formais e Autômatos (LFA)

Curso de Engenharia de Computação - UTFPR Teoria da Computação - Prof. Celso Kaestner Lista de exercícios

MAB Análise Sintática. Wednesday, August 31, 11

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Análise Sintática (Cap. 04) Analisador Sintático LR canônico e LALR

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

Exercícios Associados à Aula 28 (27/11/2013) Feitos em sala e em equipes

Compiladores. Análise Sintática

Construção de Compiladores Aula 17 - Análise Sintática Descendente

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Introdução Definição Conceitos Básicos de Linguagem

Linguagens Livres do Contexto. Adaptado de H. Brandão

Compiladores - JACC. Fabio Mascarenhas

Linguagens de Programação Aula 5

Gramáticas Sensíveis ao Contexto (GSC) Linguagens Sensíveis ao Contexto (LSC) Autômatos Linearmente Limitados (ALL)

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18

Linguagens Livres de Contexto

Linguagens de Programação Aula 4

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

COMPILADORES. Análise semântica. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

Capítulo II Gramáticas

Avaliação de expressões. Prof: Sérgio Souza Costa

Transcrição:

Compiladores Análise sintática ) Análise ascendente Autômatos Empilhar/Reduzir Lembrando: construir a tabela de análise LL) Como fazer? Re-escrever gramática para satisfazer condições de LL) Calcular conjuntos irst e ollow Para cada produção A α. Para cada a irstα) incluir A αem M[A,a]. Se ε irstα) incluir A αem M[A,b] para cada b em ollowa). Se ε irstα) e ollowa) incluir A αto M[A,] odas entradas não definas são erros Plano da aula ransformação de Gramática Análise bottom-up ascendente): princípios gerais Vocabulário Exemplos Analisador com pilha reduz/empilha) Gramática LR abelas LR. op-down x Bottom Up Gramática: S A B A c ε B cbb ca op-down/esquerda S AB cb ccbb ccbca S AB A c B cbb B ca Entrada: ccbca Bottom-Up/Direita ccbca Acbca AcbB AB S A c B ca B cbb S AB Redução exemplo Redução exemplo Redução = substituição do lado direito de uma produção pelo não terminal correspondente lado esquerdo)

Redução exemplo Redução exemplo aade 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 exemplo Redução exemplo aade aade aabe Redução exemplo Redução exemplo aade aabe E E) + S

Redução exemplo Redução exemplo E E) + E + E E) + E + E + E Redução exemplo Redução exemplo E E) + E + E + E E E E) + E + E + E E E E E E) Redução exemplo + E + E + E E E E E Ações bottom-up empilha-reduz) A análise Bottom-Up vai necessitar: De uma pilha para guardar os símbolos De um buffer de entrada para a sentença w a ser reconheca. Operações lícitas: empilha ): coloca no topo da pilha o símbolo que está sendo lo 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

Ações bottom-up: problemas Problema : Como decir qual lado direito de produção trocar pelo lado esquerdo redução)? Ações bottom-up: problemas Problema : Como decir qual lado direito de produção trocar pelo lado esquerdo redução)? Ler entrada da esquerda para direita Em algumas situações uma escolha aparece:. ler mais um caractere da entrada ou Análise. aplicar redução a S abc a ab abc S Entrada abc bc c Ação Ler Ler Ler Redução Aceitar Ações bottom-up: problemas Problema : Como decir qual lado direito de produção trocar pelo lado esquerdo redução)? - conflito reduce/reduce Problema : Como escolher entre ler ou aplicar a redução? Conflito Shift / Reduce Problema : Como guardar o substring que está sendo analisando? Pode ser uma combinação de ou mais símbolos terminais ou não-terminais) Pilha E E E) Pilha E E+ E+ E+E E E E EE E Entrada + + + Ação Reduce E Reduce E Reduce Reduce E Reduce aceita! Ações em Parsing Empilha-Reduz Reduz Se: γα está na pilha A α existe um β tal que S γa β γαβ Então: Pode-se remover o handle α; Reduz-se γβ paraγa na pilha γα é um prefixo viável Ele pode derivar numa seqüência de terminais Shift empilha) Empilhar o terminal, avançar entrada Erro Aceitar Várias soluções para o parsing Bottom-Up O parsing bottom-up é mais poderoso do que o parsing op-down Regras aplicadas em reverso Pode adiar decisões de reduções Pode usar mais de um símbolo na entrada para tomar a decisão. Vários algoritmos para o parsing Shift-Reduce empilha-reduz): LR) Hoje SLR) LR) Próxima aula LALR)

Parser baseado em tabelas Lê a entrada de esquerda para direita L) Cria derivações mais a direita R) Usa um autômato finito com pilha Cada estado representa produções da gramática ransições são feitas a cada terminal/não terminal Pilha s t Parsing LR Parser LR Ação Estruturas de dados: Pilha de estados {s} e símbolos abela de ações: Action[s,t]; t abela de transições: Goto[s,X]; X N Goto Buffer de entrada abela Saída abela Ação/ransição LR) Ação: A partir de um estado s e de um terminal t, Ação[s, t] indica: Se se faz um S empilha) ou um Reduce R reduz) ao ler o símbolo a na entrada. Caso S: indica também o estado a empilhar; azer: empilhar o estado e avançar na leitura. Caso R: indica também a regra a reduzir e, a seguir, aplica uma ransição. azer: depilhar tantos estados como símbolos reduzos; empilhar o estado alvo do Gototopo Pilha, Símbolo reduzo). ransição goto): a partir de um estado s e de um nãoterminal X, Goto[s, X] indica o próximo estado a empilhar. Exemplo de uso de tabela Ação/ransição Gramática usada: S ) abela Ações/ransições Ações ) S Ok! S S R R R R R Goto E abela Ações/ransições Ações erminais Goto Não-erminais abela Ações/ransições Ações erminais Goto Não-erminais Estados S S R R ) S R R Ok! R E Estados S S R R ) S R R Ok! R E Shift e empilha

Estados abela Ações/ransições Ações erminais Goto Não-erminais ) E S Ok! Shift e empilha S S R R R R R Reduce a a regra Productions ) Análise de ) /) Stack Input ) ) ) ) ) Action Shift Shift Reduz, pop, goto [,]= Reduz, pop, goto [,]= Shift S Reduz ), pop, goto [,]= Reduz pop, goto [,]= Análise de ) /) Construindo tabelas LR Stack Input Action Reduz, pop, goto [,]= Shift S Shift Reduz, pop, goto [,]= Reduz pop, goto [,]= Aceitar Para montar as tabelas, precisa-se: Definir os estados, Definir os Gotos/Ações Os estados devem capturar o andamento na análise de quais símbolos podem ser reduzos. Vai-se dever calcular quais conjuntos de símbolos podem ser conserados como handles. Noção de ponto / fechamento. Os gotos e as açoes vão ser definos graças ao cálculo das transições entre os estados. endo analisado que tenho um handle, quais símbolos podem aparecer depois? Sucessor.) Cálculo dos conjuntos de itens canônicos LR A tabela pre-calcula todas as derivações possíveis a partir de um dado ponto de análise Left -> Right da entrada. Parte de noção de configuração ou ítem LR) associado a uma regra ou conjunto de regras) = uma regra da gramática com um ponto em algum lugar à direita. Exemplo: a regra possui quatro ítens: conjunto canônico de ítens O ponto representa até onde foi feita a análise Quer-se calcular os conjuntos canônicos de ítens = todos os ítens alcançáveis a partir de um conjunto de regras da gramática. Cada conjunto será um estado do parser LR Similar à conversão de AND para AD Cálculo dos conjuntos Propriedade de echamento: Se X X i X i+ X n está em um conjunto, e X i+ é um não-terminal que deriva emαi.e.: existe a regra X i+ α), então também entra no conjunto: X i+ α Itera-se essa operação Calcula-se o conjunto como um ponto fixo Ponto inicial: Acrecenta-se um não-terminal S à gramática Adiciona-se uma produção S S Conjunto de ítens Inicial é: fechamentos S)

Exemplo: fechamentos ) SucessorC,X) S ) S ) Estado É o segundo procedimento útil para montar a tabela LR Pega em argumento um conjunto de ítens C e um símbolo X Retorna um conjunto de ítens Informalmente: mover o ponto pelo símbolo X Cálculo do sucessor a partir do estado e ao ler X:. mover ponto para direita em todos os ítens de e onde o ponto precede X Para todas as regras A α X β em C, retorna A αx β. Calcular o fechamento deste conjunto de ítens.. Esse novo estado será sucessore,x) Sucessore, )) =? echamento )) = { Exemplo de Sucessor e = Estado = {S,,,, ) } ),,, ) } S ) Construção dos Conjuntos de Ítens amília de conjuntos de ítens Cada conjunto será um estado do parser proc itemsg ) C = fechamento{s S}); do foreach I C do foreach X N ) do C = C SucessorI, X); while C é modificado; Productions ) : S ) Reduz : : ) ) Reduz Aceitar : S : ) : ) Reduz : : Reduz : ) ) S S : S R R R ) ) S Reduz : : ) ) S R Reduce R ) S S R R R R R A Aceitar : S : ) A : ) Reduz : : Reduz : ) )

Construção abela LR). Construir = {I, I, I n } I é o estado inicial. a) Se {S S } I i então ação[i,] = aceitar b) Se {A α } I i e A!= S então ação[i,_] = reduzir A α c) Se {A α aβ} I i e SucessorI i,a)=i j então ação[i,a] = j. Se SucessorI i,a) == I j então goto[i,a] = j. odas as entradas não definas são erros Observações LR) sempre reduz se {A α } I i, sem lookahead Ítens Shift e Reduce podem estar no mesmo conjunto de configurações Pode haver mais de um ítem reduce por conjunto Problema com A Є LR) é fraco, consere: Sumário S ) = : = Conflito Shift/reduce! : Conflito Reduce/Reduce! A análise bottom-up usa: Handles, para determinar qual cadeia reduzir; abelas LR Goto/ransições) para determinar quais reduções e s efetuar. Usa-se um autômato de estados finitos, com uma pilha, para reconhecer uma sentença. Construído a partir dos itens canônicos echamento + propagação Vimos o LR) que é limitado. Como melhorar o algoritmo?