Eu acho que a pergunta contém uma suposição que é apenas limítrofe correta, na melhor das hipóteses.
Na vida real, é bastante comum simplesmente viver com gramáticas ambíguas, desde que não sejam (por assim dizer) muito ambíguas.
Por exemplo, se você olhar as gramáticas compiladas com o yacc (ou similar, como bison ou byacc), verá que alguns produzem avisos sobre "conflitos de turno / redução de N" ao compilá-los. Quando o yacc encontra um conflito de mudança / redução, isso indica uma ambiguidade na gramática.
Um conflito de mudança / redução, no entanto, geralmente é um problema bastante menor. O gerador do analisador resolverá o conflito em favor da "mudança" e não da redução. A gramática é perfeita se é isso que você deseja (e parece funcionar perfeitamente na prática).
Um conflito de troca / redução geralmente surge em um caso nesta ordem geral (usando maiúsculas para não terminais e minúsculas para terminais):
A -> B | c
B -> a | c
Quando encontramos a c
, há uma ambiguidade: devemos analisar o c
diretamente como um A
ou devemos analisá-lo como um B
, que por sua vez é um A
? Em um caso como esse, o yacc escolhe uma rota mais simples / mais curta e analisa a rota c
diretamente como uma A
, em vez de seguir a rota c
-> B
-> A
. Isso pode estar errado, mas, se houver, provavelmente significa que você tem um erro muito simples em sua gramática e não deve permitir a c
opção como uma possibilidade A
.
Agora, por outro lado, poderíamos ter algo mais parecido com isto:
A -> B | C
B -> a | c
C -> b | c
Agora, quando encontramos um c
, temos um conflito entre tratar o c
como a B
ou a C
. Há muito menos chances de uma estratégia automática de resolução de conflitos escolher o que realmente queremos. Nenhuma delas é uma "mudança" - ambas são "reduções"; portanto, é um "conflito de redução / redução" (que aqueles que estão acostumados a yacc e geralmente reconhecem como um problema muito maior do que um conflito de mudança / redução).
Portanto, embora eu não tenha certeza se chegaria ao ponto de dizer que alguém realmente aceita a ambiguidade em sua gramática, em pelo menos alguns casos é menor o suficiente para que ninguém realmente se importe muito com isso. Em resumo, eles podem gostar da idéia de remover toda ambiguidade - mas não o suficiente para sempre fazê-lo. Por exemplo, uma gramática pequena e simples que contém uma ambiguidade menor pode ser preferível a uma gramática maior e mais complexa que elimina a ambiguidade (especialmente quando você entra no campo prático de realmente gerar um analisador da gramática e descobrir que o inequívoco a gramática produz um analisador que não será executado na máquina de destino).