Suponha 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
Suponha 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 escolhe aleatoriamente uma das produções em conflito.
b) O analisador utiliza uma regra de desempate baseada na ordem de aparição das produções na gramática.
c) O analisador consulta a tabela de precedência de operadores para resolver o conflito.
d) O analisador entra em um estado de aceitação e conclui a análise.
e) O analisador entra em um estado de erro e para a análise.
Explicação
Em um analisador sintático LL(1) (descendente preditivo), a tabela de parsing deve ser determinística: para cada par (Não-terminal, token de lookahead) pode existir no máximo uma produção.
Quando ocorre um conflito na tabela LL(1), isso significa que há mais de uma produção possível para a mesma entrada da tabela, logo a gramática não é LL(1) (ou não está fatorada/transformada adequadamente). Um analisador LL(1) padrão não tem mecanismo de desempate (nem “escolha aleatória”, nem “ordem na gramática”, nem “precedência de operadores” — precedência é típica de abordagens como análise LR/precedência, não da tabela LL(1) pura).
Assim, ao tentar consultar a tabela e encontrar uma entrada ambígua/indefinida, o comportamento correto é sinalizar erro (falha de parsing) e interromper/acionar rotina de recuperação de erro, pois não há decisão única válida.
Alternativa correta: (e).