uponha que você está construindo um analisador sintático descendente LL(1) para uma linguagem de programação. Quando ocorre um conflito de parsing na tabela LL(1), qual ação é tomada?
Questão
uponha que você está construindo um analisador sintático descendente LL(1) para uma linguagem de programação. Quando ocorre um conflito de parsing na tabela LL(1), qual ação é tomada?
Alternativas
a) O analisador consulta a tabela de precedência de operadores para resolver o conflito.
b) O analisador escolhe aleatoriamente uma das produções em conflito.
c) O analisador entra em um estado de erro e para a análise.
d) O analisador utiliza uma regra de desempate baseada na ordem de aparição das produções na gramática.
e) O analisador entra em um estado de aceitação e conclui a análise.
Explicação
Em um analisador sintático LL(1), a tabela de parsing deve ter no máximo uma produção para cada par (Não-terminal, Terminal de lookahead).
- Um conflito na tabela LL(1) acontece quando, para a mesma célula, existem duas (ou mais) produções possíveis. Isso significa que a gramática não é LL(1) (há ambiguidade para decisão com apenas 1 símbolo de lookahead ou falta de fatoração/eliminação de recursão à esquerda).
- Um analisador LL(1) determinístico não tem como “escolher” corretamente entre alternativas conflitantes; portanto, ao detectar essa situação (na construção da tabela ou durante a consulta), a ação padrão é tratar como erro (não há regra de precedência, nem sorteio, nem desempate por ordem como parte do método LL(1) clássico).
Logo, diante de um conflito, o analisador entra em erro (a análise falha).
Alternativa correta: (c).