análise sintática ascendente bottomup

11
Análise Sintática Ascendente BottomUp

Upload: kylee

Post on 06-Jan-2016

74 views

Category:

Documents


0 download

DESCRIPTION

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; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Análise Sintática Ascendente  BottomUp

Análise Sintática Ascendente BottomUp

Page 2: Análise Sintática Ascendente  BottomUp

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

Bottom Up: (empilha-reduz)

Page 3: Análise Sintática Ascendente  BottomUp

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;

Page 4: Análise Sintática Ascendente  BottomUp

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

Poda do Handle

Page 5: Análise Sintática Ascendente  BottomUp

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

Analisadores shift-reduce

Exemplos de algoritmos para o parsing Shift-Reduce (empilha-reduz):

– LR(0)– SLR(1)– LR(1)– LALR(1)

Page 6: Análise Sintática Ascendente  BottomUp

Ações em Parsing Empilha-Reduz

Page 7: Análise Sintática Ascendente  BottomUp
Page 8: Análise Sintática Ascendente  BottomUp

Exemplo 1:

- conflito reduce/reduce

Passo 1: “A” recebe “c”

Passo 2: “B” recebe “ca”

Passo 4: “B” recebe “cbB”

Solução: S AB

Page 9: Análise Sintática Ascendente  BottomUp

Exemplo 2:

Passo 1: “b” recebe “A”Passo 2: “Abc” recebe “A”

Redução = substituição do lado direito de uma produção pelo não terminal correspondente (lado esquerdo)

Passo 3: “d” recebe “B”Passo 4: “aABe” recebe “S”

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

Page 10: Análise Sintática Ascendente  BottomUp

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;

Page 11: Análise Sintática Ascendente  BottomUp

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