Gramáticas livres de contexto

Construir e provar gramáticas, derivações, árvores sintáticas, ambiguidade e precedência.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

CFG e derivações

Uma gramática livre de contexto é G=(V,Σ,P,S)G=(V,\Sigma,P,S): VV são as variáveis, Σ\Sigma os terminais disjuntos de VV, PP as produções e S∈VS\in V o símbolo inicial. Cada produção tem a forma A→αA\to\alpha, com uma única variável à esquerda.

  • Um passo escreve-se xAy⇒xαyxAy\Rightarrow x\alpha y e ⇒∗\Rightarrow^* indica zero ou mais passos. A linguagem contém só palavras terminais deriváveis de SS: L(G)={w∈Σ∗∣S⇒∗w}L(G)=\{w\in\Sigma^*\mid S\Rightarrow^*w\}.
  • Para provar L(G)=LL(G)=L, mostra que as regras não geram palavras fora de LL e que geram todas as palavras pretendidas.

Construções

Linguagem, com n,m≥0n,m\ge0Gramática
anbna^nb^nS→aSb∣εS\to aSb\mid\varepsilon
anb2na^nb^{2n}S→aSbb∣εS\to aSbb\mid\varepsilon
anbma^nb^m com n>mn>mS→aSb∣AS\to aSb\mid A; A→aA∣aA\to aA\mid a
Palíndromos bináriosS→0S0∣1S1∣0∣1∣εS\to0S0\mid1S1\mid0\mid1\mid\varepsilon

Para palavras com o mesmo número de aa e de bb em qualquer ordem, a lição usa S→SS∣aSb∣bSa∣ab∣ba∣εS\to SS\mid aSb\mid bSa\mid ab\mid ba\mid\varepsilon. A regra SSSS junta dois blocos equilibrados, aSbaSb e bSabSa envolvem um bloco equilibrado e as bases abab, baba e ε\varepsilon garantem palavras terminais. Sem essas bases, só com SSSS, aSbaSb e bSabSa, 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.
  • E→E+E∣E∗E∣aE\to E+E\mid E*E\mid a: a+a∗aa+a*a como a+(a∗a)a+(a*a) ou (a+a)∗a(a+a)*a.
  • Precedência de ∗* e associatividade à esquerda:
E→E+T∣T,T→T∗F∣F,F→a∣(E).E\to E+T\mid T,\quad T\to T*F\mid F,\quad F\to a\mid(E).

Aceitar as mesmas palavras não implica dar as mesmas árvores.

Palavra aceite.

Testes

Passar estes casos não prova que a gramática gera toda e só a linguagem pedida.

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

TipoRestrição nas produções u→vu\to v, com pelo menos uma variável em uu
3, regularTodas lineares à direita ou todas à esquerda
2, livre de contextoUma única variável à esquerda
1, sensível ao contexto∣u∣≤∣v∣\lvert u\rvert\le\lvert v\rvert, isto é, as regras não diminuem o comprimento
0, sem restriçõesQualquer u→vu\to v com variável em uu

Se a linguagem contém ε\varepsilon, o tipo 1 admite a exceção S→εS\to\varepsilon, desde que o símbolo inicial SS 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 S→SS∣aS\to SS\mid a é de tipo 2, mas gera aa∗aa^*, que é regular. De um DFA, cria uma variável AqA_q por estado, uma produção Aq→aArA_q\to aA_r por transição δ(q,a)=r\delta(q,a)=r e Af→εA_f\to\varepsilon por cada estado final ff, com inicial Aq0A_{q_0}.

Construções com desigualdades e provas.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.