Gramáticas livres de contexto
Construir e provar gramáticas, derivações, árvores sintáticas, ambiguidade e precedência.
CFG e derivações
Uma gramática livre de contexto é : são as variáveis, os terminais disjuntos de , as produções e o símbolo inicial. Cada produção tem a forma , com uma única variável à esquerda.
- Um passo escreve-se e indica zero ou mais passos. A linguagem contém só palavras terminais deriváveis de : .
- Para provar , mostra que as regras não geram palavras fora de e que geram todas as palavras pretendidas.
Construções
| Linguagem, com | Gramática |
|---|---|
| com | ; |
| Palíndromos binários |
Para palavras com o mesmo número de e de em qualquer ordem, a lição usa . A regra junta dois blocos equilibrados, e envolvem um bloco equilibrado e as bases , e garantem palavras terminais. Sem essas bases, só com , e , nenhuma palavra terminal seria gerada. A prova completa por indução na árvore e no comprimento está na lição.
Ambiguidade e precedência
- Uma gramática é ambígua quando alguma palavra tem duas árvores sintáticas distintas, ou seja, duas derivações mais à esquerda distintas. As ordens esquerda e direita da mesma árvore não contam como ambiguidade.
- : como ou .
- Precedência de e associatividade à esquerda:
Aceitar as mesmas palavras não implica dar as mesmas árvores.
Palavra aceite.
Derivação mais à esquerda
A derivação continua. Mostramos apenas as primeiras 500 aplicações de regras; a aceitação foi verificada até ao fim.
Testes
Passar estes casos não prova que a gramática gera toda e só a linguagem pedida.
Solução do exercício
Sintaxe
Uma produção por linha, com -> ou →. Separa alternativas com | e usa ε para a palavra vazia. A primeira variável é a inicial.
As variáveis começam por maiúscula e precisam de uma produção. Os outros caracteres são terminais; usa aspas, como "A", para um terminal maiúsculo. Os espaços entre símbolos são ignorados.
A palavra em branco representa ε. O editor aceita recursão à esquerda e mostra uma árvore possível, sem decidir se a gramática é ambígua.
Hierarquia
| Tipo | Restrição nas produções , com pelo menos uma variável em |
|---|---|
| 3, regular | Todas lineares à direita ou todas à esquerda |
| 2, livre de contexto | Uma única variável à esquerda |
| 1, sensível ao contexto | , isto é, as regras não diminuem o comprimento |
| 0, sem restrições | Qualquer com variável em |
Se a linguagem contém , o tipo 1 admite a exceção , desde que o símbolo inicial não apareça em nenhum lado direito. Esta é a convenção usada na lição para regras que não diminuem o comprimento.
Classifica as regras dadas, não a menor classe da linguagem: a gramática é de tipo 2, mas gera , que é regular. De um DFA, cria uma variável por estado, uma produção por transição e por cada estado final , com inicial .