Construção de compiladores/Linguagens livres de contexto

Fonte: testwiki
Revisão em 01h25min de 18 de fevereiro de 2013 por imported>Abacaxi (Criou nova página com 'Na teoria de linguagens formais, uma '''linguagem livre de contexto''' é uma linguagem gerada por alguma w:gramática livre de contex...')
(dif) ← Revisão anterior | Revisão atual (dif) | Revisão seguinte → (dif)
Saltar para a navegação Saltar para a pesquisa

Na teoria de linguagens formais, uma linguagem livre de contexto é uma linguagem gerada por alguma gramática livre de contexto. O conjunto de todas as linguagens livres de contexto é idêntico ao conjunto de linguagens aceitas por um autômato de pilha. De acordo com a Hierarquia de Chomsky, linguagens livres de contexto são Tipo-2.

As gramáticas livres de contexto são da seguinte forma:

V -> w

de modo que V é um símbolo não-terminal e w é uma cadeia composta de terminais e/ou de não-terminais. O termo 'livre de contexto' vem da idéia de que um não-terminal V sempre pode ser trocado por w, sem precisar entender seu contexto.

Um exemplo que facilita a compreensão do que são linguagens livres de contexto é a frase:

  • 1. "Fui à biblioteca hoje."


a palavra "biblioteca" independente da frase indica todo espaço (concreto, virtual ou híbrido) destinado a uma coleção de informações de quaisquer tipos, sejam escritas em folhas de papel (monografias, enciclopédias, dicionários, manuais, etc) ou ainda digitalizadas e armazenadas em outros tipos de materiais, tais como CD, fitas, VHS, DVD e bancos de dados.

Por sua vez, na frase:

  • 2. "Fui à sede beber água porque estava com sede."


a palavra "sede" em sua segunda ocorrência indica uma sensação de caráter geral, iniciada por estímulos originados dentro do próprio organismo e não do meio ambiente. Na primeira aparição, a palavra "sede" é um centro administrativo.

Dessa forma, na frase 1 a palavra biblioteca é livre de contexto, e a palavra sede da frase 2 é dependente de contexto.

Define-se uma linguagem formal como livre-de-contexto se existe uma gramática livre-de-contexto que a produz.

As gramáticas livres-de-contexto são bastante potentes para descrever a sintaxe da maioria das linguagens de programação, necessitando as vezes algumas extensões ; a sintaxe da maioria das linguagens de programação são na verdade especificadas usando gramáticas livres-de-contexto. Essas gramáticas são no entanto bastante simples para permitir a criação de analisadores eficientes, os quais, por uma cadeia definida, determinam como elas podem ser geradas a partir da gramática.

La BNF (Backus Naur form) é a notação usada com mais frenqüência para descrever uma gramática livre-de-contexto.

Aplicações

Tais linguagens são importantes para definir linguagens de programação. 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, as primeiras metades sempre preenchidas com "as" e as segundas metades sempre preenchidas 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)

Em que z é a pilha de símbolos inicial e x significa desempilhar.

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:

Linguagens livres de contexto não são fechadas em complemento, interseção ou diferença.

Propriedades de decisão

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

  • L(A)=L(B)?
  • L(A)L(B)= ?
  • L(A)=Σ* ?
  • L(A)L(B) ?

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

  • L(A)=?
  • L(A) é finito?
  • Dada a palavra w, wL(A)?


Predefinição:AutoCat