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

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

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

1 Análise Sintática Ascendente ­ BottomUp

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

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

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

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

6 Ações em Parsing Empilha-Reduz

7

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

9 Exemplo 2: Passo 1: b recebe APasso 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 BPasso 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

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

11 Referências:


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google