O esquema acima (adaptado da Wikipedia) mostra os principais componentes:
- Um buffer de entrada, onde são armazenados o terminal sendo tratado e os terminais seguintes de look ahead. Um terminal especial representa o final da entrada.
- Uma pilha, onde são colocados os estado atual (no topo) e os estados anteriores.
- Uma tabela de desvios, usada para determinar qual o próximo estado após o reconhecimento de um não terminal.
- Uma tabela de ações, que determina a ação a ser tomada em função do estado atual e do conteúdo do buffer de entrada.
Existem quatro tipos de ações a serem tratadas:
- Shift: o terminal atual é consumido (removido do buffer de entrada) e um novo estado (definido na ação) é colocado no topo da pilha (passando a ser o estado atual e empurrando para baixo os estados anteriores).
- Reduce: indica o reconhecimento de uma regra. O número da regra é escrito na saída. Para cada símbolo no lado direito da regra um estado é retirado da pilha. O novo estado é definido através da tabela de desvio, conforme o estado que ficou no topo da pilha e o não terminal que foi reconhecido.
- Sucesso: foi completado o reconhecimento do texto.
- Erro: o texto de entrada não obedece às regras da gramática.
Vejamos um exemplo rápido com a gramática
S -> aA
A -> b
A -> aA
A tabela correspondente é:
Acompanhando a análise de aab:
No próximo post da série vamos ver o trabalho pesado: a geração das tabelas a partir das regras da gramática.
Nenhum comentário:
Postar um comentário