Aula 11: Análise Sintática Ascendente (LR)
Objetivos
- Entender o paradigma Bottom-Up (Shift-Reduce).
- A mecânica da pilha de parsing.
Conteúdo
A análise Bottom-Up (Ascendente) é mais poderosa que a Top-Down. Ela constrói a árvore das Folhas para a Raiz. Em vez de “expandir” regras, ela tenta “reduzir” (encolher) a entrada até chegar ao símbolo inicial \(S\).
Mecânica Shift-Reduce
O parser possui uma Pilha e um Buffer de Entrada. Existem quatro ações possíveis:
- Shift: Move o token atual da entrada para o topo da pilha.
- Reduce: Reconhece que os \(N\) símbolos no topo da pilha formam o lado direito de uma produção \(A \to \beta\). Remove \(\beta\) da pilha e empilha \(A\).
- O “Handle” é a substring na pilha que combina com a produção e deve ser reduzida.
- Accept: Quando a pilha tem apenas
$S$e a entrada acabou. Sucesso! - Error: Nenhuma ação válida é possível.
Exemplo Visual
Entrada: id + id 1. Pilha: [] Entrada: id + id \(\to\) Shift 2. Pilha: [id] Entrada: + id \(\to\) Reduce (\(F \to id\)) 3. Pilha: [F] \(\to\) Reduce (\(T \to F\)) 4. Pilha: [T] \(\to\) Reduce (\(E \to T\)) 5. Pilha: [E] Entrada: + id \(\to\) Shift …
Parsers Bottom-Up lidam nativamente com recursão à esquerda sem problemas.
Referências
- Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, Techniques, and Tools.
- Cooper, K., & Torczon, L. (2011). Engineering a Compiler.