Gramáticas livres de contexto
Construir e provar gramáticas, derivações, árvores sintáticas, ambiguidade e precedência.
A regra acrescenta um à esquerda e um à direita, deixando no meio para repetir a operação. Com uma regra de paragem , obtemos , e blocos maiores com as mesmas contagens.
Uma gramática livre de contexto, CFG, usa regras para substituir variáveis como por sequências. Os terminais, aqui e , ficam na palavra final. A substituição de não depende dos símbolos à sua volta.
Definição e derivações
Uma gramática livre de contexto, CFG, é , onde é um conjunto finito de variáveis, é o alfabeto de terminais, , é o conjunto finito de produções e é a variável inicial.
Cada produção tem forma , com uma única variável à esquerda e à direita. A palavra vazia pode aparecer à direita. Chama-se livre de contexto porque podes substituir por independentemente dos símbolos à sua volta.
Escreve para um passo de derivação e para zero ou mais passos. Uma forma sentencial é uma sequência derivável de , que ainda pode conter variáveis e terminais. A linguagem contém só resultados inteiramente terminais:
Na gramática :
ainda não é uma palavra da linguagem, porque contém . Se queres excluir , podes usar .
Para uma apresentação em vídeo de linguagens e gramáticas livres de contexto, tens Rodrigo Dias:
Construir uma gramática e provar a linguagem
Para , a produção recursiva deve acrescentar um e dois :
Provar exige duas inclusões.
A gramática não gera palavras extra. Faz indução no número de aplicações da produção recursiva. Sem aplicações, produz . Se o meio gera , então gera , mantendo a ordem e a proporção.
A gramática gera todas as palavras pretendidas. Para qualquer , aplica exatamente vezes, obtendo , e termina com .
Separar blocos e desigualdades
Para , usa
As primeiras aplicações emparelham um com um . Depois, acrescenta letras . Assim, . Para exigir , troca a base de por : .
Para palíndromos binários de qualquer comprimento, uma gramática é . As bases geram o centro de palavras ímpares; gera as pares. Omitir essas bases muda a linguagem.
Igualdade de contagens em qualquer ordem
Para palavras sobre com o mesmo número de e de , usa
A regra junta dois blocos equilibrados. As regras e envolvem um par equilibrado à volta de outro bloco equilibrado. As bases cobrem os pares de comprimento 2 e a palavra vazia.
Para provar que só gera palavras equilibradas, faz indução na árvore de derivação. A base vazia está equilibrada; envolver uma palavra equilibrada acrescenta um símbolo de cada tipo, e soma duas diferenças nulas.
Para a outra inclusão, usa indução no comprimento de equilibrada não vazia:
- Se começa e termina em símbolos diferentes, escreve ou com equilibrada e aplica ou .
- Se começa e termina no mesmo símbolo, a diferença entre contagens vale ou depois da primeira letra e tem o sinal oposto antes da última. Como varia uma unidade por letra, anula-se numa posição interior e parte-se em dois blocos equilibrados não vazios; aplica-se .
Para :
Desigualdade com três blocos
Para , gera primeiro os , depois os , e emparelha cada com um ou anterior, sem misturar a ordem dos blocos. Uma gramática:
Cada acrescenta um à esquerda e um à direita, enquanto cada acrescenta um sem . Depois de chegar a , cada acrescenta um e um , e cada acrescenta um sem .
Antes de mudar para , a forma sentencial é ; depois é , e ao eliminar fica . Se então , e se então .
Logo a palavra final é com . Isto prova que só gera palavras com .
Para a outra inclusão, seja . Escolhe quantos emparelhar com e quantos com :
- pares e pares . Então e .
- Gera letras com , depois pares com , depois letras com , depois pares com .
Para temos , , , logo e . Uma derivação:
Os dois primeiros passos geram o excedente e o par . Os três passos seguintes geram os três sem . O último passo aplica . Testa com e com ; tem e nenhum par cumpre as desigualdades, por isso não é gerada.
Derivação à esquerda e à direita
Na derivação mais à esquerda, substitui sempre a variável mais à esquerda. Na derivação mais à direita, escolhe sempre a mais à direita. Nenhuma regra de produção muda, apenas a ordem de expansão.
Para , , , a palavra tem derivação mais à esquerda:
e mais à direita:
Estas duas ordens não demonstram ambiguidade. Ambas descrevem a mesma estrutura: gera e gera .
Árvores sintáticas e ambiguidade
Numa árvore sintática, a raiz é . Um nó com filhos usa a produção . As folhas lidas da esquerda para a direita dão a palavra; uma folha não acrescenta símbolo.
Uma gramática é ambígua se alguma palavra terminal tem duas árvores sintáticas distintas. Equivalentemente, essa palavra tem duas derivações mais à esquerda distintas, ou duas mais à direita distintas.
A gramática é ambígua. A palavra pode separar-se na raiz pelo ou pelo :
Na primeira árvore, a raiz soma com ; na segunda, multiplica por . As duas derivações mais à esquerda começam por regras diferentes:
Uma testemunha basta para provar ambiguidade. Para provar ausência de ambiguidade, precisas de um argumento para todas as palavras, não de falhar na procura de uma testemunha.
Precedência e associatividade
Para dar maior precedência a e associar os operadores à esquerda, separa níveis:
é um fator, um átomo ou uma expressão entre parênteses. junta fatores por multiplicação. junta termos por soma. Agora, o só surge no nível que pode separar somas, enquanto o produto fica dentro de .
A recursão em fica à esquerda, logo agrupa-se como . Com , agrupar-se-ia à direita. Os parênteses em permitem alterar a precedência.
Compara as duas gramáticas do laboratório para . A primeira expande a soma no ramo esquerdo, representando ; a segunda expande-a no ramo direito, representando . Para , ambas mantêm o produto dentro de . Os testes de aceitação não distinguem estas estruturas, porque as duas gramáticas aceitam as mesmas expressões. Observa a árvore, além da resposta de aceitação.
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.
O laboratório mostra uma árvore possível para a palavra. Essa árvore permite seguir as produções usadas; uma única árvore não prova que nenhuma outra existe.
Ambiguidade é uma propriedade da gramática. Uma gramática ambígua pode ter outra gramática não ambígua para a mesma linguagem. Algumas linguagens livres de contexto são inerentemente ambíguas, ou seja, todas as suas gramáticas são ambíguas. Não existe um algoritmo geral que decida a ambiguidade de qualquer CFG.
Classificar gramáticas
A hierarquia de Chomsky compara restrições sobre as produções. representam variáveis, um terminal, sequências de variáveis e terminais.
| Tipo | Restrição nas regras | Modelo para a linguagem |
|---|---|---|
| 3, regular | Todas lineares à direita, ou , ou todas à esquerda, ou , com . | Autómato finito |
| 2, livre de contexto | : uma única variável à esquerda. | PDA não determinístico |
| 1, sensível ao contexto | , com uma variável em e . | Máquina de Turing com fita limitada pelo comprimento da entrada |
| 0, sem restrições | , com pelo menos uma variável em . | Máquina de Turing reconhecedora |
No tipo 3, podes decompor blocos de terminais com variáveis auxiliares até obter regras , e na versão à direita. As regras unitárias , possíveis quando , podem ser eliminadas.
Para o tipo 1, esta é a convenção de regras que não diminuem o comprimento. Se for preciso gerar , admite-se a exceção , desde que não apareça em nenhum lado direito. No tipo 3, misturar regras lineares à esquerda com regras lineares à direita não prova regularidade.
Para classificar uma gramática, procura a classe mais restrita que todas as suas regras respeitam. Por exemplo, é de tipo 2: o lado esquerdo é uma variável, mas a variável do lado direito fica entre dois terminais, impedindo tipo 3.
Classificar a gramática não determina a menor classe da sua linguagem. não é linear, mas gera , uma linguagem regular descrita por . As regras dadas são de tipo 2; outra gramática regular pode gerar a mesma linguagem.
De DFA para gramática
Toda a linguagem regular é livre de contexto. Para ver a construção, cria uma variável por estado de um DFA. Para cada , acrescenta . Para cada final , acrescenta . A variável inicial é a do estado inicial.
Uma derivação acompanha um percurso da máquina, escrevendo a letra de cada transição. Só pode terminar quando chega a um final, por isso gera exatamente a linguagem do DFA.
A inclusão é estrita: tem CFG, mas não tem DFA, pelo lema da repetição regular. As formas normais reorganizam CFG para facilitar algoritmos, sem aumentar o seu poder.
Exercícios
A questão das bases dos palíndromos adapta a questão 4 do teste de 13/6/2024, com símbolos binários e pedidos de prova e construção. A desigualdade e a igualdade de contagens adaptam os tipos de problemas da folha prática 7. Os exemplos de ambiguidade e classificação usam dados próprios.
Bases dos palíndromos
Considera . Descreve a linguagem e prova ambas as inclusões. Deriva e explica por que não é gerada. Como alterarias só as bases para gerar todos os palíndromos binários?
Pista
Cada passo recursivo acrescenta duas letras.
Solução
As bases têm comprimento um e são palíndromos. Cada regra recursiva acrescenta dois símbolos iguais nos extremos, conservando simetria e comprimento ímpar. Inversamente, retirar os extremos de um palíndromo ímpar deixa um palíndromo ímpar mais curto, até ao centro ou ; esta decomposição permite escolher as regras da derivação.
. A palavra é um palíndromo par, logo não é gerada. Acrescentar conserva as palavras ímpares e permite parar sem centro, gerando as pares, incluindo a vazia.
Confere a tua resposta:
- Provei simetria e paridade das palavras geradas.
- Provei que qualquer palíndromo ímpar pode reduzir-se a uma base.
- Dei a derivação e acrescentei a base vazia para as pares.
Ordens de derivação e ambiguidade
Para , , , compara com . Provam ambiguidade? Depois, para , prova ambiguidade de com duas derivações mais à esquerda e identifica o operador na raiz de cada árvore.
Pista
Compara a primeira produção usada em cada derivação de E.
Solução
As duas derivações de expandem ramos independentes da mesma árvore. Uma é mais à esquerda, a outra mais à direita. Não provam ambiguidade.
Na gramática de expressões, há duas derivações mais à esquerda:
A primeira árvore usa soma na raiz, lendo ; a segunda usa produto, lendo . A palavra terminal é a mesma e as árvores diferem, pelo que a gramática é ambígua.
Confere a tua resposta:
- Distingui a ordem das expansões da estrutura da árvore.
- Dei duas derivações com a mesma convenção mais à esquerda.
- Identifiquei soma e produto nas raízes.
A gramática editável seguinte tem um erro na base. Os casos incluem a fronteira , palavras com excedente e palavras fora da ordem . Corrige-a e usa o exercício para justificar a construção. Passar os testes apenas confirma esses casos, não substitui as duas inclusões da prova.
A gramática inicial permite n = m. Altera apenas a base de A para gerar aⁿbᵐ com n > m ≥ 0. Mantém a produção recursiva de S.
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.
Construir uma desigualdade
Constrói uma CFG para e mostra uma derivação de aaab.
Pista
Separa m pares e o excesso n−m de a.
Mais uma pista
Uma possibilidade é e .
Solução
Uma CFG possível é , . Assim, . Cada aplicação recursiva em S acrescenta um par; A produz um número positivo de a. Para quaisquer n>m, usa m pares e n−m letras em A. Não surgem b antes de a, e o excesso é sempre positivo.
Confere a tua resposta:
- Usa uma recursão que emparelha a e b.
- Garante pelo menos um a extra na base.
- Prova que toda a palavra pretendida pode escolher o número certo de pares e de a extra.
Erros frequentes
Não uses A→ε, que permitiria igualdade. Não proves apenas que as palavras geradas têm a propriedade, esquecendo a outra inclusão.
Gramática e linguagem
Classifica as gramáticas e pela forma das suas regras. Descreve as duas linguagens e explica se essa classificação prova que alguma delas não é regular.
Pista
Começa pela regra menos restrita de cada gramática.
Mais uma pista
tem duas variáveis. Ainda assim, todas as folhas terminais de são .
Solução
é de tipo 3 e gera : aplica um número qualquer de vezes e termina em .
é de tipo 2, pois tem uma variável à esquerda, mas a regra impede tipo 3. Gera : qualquer resultado terminal tem pelo menos um ; para gerar , cria ocorrências de com expansões e substitui cada uma por . As duas linguagens são regulares. O facto de as regras de não serem regulares não prova não regularidade da linguagem.
Confere a tua resposta:
- G1 é linear à direita; G2 não é linear.
- Descreve a estrela de a seguida de b e as palavras não vazias só de a.
- Distingue a restrição nas regras da classe mínima da linguagem.
Erros frequentes
Não decidas o tipo usando uma só regra. Não confundas dois símbolos à direita com uma produção de tipo 1: a variável única à esquerda já permite tipo 2.
Igualdade em qualquer ordem
Mostra que gera palavras com tantos como .
Pista
Faz as duas inclusões por indução no comprimento.
Mais uma pista
Se os extremos são iguais, acompanha a diferença entre contagens até ao primeiro regresso a zero.
Solução
Por indução na árvore de derivação, cada regra conserva a diferença nula entre as contagens de e , logo só gera palavras equilibradas. Inversamente, uma equilibrada não vazia ou tem extremos diferentes ( com equilibrada) ou tem extremos iguais. Neste segundo caso, a diferença entre contagens vale 1 ou −1 depois da primeira letra e tem o sinal oposto antes da última; como varia uma unidade por letra, regressa a zero numa posição interior. Esse prefixo e o sufixo restante são equilibrados e não vazios. A regra reduz ambos a palavras mais curtas. Para , usa com e .
Confere a tua resposta:
- Mostra que cada regra conserva o equilíbrio entre a e b.
- Decompõe uma palavra equilibrada em blocos ou em extremos diferentes.
- Deriva abba com SS e as bases.
Erros frequentes
Não proves só uma inclusão. Uma propriedade conservada não mostra que todas as palavras são geradas.
