03 · Gramáticas Regulares e Hierarquia de Chomsky
Resumo em 30 segundos
Uma gramática é um mecanismo gerador: a partir do símbolo inicial , aplicamos regras de reescrita até sobrar só terminais. O formato das regras classifica a gramática na Hierarquia de Chomsky (tipos 3, 2, 1, 0). As do tipo 3 (regulares, forma ou ) geram exatamente as linguagens que os autômatos finitos reconhecem (aula 07).
Anterior: 02 - Matemática Discreta · Voltar ao mapa · Próxima: 03b - Expressões Regulares
Slide 3: tipos de linguagens
| Tipo | Descrição | Exemplo |
|---|---|---|
| Finita | número finito de sentenças | comandos de um equipamento |
| ”Vazia” | só a sentença vazia | |
| Infinita | número infinito de sentenças (a maioria) |
"Linguagem vazia" tem dois sentidos
O slide chama de vazia a linguagem que tem apenas , ou seja, . Em muitos livros, “linguagem vazia” é (nenhuma palavra). São coisas diferentes: tem uma palavra; tem zero. Use a notação de conjunto para não ter ambiguidade.
Slide 4: formas de representar uma linguagem
- Listar as palavras: só funciona se a linguagem for finita.
- Descrição algébrica: por exemplo , com .
- Algoritmo que reconhece: dada uma palavra, responde se pertence. Exemplo: autômato finito.
- Mecanismo que gera: produz todas as palavras em alguma ordem. Exemplo: gramática.
Provável erro de digitação no slide 4
O exemplo aparece como . Com o conjunto seria vazio, já que não existe repetição negativa. O esperado é ou .
Slides 5 a 7: definição de gramática
Gramática é um dispositivo formal para especificar uma linguagem potencialmente infinita de forma finita.
| Componente | O que é | Convenção usual |
|---|---|---|
| não terminais (metassímbolos, “variáveis”) | letras maiúsculas | |
| terminais (os símbolos que aparecem nas palavras) | minúsculas, dígitos | |
| símbolo inicial, | ||
| produções (regras de reescrita) |
Restrições do slide 7:
- é o vocabulário, e (um símbolo não pode ser terminal e não terminal ao mesmo tempo).
- Cada produção tem contendo pelo menos um não terminal e .
- só pode aparecer do lado direito. A regra se chama regra nula ou regra épsilon.
Slide 8: exemplo, gramática de números inteiros
, , e
Derivação de 036: .
O problema apontado no slide: ela gera zeros à esquerda (00036).
Exercício do slide 8: gramática sem zeros à esquerda
Ideia: o primeiro dígito tem regra diferente dos demais. Ou é o número
0sozinho, ou começa com 1 a 9.
Versão já no formato regular (útil para a aula 07):
Conferi por programa que a versão regular gera exatamente números de 1 a 3 dígitos sem zero à esquerda quando limitada a 3 dígitos.
Derivações
Slides 9 e 10.
- Produção : a regra. Derivação : a aplicação de uma regra.
- Formalmente: se (substitui uma ocorrência de , o contexto fica igual).
- : zero ou mais passos. : um ou mais. : exatamente . É o mesmo / de Matemática Discreta.
| Conceito | Definição | Símbolos |
|---|---|---|
| Sentença | só terminais, derivada de | , |
| Forma sentencial | mistura de terminais e não terminais, derivada de | , |
| Linguagem gerada | todas as sentenças |
(O slide 10 escreve ""; falta o .)
Slide 11: exemplo 0ⁿ1ⁿ
.
Complemento: essa linguagem NÃO é regular
Repare que tem terminais dos dois lados do não terminal. Isso não é do tipo 3. E não é só essa gramática: nenhuma gramática regular gera , porque um autômato finito teria que “lembrar” quantos zeros leu, e ele só tem memória finita. A prova formal usa o Lema do Bombeamento, que os livros trazem (no livro de Ramos: seção 3.9 “Linguagens que não são Regulares”, p. 233).
Slide 12: exercício de derivações
: , , .
Derivação de 0101010
Tamanho 7. Com , o menor possível é , , , :
01+0+10+10=0101010.
Derivação de 101000101010101
Começa com
10, então use (começa com , que gera10...).
Leitura em blocos: (usou e ), , primeiro , segundo . As duas derivações foram encontradas e conferidas por busca automática.
Slide 13: Hierarquia de Chomsky
| Tipo | Nome | Forma das produções | Linguagens | Reconhecedor (complemento) |
|---|---|---|---|---|
| 3 | Regular | ou | Regulares (LR) | Autômato finito |
| 2 | Livre de contexto | , com , | Livres de contexto (LLC) | Autômato com pilha |
| 1 | Sensível ao contexto | com | Sensíveis ao contexto (LSC) | Autômato linearmente limitado |
| 0 | Irrestrita | , , | Recursivamente enumeráveis (LRE) | Máquina de Turing |
A coluna “reconhecedor” não está nos slides; é o resultado clássico da teoria e aparece nos dois livros de referência.
Como classificar uma gramática, na prática:
flowchart TD A{"Todo lado esquerdo é<br/>um único não terminal?"} -- não --> B{"tamanho de α ≤ tamanho de β<br/>em todas as regras?"} B -- sim --> T1[Tipo 1] B -- não --> T0[Tipo 0] A -- sim --> C{"Todo lado direito é<br/>aB ou a (ou tudo linear<br/>para o mesmo lado)?"} C -- sim --> T3[Tipo 3 · Regular] C -- não --> T2[Tipo 2 · Livre de contexto]
A gramática recebe o tipo mais restrito que ela satisfaz.
Slide 14: gramáticas lineares
| Forma | Produções () |
|---|---|
| Linear à direita | ou |
| Linear à esquerda | ou |
| Linear unitária à direita | à direita com |
| Linear unitária à esquerda | à esquerda com |
As quatro são equivalentes e toda gramática regular é linear (e vice-versa).
Não misture os lados
A equivalência vale quando todas as produções são lineares para o mesmo lado. Uma gramática com algumas regras e outras pode gerar linguagens não regulares. Esse detalhe não está no slide, mas é uma pegadinha comum de prova.
Slide 15: hierarquia como conjuntos
Tipo 3 ⊂ Tipo 2 ⊂ Tipo 1 ⊂ Tipo 0.
flowchart TB subgraph T0["Tipo 0 · Irrestritas (LRE)"] subgraph T1["Tipo 1 · Sensíveis ao contexto"] subgraph T2["Tipo 2 · Livres de contexto"] subgraph T3["Tipo 3 · Regulares"] r["a*b*"] end cf["0ⁿ1ⁿ · ww^R"] end cs["aⁿbⁿcⁿ"] end end
Os exemplos dentro de cada nível são clássicos (a capa do livro de Ramos, José Neto e Vega, inclusive, desenha essa hierarquia com exemplos parecidos).
Slide 16: exercício de classificação
: , , .
Tipo da gramática
- Todo lado esquerdo é um único não terminal, então é pelo menos tipo 2.
- tem dois não terminais no lado direito, e / misturam linearidade à direita e à esquerda. Não é regular.
- Resposta: tipo 2 (livre de contexto).
Linguagem gerada (com um alerta)
Observações, conferidas enumerando todas as palavras geradas até tamanho 8:
- O não terminal é inacessível: não aparece em nenhum lado direito alcançável a partir de . As regras de nunca são usadas.
- Toda palavra gerada tem o mesmo número de a e b.
- Mas nem toda palavra com é gerada. Exemplos que faltam:
baab,abbaab,baaabb.Isso sugere um erro de digitação: a gramática clássica é (com e iguais aos do slide). Com essa correção, conferi que ela gera exatamente .
Intuição da versão corrigida: gera palavras com um a a mais que b; gera palavras com um b a mais que a. junta um a com “um b a mais”, resultando em equilíbrio.
Confirme com o professor qual versão ele quis. Se for a do slide mesmo, a resposta honesta é: “um subconjunto próprio das palavras com igual número de a e b”.
Slide 17: linguagens de cada tipo
- LR: geradas por gramáticas tipo 3.
- LLC: tipo 2.
- LSC: tipo 1.
- LRE: tipo 0, associadas a Máquinas de Turing, computabilidade e funções parciais recursivas.
Slides 18 a 20: gramáticas com regra vazia
Pela definição, gramáticas regulares e livres de contexto não geram . Para incluir :
- Se não aparece do lado direito de nenhuma produção: basta acrescentar . Resultado: .
- Se aparece do lado direito: criar um novo inicial , copiar para as produções de e acrescentar .
Por que a regra 2 existe
Se aparece à direita e você põe direto, o pode ser usado no meio de uma derivação e gerar palavras novas, não só a vazia. Com , o só pode ser usado no primeiro passo.
(O slide 19 diz “acrescentar a regra ” no último passo; pelo exemplo do slide 20, a regra acrescentada é .)
Exemplos do slide 20:
| Gramática original | Com | ||
|---|---|---|---|
| 1 | , | , | ( não aparece à direita) |
| 2 | , | , | , , |
Slide 21: exercícios
L₁ = { aⁿbᵐ | n ≥ 0, m ≥ 1 }
Já é regular (tipo 3). Conferido por programa até tamanho 8.
L₂ = { aⁿbᵐcⁿ | n ≥ 0, m ≥ 1 }
Tipo 2. O número de a precisa bater com o de c, e isso exige a regra “embrulhando” . Conferido até tamanho 9.
Gramática regular: w ∈ {0,1}* sem 1s consecutivos
= “o último símbolo não foi 1”; = “o último foi 1”.
Inclui porque . Como aparece à direita, a versão estrita pela regra dos slides 18 a 20 seria: , , . Conferido até tamanho 9.
GLC: w ∈ {0,1,2}* com todos os 0s consecutivos
Estrutura: (qualquer coisa sem 0) (bloco de zeros) (qualquer coisa sem 0).
Conferido até tamanho 7. Essa linguagem é regular também (a ER é ), mas o exercício pede só uma GLC.
Aprofundamento com os livros
Páginas das edições da sua pasta: Menezes 3ª edição (2000) e Ramos, José Neto e Vega (Bookman).
Cada autor escreve a gramática de um jeito
| Fonte | Quádrupla | Observação |
|---|---|---|
| Slides | não terminais, terminais | |
| Menezes (Def. 1.27, p. 23) | = variáveis (não terminais), = terminais | |
| Ramos (p. 91) | = vocabulário inteiro (terminais e não terminais); os não terminais são |
O mesmo significa coisas diferentes
No Menezes, são só as variáveis. No Ramos, é tudo. O próprio Ramos avisa numa nota de rodapé (p. 91) que a ordem e os nomes mudam de autor para autor e que é preciso conferir a notação antes de ler. Na prova, use a notação do professor.
O Menezes define a linguagem gerada com : (Def. 1.29, p. 24). O Ramos chama de derivação não trivial a que usa pelo menos uma produção (p. 92).
O exercício do slide 8 está no Menezes
O Exemplo 22 do Menezes (p. 24 e 25) é a mesma gramática de números naturais dos slides (, ), e o livro também sugere como exercício fazer uma versão que não aceite zeros à esquerda. Ele ainda pergunta se existe mais de uma derivação para 243.
Existe mais de uma derivação para 243 nessa gramática?
Minha resposta: sim. A palavra é a mesma, mas a ordem das substituições pode mudar. Uma derivação troca sempre o não terminal mais à esquerda (); outra pode primeiro expandir todos os e só depois os (). Nas duas, a estrutura é a mesma; só a ordem dos passos muda.
Gramáticas lineares, com os exemplos do Menezes (seção 2.6, p. 55 a 57)
O Menezes define quatro formas (Def. 2.15, p. 55), com :
| Forma | Produções |
|---|---|
| Linear à direita (GLD) | ou |
| Linear à esquerda (GLE) | ou |
| Linear unitária à direita (GLUD) | como GLD, com |
| Linear unitária à esquerda (GLUE) | como GLE, com |
Diferença sutil em relação ao slide 14
O slide pede nas formas unitárias. O Menezes pede , o que permite também e . E para o Menezes, gramática regular é qualquer gramática linear (Def. 2.17, p. 56).
A mesma linguagem nas quatro formas (Exemplo 14 do Menezes, p. 56). Conferi por programa que as quatro geram exatamente até tamanho 11:
| Forma | Produções |
|---|---|
| GLD | , |
| GLE | |
| GLUD | , , |
| GLUE | , |
Repare como a GLE “constrói de trás para frente”: .
Outro exemplo do livro (Exemplo 15, p. 56 e 57), para : GLD , ; GLE , . Também conferido.
Como o Ramos transforma uma forma em outra (seção 3.1, p. 141 a 145)
- Direita para esquerda (Algoritmo 3.1): obtenha uma GLD para o reverso da linguagem e inverta os lados direitos das regras. A linguagem é a mesma; só muda o sentido em que as palavras são construídas.
- Várias letras numa regra para uma letra por regra (Algoritmo 3.3): uma regra como vira uma cadeia de regras com não terminais novos: , , , (Exemplo 3.2, p. 145). É isso que deixa a gramática pronta para virar autômato na aula 07.
A Hierarquia de Chomsky no Ramos (seção 2.6, p. 105 a 110)
Dois detalhes que mudam em relação aos slides:
- Tipo 2 com : o Ramos aceita produções livres de contexto com lado direito vazio (, p. 107). O slide 13 exige . Por isso o Ramos observa que nem toda gramática tipo 2 é tipo 1: a regra quebra a condição (p. 108).
- Tipo 1 e : como as regras nunca encolhem a forma sentencial, uma gramática sensível ao contexto não gera . A convenção adotada é considerar sensível ao contexto se for (p. 107).
Por que existem exatamente essas quatro classes? O Ramos dá uma explicação estrutural (p. 109 e 110) que ajuda muito a decorar:
| Classe | O que ela consegue expressar que a anterior não consegue | Exemplo em programação |
|---|---|---|
| Regular | sequências e repetições simples | números, identificadores |
| Livre de contexto | aninhamento | parênteses balanceados, blocos { } |
| Sensível ao contexto | dependência de contexto: algo num ponto da cadeia depende de algo em outro ponto | uma variável só pode ser usada se foi declarada |
| Recursivamente enumerável | tudo que uma Máquina de Turing faz; aqui aparece a indecidibilidade (não há algoritmo geral para dizer se uma cadeia pertence) |
O Menezes cita o mesmo caso de declaração e uso de variáveis como algo que as livres de contexto não resolvem (cap. 5, p. 154 e 155).
Uma gramática sensível ao contexto de verdade (Ramos, Exemplo 2.24, p. 93 e 94)
Para :
A ideia: gera os e deixa uma fila de pares ; a regra “ordena” a fila, empurrando os para a esquerda; depois as regras com contexto (, , ) trocam as variáveis por terminais da esquerda para a direita. Derivação deaabbcc: . Conferi por programa que ela geraabc,aabbcc,aaabbbccceaaaabbbbcccce nada mais até tamanho 12. Repare que tem dois símbolos no lado esquerdo: por isso não é livre de contexto.Essa gramática resolve o exercício 1.21 do Menezes. Se o exercício pedir , acrescente com um novo inicial , como no slide 19.
O Menezes também mostra (Exemplo 23, p. 25) uma gramática irrestrita para . A técnica é bonita: cada terminal gerado na primeira metade deixa uma variável “mensageira” que caminha pela palavra até o marcador do meio e lá vira o terminal correspondente da segunda metade.
Exercícios extras do Menezes (p. 30)
1.19: gramática para identificadores de Pascal (letra seguida de letras ou dígitos). E com no máximo seis caracteres?
Minha resposta, com para letras e para dígitos:
Para no máximo seis caracteres, troque a recursão por uma contagem: , para , e . Cada permite no máximo mais símbolos.
1.20: gramática para expressões com parênteses, operadores + e * e operando x
Minha resposta:
Conferi por programa que ela gerax*(x+x)e(((((x)))))e não gerax+. A versão mais curta também gera a linguagem, mas é ambígua (a mesma expressão tem duas árvores). Separar em , , embute a precedência de * sobre +. Esse assunto (ambiguidade) é do capítulo de livres de contexto.
Para aprofundar nos livros
Onde ler (páginas das edições da sua pasta)
- Menezes (3ª ed.): 1.5, gramática e derivação, p. 23 a 26; 2.6 Gramática Regular, p. 55 a 60; cap. 5 (Hierarquia de Chomsky), p. 153 a 155; exercícios 1.19 a 1.21, p. 30.
- Ramos, José Neto e Vega: 2.3 Gramáticas, p. 90 a 94; 2.4 Linguagens, Gramáticas e Conjuntos, p. 94 a 96; 2.6 Hierarquia de Chomsky, p. 105 a 110; 3.1 Gramáticas Regulares, p. 141 a 145; 3.9 Linguagens que não são Regulares, p. 233 a 239.
- A prova de que não é regular (Lema do Bombeamento) está resumida em 08 - Tópicos Complementares dos Livros.
Relacionadas: 03b - Expressões Regulares · 07 - Equivalência AF e GR · Glossário · Flashcards