Análise Ascendente
A análise sintática ascendente, também conhecida como bottom-up parsing, é um método para construir uma árvore de derivação para uma cadeia de entrada, começando pelos terminais da cadeia de entrada (folhas) e subindo em direção ao símbolo inicial da gramática (raiz).
Como funciona
Vamos considerar uma gramática de expressões aritméticas simples:
Gramática:
Cadeia de entrada: id * id + id
O processo, de forma geral, funciona assim:
-
O analisador lê
idda entrada. Ele reconhece queidpode ser derivado deF(pela regra). Então, ele reduz idparaF. A cadeia se tornaF * id + id. -
Agora, ele vê
F. Ele sabe queFpode ser reduzido paraT(pela regra). A cadeia vira T * id + id. -
O analisador continua e lê o
*e o próximoid. Ele reduz esse segundoidparaF, resultando emT * F + id. -
Neste ponto, ele reconhece o padrão
T * Fna cadeia. Este padrão corresponde ao lado direito da produção. Ele então reduz T * FparaT. A cadeia se tornaT + id. -
Ele sabe que
Tpode serE(). A cadeia vira E + id. -
Ele processa o
+e o últimoid, que é reduzido paraF, depois paraT. A cadeia ficaE + T. -
Finalmente, ele reconhece
E + T, que corresponde à produção. Ele reduz para E.
Como a cadeia foi completamente reduzida ao símbolo inicial E, a análise é aceita.
Note
O mecanismo mais comum para implementar esse processo é o analisador shift-reduce. Como o nome sugere, ele realiza duas ações fundamentais (shift e reduce) e utiliza uma estrutura de pilha para armazenar os símbolos da gramática (terminais e não-terminais) que já foram processados.
A base do funcionamento desse analisador é a redução.