Você está na página 1de 32

TEORIA DA COMPUTAÇÃO

Capítulo 2 – Linguagens Livres-do-Contexto

DIEGO KASUO NAKATA DA SILVA

1
Visão Geral
Tópicos do capítulo

• Gramáticas Livres-do-Contexto

2
Gramáticas Livres-do-Contexto

3
Gramáticas Livres-do-Contexto

• No Capítulo 1 introduzimos dois métodos diferentes, embora


equivalentes, de descrever linguagens: autômatos finitos e expressões
regulares.
• Neste capítulo, apresentamos gramáticas livres-do-contexto, um
método mais poderoso de descrever linguagens.
• Uma aplicação importante de gramáticas livres-do-contexto ocorre
na especificação e compilação de linguagens de programação.
4
Gramáticas Livres-do-Contexto
Definições
• Uma gramática é uma coleção de regras de substituição, também
denominadas produções.
• Cada regra é uma linha da gramática compreendendo um símbolo e
uma cadeia separada por uma seta.
• Símbolos são formados por variáveis (letra maiúscula).
• Cadeias são formadas por variáveis e símbolos denominados
terminais (letras minúsculas, números, símbolos especiais).
• Variável inicial é uma variável que ocorre no lado esquerdo da
5
primeira regra
Gramáticas Livres-do-Contexto
Exemplo 1
Gramática 𝐺1
𝐴 → 0𝐴1
𝐴→𝐵
𝐵→#
• Variáveis: 𝐴, 𝐵
• Variável inicial: 𝐴
• Terminais: 0, 1 e #
6
Gramáticas Livres-do-Contexto
Exemplo 1
A gramática 𝐺1 gera a cadeia 000#111
𝐴 → 0𝐴1
𝐴→𝐵
𝐵→#
• A sequência de substituições para obter uma cadeia é denominada
derivação.
• Uma derivação da cadeia 000#111 é:
𝐴 ⇒ 0𝐴1 ⇒ 00𝐴11 ⇒ 000𝐴111 ⇒ 000𝐵111 ⇒ 000#111 7
Gramáticas Livres-do-Contexto
Exemplo 1
A árvore de sintática para 000#111 na gramática 𝐺1 é:
• Uma derivação da cadeia 000#111 é:
𝐴 ⇒ 0𝐴1 ⇒ 00𝐴11 ⇒ 000𝐴111 ⇒ 000𝐵111 ⇒ 000#111

O conjunto de todas as cadeias geradas dessa maneira constitui a


8
linguagem da gramática.
Gramáticas Livres-do-Contexto
Convenções
• Escrevemos 𝐿(𝐺1 ) para a linguagem da gramática 𝐺1
• Algumas experimentações com a gramática 𝐺1 nos mostra que 𝐿(𝐺1 ) é
0𝑛 #1𝑛 𝑛 ≥ 0}
• Qualquer linguagem que pode ser gerada por uma gramática livre-do-contexto
é chamada linguagem livre-do-contexto (LLC)
• Por conveniência, quando apresentamos uma gramática livre-do-contexto,
abreviamos várias regras com a mesma variável no lado esquerdo, tais como:
𝐴 → 0𝐴1 e 𝐴 → 𝐵
Abreviação: 𝐴 → 0𝐴1 | 𝐵
9
• O símbolo | é lido como "ou"
Gramáticas Livres-do-Contexto
Exemplo 2
A gramática 𝐺2 descreve um fragmento da língua inglesa:

10
Gramáticas Livres-do-Contexto
Exemplo 2

Existem 10 variáveis em 𝐺2 . As cadeias em 𝐿(𝐺2 ) incluem:


• a boy sees
• the boy sees a flower
• a girl with a flower likes the boy

11
Definição Formal de Gramáticas Livres-do-Contexto

Gramática livre-do-contexto (GLC)


Uma LLC é uma 4-upla (𝑉, Σ, 𝑅, 𝑆), onde:
1. 𝑽 é um conjunto finito denominado variáveis.
2. 𝜮 é um conjunto finito, disjunto de 𝑉, denominado terminais.
3. 𝑹 é um conjunto finito de regras, com cada regra sendo uma variável
e uma cadeia de variáveis e terminais, e
4. 𝑺 ∈ 𝑽 é a variável inicial.

12
Definição Formal de Gramáticas Livres-do-Contexto

• Se 𝑢, 𝑣 e 𝑤 são cadeias de variáveis e terminais, e 𝐴 → 𝑤 é uma regra da


gramática, dizemos que 𝑢𝐴𝑣 origina 𝑢𝑤𝑣, escrito 𝑢𝐴𝑣 ⇒ 𝑢𝑤𝑣

• Dizemos que " 𝑢 deriva 𝑣 ", escrito 𝑢 ⇒ 𝑣, se 𝑢 = 𝑣 ou se existe uma
sequência 𝑢1 , 𝑢2 , ⋯ , 𝑢𝑘 para 𝑘 ≥ 0 e
• 𝑢 ⇒ 𝑢1 ⇒ 𝑢2 ⇒ ⋯ ⇒ 𝑢𝑘


• A linguagem da gramática é {𝑤 ∈ Σ | 𝑆 ⇒ 𝑤}

13
Definição Formal de Gramáticas Livres-do-Contexto
Exemplo 3

Na gramática 𝐺3 = ( 𝑆 , 𝑎, 𝑏 , 𝑅, 𝑆). O conjunto de regras, 𝑅 é


𝑆 ⇒ 𝑎𝑆𝑏 𝑆𝑆 𝜀
• Essa gramática gera cadeias como 𝑎𝑏𝑎𝑏, 𝑎𝑎𝑎𝑏𝑏𝑏 e 𝑎𝑎𝑏𝑎𝑏𝑏, entre outras.
• Podemos pensar em 𝑎 como parêntese à esquerda, "(", e 𝑏 como parêntese
à direita, ")"
• 𝐿(𝐺3 ) é a linguagem de todas as cadeias de parênteses apropriadamente
aninhados
14
Definição Formal de Gramáticas Livres-do-Contexto
Exemplo 4
Considere a gramática 𝐺4 = (𝑉, Σ, 𝑅, < 𝐸𝑋𝑃𝑅 >).
𝑉 é {< 𝐸𝑋𝑃𝑅 >, < 𝑇𝐸𝑅𝑀 >, < 𝐹𝐴𝐶𝑇𝑂𝑅 >} e Σ é {𝑎, +,×, , }.
As regras são:
< 𝐸𝑋𝑃𝑅 > → < 𝐸𝑋𝑃𝑅 > + < 𝑇𝐸𝑅𝑀 > | < 𝑇𝐸𝑅𝑀 >
< 𝑇𝐸𝑅𝑀 > → < 𝑇𝐸𝑅𝑀 > × < 𝐹𝐴𝐶𝑇𝑂𝑅 > | < 𝐹𝐴𝐶𝑇𝑂𝑅 >
< 𝐹𝐴𝐶𝑇𝑂𝑅 > → < 𝐸𝑋𝑃𝑅 > | 𝑎
• 𝐺4 gera as cadeias 𝑎 + 𝑎 × 𝑎 e (𝑎 + 𝑎) × 𝑎.
Um compilador traduz o código escrito em uma linguagem de programação para
outra forma. Para isso, ele extrai o significado do código a ser compilado em um
15
processo chamado de análise sintática.
Definição Formal de Gramáticas Livres-do-Contexto
Exemplo 4
Árvores sintáticas para as cadeias 𝑎 + 𝑎 × 𝑎 e (𝑎 + 𝑎) × 𝑎.

16
Gramáticas Livres-do-Contexto (GLC)

Ambiguidade

• Algumas vezes a gramática pode gerar a mesma cadeia de diferentes


formas.
• Uma gramática é ambígua se uma cadeia pode ter várias derivações à
esquerda (ou à direita) ou tiver várias árvores de análise sintática.
• Se uma cadeia tiver várias árvores de análise diferentes, a mesma cadeia
pode ter vários significados diferentes.

17
Gramáticas Livres-do-Contexto (GLC)
Definição
Uma cadeia 𝑤 é derivada ambiguamente na gramática livre-de-
contexto 𝐺 se ela tem duas ou mais derivações mais à esquerda
diferentes.
A gramática 𝐺 é ambígua se ela gera alguma cadeia ambiguamente.

• Às vezes quando temos uma gramática ambígua podemos encontrar uma


gramática não-ambígua que gera a mesma linguagem.

• Algumas gramáticas livres-do-contexto, entretanto, podem ser geradas apenas


por gramáticas ambíguas. Essas linguagens são chamadas inerentemente
ambíguas. 18
Forma Normal de Chomsky
Chomsky

Avram Noam Chomsky é um


linguista, escritor de mais de 70
obras, filósofo, cientista Cognitivo e
ativista político norte-americano,
reverenciado em âmbito acadêmico
como "o pai da linguística moderna"
e autor de trabalhos fundamentais
sobre as propriedades matemáticas
das linguagens formais.

19
Forma Normal de Chomsky
Definição
Uma gramática livre-do-contexto está na forma normal de Chomsky
se toda regra está na forma
𝐴 → 𝐵𝐶
𝐴 → 𝒂
Onde
• 𝒂 é qualquer terminal
• 𝐴 é qualquer variável
• 𝐵 e 𝐶 pode não ser a variável inicial.
• Adicionalmente, permitimos a regra 𝑆 → 𝜀, onde 𝑆 é a variável
inicial. 20
Forma Normal de Chomsky
Podemos converter qualquer gramática 𝐺 na forma normal de Chomsky com
os seguintes passos:

1. Adicionamos nova variável inicial


2. Eliminar produções 𝜀 na forma 𝑆 → 𝜀
3. Eliminar produções unitárias na forma 𝐴 → 𝐵
4. Corrigimos a gramática para garantir que ela ainda gere a mesma
linguagem
5. Convertermos as demais regras na forma apropriada

21
Forma Normal de Chomsky

❑1. Adicionamos nova variável inicial

Adicionamos uma nova variável 𝑆0 e a regra 𝑆0 → 𝑆, na qual 𝑆 era a


variável inicial original. Isso garante que a variável inicial não ocorra no
lado direito de uma regra.

22
Forma Normal de Chomsky

❑2. Eliminar produções 𝜀 na forma 𝑆→𝜀

Removemos uma regra 𝜀, 𝐴 → 𝜀, em que 𝐴 não é variável inicial.


Então, para cada ocorrência de 𝐴 no lado direito, adicionamos uma nova
regra com essa ocorrência apagada. Esses passos se repetem até que
eliminemos todas as regras 𝜀 que não envolvem a variável inicial.

23
Forma Normal de Chomsky

❑3. Eliminar produções unitárias na forma 𝐴→𝐵

Removemos uma regra unitária 𝐴 → 𝐵. Então, sempre que uma regra 𝐵 → 𝑢


aparece, adicionamos a regra 𝐴 → 𝑢, a menos que uma regra como essa já
tenha sido removida. Nesses casos, 𝑢 é uma cadeia de variáveis e terminais.
Esse passo é repetido até que todas as regras unitárias sejam eliminadas.

24
Forma Normal de Chomsky
❑4. Corrigimos a gramática para garantir que ela ainda gere a mesma
linguagem
❑5. Convertermos as demais regras na forma apropriada
As demais regras são convertidas para a forma apropriada.
• Se 𝑘 = 2
Substituímos qualquer terminal 𝑢𝑖 , onde 𝑢𝑖 é uma variável ou símbolo
terminal, nas regras precedentes com uma nova variável 𝑈𝑖 e adicionamos a
regra 𝑈𝑖 → 𝑢𝑖
• Se 𝑘 ≥ 2
Cada regra 𝐴 → 𝑢1 𝑢2 ⋯ 𝑢𝑘 , onde cada 𝑢𝑖 é uma variável ou símbolo
terminal, pelas regras 𝐴 → 𝑢1 𝐴1 , 𝐴1 → 𝑢2 𝐴2 , ..., 𝐴𝑘−2 → 𝑢𝑘−1 𝐴𝑘 . 25
Forma Normal de Chomsky
Exemplo 1
Suponha que 𝐺6 seja a GLC abaixo e converta-a para a forma normal de
Chomsky. As regras em azul são regras que acabaram de ser adicionadas,
e as em vermelho, acabaram de ser removidas.

𝑆 → 𝐴𝑆𝐴 | 𝑎𝐵
𝐴→𝐵|𝑆
𝐵 →𝑏|𝜀

26
Forma Normal de Chomsky
Exemplo 1

1: Adicionamos uma nova variável inicial 𝑆0 e a regra 𝑆0 → 𝑆, na qual 𝑆


era a variável inicial.

𝑆 → 𝐴𝑆𝐴 | 𝑎𝐵 𝑆0 → 𝑆
𝐴 →𝐵|𝑆 𝑆 → 𝐴𝑆𝐴 | 𝑎𝐵
𝐵 →𝑏|𝜀 𝐴 →𝐵|𝑆
𝐵 →𝑏|𝜀

27
Forma Normal de Chomsky
Exemplo 1

2: Remova as regras 𝜀, no modelo 𝐴 → 𝜀, em que 𝐴 não é a variável inicial.


Para cada ocorrência de 𝐴 no lado direito de uma regra, adicionamos uma
nova regra com essa ocorrência apagada.

𝑆0 → 𝑆 𝑆0 → 𝑆
𝑆 → 𝐴𝑆𝐴 𝑎𝐵 𝑎 𝑆 → 𝐴𝑆𝐴 𝑎𝐵 𝑎 𝑆𝐴 𝐴𝑆 | 𝑆
𝐴→𝐵 𝑆 𝜀 𝐴→𝐵 𝑆 𝜀
𝐵 →𝑏|𝜀 𝐵→𝑏
28
Forma Normal de Chomsky
Exemplo 1

3(a): Remova as regras unitárias 𝑆 → 𝑆 e 𝑆0 → 𝑆:

𝑆0 → 𝑆 𝑆0 → 𝑆 | 𝐴𝑆𝐴 𝑎𝐵 𝑎 𝑆𝐴 𝐴𝑆
𝑆 → 𝐴𝑆𝐴 𝑎𝐵 𝑎 𝑆𝐴 𝐴𝑆 | 𝑆 𝑆 → 𝐴𝑆𝐴 𝑎𝐵 𝑎 𝑆𝐴 𝐴𝑆
𝐴→𝐵 𝑆 𝐴→𝐵 𝑆
𝐵→𝑏 𝐵→𝑏

29
Forma Normal de Chomsky
Exemplo 1

3(b): Remova as regras unitárias 𝐴 → 𝐵 e 𝐴 → 𝑆:

𝑆0 → 𝐴𝑆𝐴 𝑎𝐵 𝑎 𝑆𝐴 𝐴𝑆 𝑆0 → 𝐴𝑆𝐴 𝑎𝐵 𝑎 𝑆𝐴 𝐴𝑆
𝑆 → 𝐴𝑆𝐴 𝑎𝐵 𝑎 𝑆𝐴 𝐴𝑆 𝑆 → 𝐴𝑆𝐴 𝑎𝐵 𝑎 𝑆𝐴 𝐴𝑆
𝐴 →𝐵|𝑆|𝑏 𝐴 → 𝑆 | 𝑏 |𝐴𝑆𝐴 𝑎𝐵 𝑎 𝑆𝐴 𝐴𝑆
𝐵→𝑏 𝐵→𝑏

30
Forma Normal de Chomsky
Exemplo 1
4: Converta as demais regras para a forma apropriada acrescentando variáveis às
regras adicionais. A forma normal de Chomsky resultante da gramática 𝐺6 é:
𝑺𝟎 → 𝑨𝑨𝟏 𝑼𝑩 𝒂 𝑺𝑨 𝑨𝑺
𝑺 → 𝑨𝑨𝟏 𝑼𝑩 𝒂 𝑺𝑨 𝑨𝑺
𝑨 → 𝒃 |𝑨𝑨𝟏 𝑼𝑩 𝒂 𝑺𝑨 𝑨𝑺
𝑨𝟏 → 𝑺𝑨
𝑼→𝒂
𝑩→𝒃
Simplificamos a gramática resultante usando uma única variável 𝑈 e a regra 𝑈 → 𝑎
31
Linguagens não-regulares

• Linguagens regulares correspondem a linguagens que podem ser


resolvidas com memória finita: só precisa lembrar-se de uma das muitas
coisas finais.
• Linguagens não-regulares correspondem a problemas que não podem ser
resolvidos com memória finita: pode precisar lembra-se de uma de muitas
coisas diferentes infinitamente.
• Linguagens não-regulares NÃO podem ser representadas por meio de
uma expressão regular.

32

Você também pode gostar