Linguagem livre de contexto

Fonte: testwiki
Revisão em 16h16min de 1 de janeiro de 2024 por imported>Cadnero (Ver também)
(dif) ← Revisão anterior | Revisão atual (dif) | Revisão seguinte → (dif)
Saltar para a navegação Saltar para a pesquisa

Predefinição:Mais notas Na teoria de linguagens formais, uma linguagem livre de contexto (LLC) é uma linguagem gerada por alguma gramática livre de contexto (GLC). Diferentes gramáticas livres de contexto podem gerar a mesma linguagem livre de contexto, ou, inversamente, uma dada linguagem livre de contexto pode ser gerada por diferentes gramáticas livres de contexto. É importante distinguir as propriedades da linguagem (propriedades intrínsecas) de propriedades de uma gramática específica (propriedades extrínsecas).

O conjunto de todas as linguagens livres de contexto é idêntico ao conjunto de linguagens aceitas por um autômato de pilha,[1] o que faz com que essas linguagens sejam passíveis de análise. Na verdade, dada uma GLC, há uma maneira direta para produzir um autômato com pilha para a gramática (e linguagem correspondente), mas indo para o outro lado (produzindo uma gramática dado um autômato) não é tão direta.

Aplicações

Tais linguagens são importantes para definir linguagens de programação.[1] Por exemplo, as linguagens que requerem o balanceamento de parênteses são geradas pela gramática SSS|(S)|λ. Da mesma forma, a maioria das expressões aritméticas é gerada por gramáticas livres de contexto.

Exemplos

Uma linguagem livre de contexto é L={anbn:n1}, a linguagem de todas as cadeias de caracteres não vazias de tamanho par, a primeira metade sempre preenchida com "a"s e a segunda metade sempre preenchida com "b"s. L é gerada pela gramática SaSb|ab, e é aceita pelo autômato de pilha M=({q0,q1,qf},{a,b},{a,z},δ,q0,{qf}), em que δ é definido da seguinte forma:

δ(q0,a,z)=(q0,a)
δ(q0,a,a)=(q0,a)
δ(q0,b,a)=(q1,x)
δ(q1,b,a)=(q1,x)
δ(q1,b,z)=(qf,z)

δ(estado1,leitura,desempilha)=(estado2,empilha)

Onde z é o símbolo inicial da pilha e x significa desempilhar.

LLCs não ambíguas são um subconjunto próprio de todos os LLCs: há LLCs inerentemente ambíguas. Um exemplo de uma LLC inerentemente ambígua é a união de {anbmcmdn|n,m>0} com {anbncmdm|n,m>0}. Este conjunto é livre de contexto, uma vez que a união de duas linguagens livres de contexto é sempre livre de contexto. Mas não há nenhuma maneira de transformar de forma não ambígua cadeias no subconjunto (não-livre-contexto) {anbncndn|n>0} que é a interseção dessas duas linguagens.Predefinição:Sfn

Linguagens não livres de contexto

O conjunto {anbncndn|n>0} é uma Linguagem sensível ao contexto, mas não existe uma gramática livre de contexto gerando essa linguagem. Predefinição:Sfn Então existem linguagens sensíveis ao contexto que não são livres de contexto. Para provar que uma determinada linguagem não é livre de contexto, pode-se empregar o Lema do bombeamento para linguagens livres de contexto ou uma série de outros métodos, como o Lema de Ogden ou Teorema de Parikh.[2]

Propriedades de fechamento

Linguagens livres de contexto são fechadas nas seguintes operações. Se L e P são linguagens livres de contexto e D é uma linguagem regular, as seguintes linguagens também são livres de contexto:[3] OI

Linguagens livres de contexto não são fechadas sob complemento, interseção ou diferença. No entanto, se L é uma linguagem livre de contexto e D é uma linguagem regular, então tanto a sua interseção LD e sua diferença LD são linguagens livres de contexto.

Não fechamento dentro de interseção e complemento

As linguagens livres de contexto não são fechadas sob interseção. Isto pode ser visto tomando as linguagens A={anbncmm,n0} e B={ambncnm,n0}, que são ambos livre de contexto.[5] A interseção é AB={anbncnn0}, que pode ser mostrado como sendo não livre do contexto pelo Lema do bombeamento para linguagens livres de contexto.

Linguagens livres de contexto também não estão fechadas sob complementação, como para qualquer linguagem de A e B: AB=AB.

Propriedades de decisão

Os seguintes problemas são indecidíveis para quaisquer gramáticas livres de contexto A e B:

  • Equivalência: Dadas duas gramáticas livres de contexto A e B, é L(A)=L(B)?
  • Intersecção vazia: Dadas duas gramáticas livres de contexto A e B, é L(A)L(B)= ? No entanto, a intersecção entre uma linguagem livre de contexto e uma linguagem regular é livre de contexto, e a variante do problema onde B é uma gramática regular, é decidível.
  • Contenção: Dada uma gramática livre de contexto A, é L(A)L(B) ? Mais uma vez, a variante do problema em que B é uma gramática regular é decidível.
  • Universalidade: Dada uma gramática livre de contexto A, é L(A)=Σ* ?

Os seguintes problemas são decidíveis para quaisquer linguagens livres de contexto:

  • Vacuidade: Dada uma gramática livre de contexto A, é L(A)= ?
  • Finitude: Dada uma gramática livre de contexto A, L(A) é finito?
  • Composição: Dada uma gramática livre de contexto G, e uma palavra w, então wL(G) ? Algoritmos eficientes em tempo polinomial para o problema de composição são o Algoritmo CYK e Algoritmo Earley.

Análise sintática

Determinar uma instância do problema da composição, ou seja, dada uma cadeia w, determinar se wL(G) onde L é a linguagem gerada por alguma gramática G, também é conhecido como Análise sintática (computação).

Formalmente, o conjunto de todas as linguagens livres de contexto é idêntico ao conjunto de linguagens aceitas por autômato com pilha (AP). Algoritmos de análise sintática para linguagens livres de contexto incluem o Algoritmo CYK e o Algoritmo Earley.

Uma subclasse especial de linguagens livres de contexto é a Linguagem livre de contexto determinística, que é definida como o conjunto de linguagens aceitas por um Autômato com pilha determinístico e pode ser analisado por um Analisador sintático LR.[6]

Decidindo se uma linguagem é ou não livre de contexto

Teorema da iteração para linguagens livre de contexto

Se L é uma linguagem livre de contexto, então existe um n tal que para todo sL tal que |s| ≥ n, s pode ser reescrito da forma uvxyz, |vxy| > 0 e |vxy| ≤ n, tal que ∀ i, i ≥ 0 uvixyizL

Teoria da computação

Predefinição:Teoria da computação

Ver também

Predefinição:Referências

  1. 1,0 1,1 Predefinição:Citar web
  2. How to prove that a language is not context-free?
  3. Predefinição:Citar web
  4. 4,0 4,1 4,2 Predefinição:Citar web
  5. Uma gramática livre de contexto para a linguagem de A é dado pelas seguintes regras de produção, tendo S como o símbolo de início: SSc | aTb | ε; TaTb | ε. A gramática para B é análoga.
  6. Predefinição:Citar periódico