Escolar Documentos
Profissional Documentos
Cultura Documentos
Instituto de Informática
Universidade Federal de Goiás
26 de maio de 2010
Análise Descendente
Definição (Top-Down)
A análise sintática descendente consiste na construção ou na
simulação da construção de uma árvore gramátical para uma dada
cadeia de entrada, iniciando pela raiz da árvore que corresponde ao
símbolo inicial, até obter as folhas da árvore que correspondem aos
tokens encontrados na entrada.
Gramáticas LL(k)
Gramáticas LL(k) permitem o desenvolvimento direto de um
analisador sintático preditivo. O primeiro L significa que a
análise é feita varrendo-se a entrada da esquerda para direita.
O segundo L indica que uma derivação mais a esquerda é
simulada em cada passo e o k indica o número máximo de
próximos tokens na entrada que podem ser considerados para
decidir a expansão em cada passo.
Gramáticas LL(1)
Exemplo
Dada a gramática:
E → T E0
E 0 → +T E 0
E0 → ε
T → FT0
T 0 → ∗F T 0
T0 → ε
F → (E)
F → id
Análise Descendente
Tabela Sintática
Tabela sintática correspondente à gramática do exemplo do
anterior
Análise Descendente
Análise Descendente
Análise Descendente
Conjunto Primeiro
O conjunto primeiro de um símbolo X é utilizado para se saber
todos os terminais a que iniciam cadeias de terminais derivadas
∗
de X. Se X ⇒ ε, então ε está também em primeiro(X).
Análise descendente
Conjunto Seguinte
O cojunto seguinte de um não-terminal A é formado pelo
conjunto de terminais a que aparecem à direita de A em
alguma forma sentencial derivada pela gramática, isto é, se
∗
existir αAaβ, tal que S ⇒ αAaβ para algum α e β. O
conjunto seguinte de A é util para indicar quando a produção
A → ε (se exisitir) deve ser usada.
Análise descendente
Análise descendente
Análise descendente
Análise descendente
EE+T
A1A1+A3
ET
A1A3
TT*F
A3A3*A2
TF
A3A2
F(E)
A2(A1)
Fid
A2id
Eliminando
a
recursividade
direta
de
A3
Eliminando
a
A1A3
Z
recursividade
Z+A3
Z|ε
direta
de
A3
A3idY|(A1)Y
Y*A2|ε
A2(A1)
A2id
Análise descendente
Fatoração à Esquerda
Gramáticas que possuem não-terminais A que levam a lados
direitos distintos mas com o mesmo prefixo: A → αγ|αβ, não
são apropriadas para analisadores preditivos porque o
analisador tem que decidir entre quais produções escolher.
Produções do tipo acima podem ser substituidas por produções
do tipo: A → αZ e Z → γ|β (fatoração à esquerda).