"Se uma gramática produz pelo menos 2 árvores de análise sintática distintas ou derivações, então a gramática é ambígua." Outra regra: todo CFG (sem símbolos inúteis) com recursividade à esquerda e recursividade à direita para o mesmo não-terminal também é ambíguo.
Como você sabe se uma gramática é ambígua?
Uma gramática é considerada ambígua se existe mais de uma derivação mais à esquerda ou mais de uma derivação mais à direita ou mais de uma árvore de análise sintática para a string de entrada fornecida. Se a gramática não é ambígua, então ela é chamada de não ambígua. Se a gramática tiver ambiguidade, então não é boa para construção de compiladores.
O que é uma gramática ambígua, por exemplo?
Em ciência da computação, uma gramática ambígua é uma gramática livre de contexto para a qual existe uma string que pode ter mais de uma derivação mais à esquerda ou árvore de análise, enquanto uma gramática não ambígua é uma gramática livre de contexto para a qual cada string válida tem uma derivação única à esquerda ou árvore de análise sintática.
Como você prova que uma gramática livre de contexto é ambígua?
3 respostas
- Todas as CFG sem símbolos inúteis e com recursão à esquerda e à direita para o mesmo símbolo, são ambíguas. Em geral: …
- Para testar a ambiguidade, você deve encontrar 2 derivações mais à esquerda para a mesma string (ou 2 derivações mais à direita ou 2 árvores de derivação).
Como você resolve gramática ambígua?
Métodos para remover ambiguidade-
- Ao corrigir a gramática.
- Adicionando regras de agrupamento.
- Usando semântica e escolhendo a análise que faz mais sentido.
- Adicionando as regras de precedência ou outras regras de análise sensíveis ao contexto.