Análise Sintática Bottom-Up e Analisadores LR

Classificado em Computação

Escrito em em português com um tamanho de 2,83 KB

Análise Sintática Bottom-Up (Ascendente)

Constrói a árvore a partir dos tokens do texto até o símbolo inicial da gramática (redução).

A sentença é reduzida ao símbolo inicial da gramática, o que equivale a fazer uma derivação mais à direita invertida.

Redução na Análise Sintática

  • Em cada passo da redução, uma subcadeia específica, que corresponde ao lado direito de uma produção, é substituída pelo não-terminal na cabeça da produção.
  • As principais decisões relacionadas com a análise ascendente em cada passo do reconhecimento são:
    • Determinar quando reduzir;
    • Determinar a produção a ser aplicada para que a análise prossiga.

Handle (Alça)

É uma subcadeia que reconhece o lado direito de uma produção e cuja redução ao não-terminal do lado esquerdo representa um passo ao longo do percurso de uma derivação mais à direita.

Tipos de Analisadores Sintáticos Bottom-Up

Analisadores Shift-Reduce

Substituem o lado direito da produção (corpo) pelo não-terminal correspondente (cabeça).

  • Implementação: Utilizam autômatos de pilha.
  • Processo: Empilham a sentença de entrada até que se tenha na pilha o lado direito de alguma produção.

Família de Analisadores LR

  • SLR (Simple LR): Fáceis de implementar, porém aplicáveis a uma classe restrita de gramáticas.
  • LR Canônicos: Possuem poder e custo intermediários, funcionando para a maioria das gramáticas de linguagens de programação.
  • LALR (Lookahead LR): Mais poderosos e mais caros, aplicáveis a um grande número de linguagens livres de contexto.

Vantagens dos Analisadores LR

  • Reconhecem praticamente todas as construções sintáticas definidas pelas GLC (Gramáticas Livres de Contexto).
  • Evitam retrocesso.
  • A classe de gramáticas que podem ser reconhecidas pelos analisadores LR é um superconjunto da própria classe gramatical.

Desvantagens dos Analisadores LR

  • Difíceis de implementar manualmente.
  • Exigem o uso de ferramentas especializadas (ex: Yacc).

Funcionamento dos Analisadores LR

  • Consistem em: uma entrada, uma saída, uma pilha, um algoritmo de análise sintática e uma tabela sintática que possui duas partes (ação e desvio).
  • O algoritmo é o mesmo para todos os tipos de analisadores LR; o que varia é a tabela.
  • O algoritmo de análise lê caracteres de um buffer de entrada, e um analisador LR transfere um estado.
  • Cada estado resume a informação contida na pilha abaixo dele.
  • A pilha contém uma sequência de estados s0, s1, ..., sm.

Entradas relacionadas: