Você está na página 1de 47

Equivalência &

Lema do bombeamento
Universidade Federal de Campina Grande – UFCG
Centro de Engenharia Elétrica e Informática – CEEI
Departamento de Sistemas e Computação – DSC
Professor: Andrey Brito Período: 2022.2
Equivalência do autômato de pilha
• Parte 1: Se uma linguagem é livre-de-contexto então ela é
reconhecida por um autômato de pilha P

• Ideia
• P é construido a partir da gramática que define a linguagem
• P tem que aceitar a entrada w se existe alguma série de substituições usando
regras da gramática que leve do símbolo inicial à w

• Intuição: a pilha é o que se espera ver na entrada


Autômato de pilha (extensão de δ)
• Quero permitir uma função de transição que faça: ’(q,a,s) = (r, xyz)
Autômato de pilha (extensão de δ)
• Quero permitir uma função de transição que faça: ’(q,a,s) = (r, xyz)

a, s → xyz

r
Autômato de pilha (extensão de δ)
• Quero permitir uma função de transição que faça: ’(q,a,s) = (r, xyz)

q a, s → z
q
q1
a, s → xyz  ,  → y

q2
r
,  → x
r
Exemplo
qinicial
• GLC G1:
S → 0S1 |  ,  → S$

• L(G1): 0n1n
, S → 0S1
qloop , S → 
0, 0 → 
1, 1 → 

, $ → 

qfinal
Equivalência do autômato de pilha
qinicial
,  → S$

, A → w para a regra A → w
qloop a, a →  para o terminal a

, $ → 

qfinal
(qinicio, , ) = { (qloop, S$) }

(qloop, , A) = { (qloop, w) | A → w  R }
(qloop, a, a) = { (qloop, ) }
 (qloop, , $) = { qaceita, )}
Exemplo
qinicial
• GLC G1:
S → 0S1 |  ,  → S$

• L(G1): 0n1n
, S → 0S1
qloop , S → 
0, 0 → 
(qinicio, , ) = {(qloop, S$)} 1, 1 → 

(qloop, , S) = {(qloop, 0S1), (qloop, )} , $ → 


(qloop, 0, 0) = {(qloop, )}
(qloop, 1, 1) = {(qloop, )}
(qloop, , $) = {(qfinal, )} qfinal
Equivalência do autômato de pilha
• Colocar a cadeia S$ na pilha, onde S é a variável inicial

• Repetir
• Se o topo da pilha é uma variável A, selecionar (não-deterministicamente)
uma das regras para A, (A → w), e substituir A na pilha pelo lado direito da
regra (w).
• Se o topo da pilha é um terminal a, ler a entrada e compará-la com a. Se
“casa”, desempilhar a e repetir. Se não, rejeitar esse ramo do não-
determinismo.
• Se o topo da pilha é $ entrar no estado de aceitação. A palavra é aceita se a
entrada acabou.
Equivalência do autômato de pilha - Ideia
• Se a palavra passada ao AP pertencem à linguagem dele, os símbolos
devem aparecer da “forma que ele espera”

• O que é a “forma que ele espera”?


• Qualquer coisa que pode ser gerada pela gramática
• E se a gramática gerasse apenas uma palavra?
• S → 00
• As vezes mais de um “próximo símbolo” é possível, então como tratar?
• S → 0A1
• A→0|1
Equivalência do autômato de pilha
• Interpretações
• Quando mais de uma substituição é possível, você deve lembrar do não
determinismo: o autômato testa em paralelo todas as possibilidades

• O que significa dizer que duas possíveis execuções aceitam?


• Se dois ramos sobreviverem é sinal de ambiguidade
• Por que???
• Talvez desse para fazer um autômato determinístico, talvez não
• Existem linguagens que só podem ser geradas por gramáticas ambíguas
• L = aibick onde i=j ou i=k
Relembrando…

P2 :

L(P2) = ?
Relação TC – Compiladores (2)

Exemplo da análise sintática de uma expressão matemática. O


resultado é uma árvore da expressão

https://pt.wikipedia.org/wiki/An%C3%A1lise_sint%C3%A1tica_%28computa%C3%A7%C3%A3o%29
Exemplo: Analisador sintático (1/2)
https://pt.wikipedia.org/wiki/Analisador_sint%C3%A1tico_LL
Exemplo: Analisador sintático (2/2)

Note que a tabela é simplesmente uma


indicação de que transição foi usada.

https://pt.wikipedia.org/wiki/Analisador_sint%C3%A1tico_LL
Discussão
• L=0n1112n, onde o  = {0,1,2} e n > 0
• A classe das linguagens livre-de-contexto é fechada pela operação de
união?
• A classe das linguagens livre-de-contexto é fechada pela operação de
concatenação?
• A intersecção de uma linguagem livre-de-contexto com uma linguagem
regular será sempre uma linguagem regular?
• Algumas gramáticas livre-de-contexto podem ser convertidas em
autômatos finitos?
Lema do bombeamento para LLC
Lema do bombeamento para LLC
• Dada uma árvore de derivação...

...
A

...
A

00 00 1 00 00
Lema do bombeamento para LLC
• Você conseguiria gerar outras palavras da mesma gramática?
Quantas? Você conseguiria fazer isso para qualquer árvore?

...
A

...
A

00 00 1 00 00
Lema do bombeamento para LLC
• E agora? Dadas outra árvore de derivação que saiu de outra
gramática, quantas outras palavras da mesma gramática você
conseguiria gerar?
S X
...

...
A Y
...

00 00 1 00 00 00 111 00
Lema do bombeamento para LLC
• Gerar infinitas palavras só acontece se puder gerar palavras
arbitrariamente grandes, e isso só acontece com ciclos.

S → 0A1 | B S S → 0A1 | B
A → 1B0 | C A → 1B0 | C

...
B → 2C3 | D A B → 2C3 | D
... C → 3C2 | D | A

...
Z→ ...
A
Z→

Comprimento máximo limitado a Comprimento máximo ilimitado,


um certo tamanho, pois as variáveis pois pode-se usar o ciclo A → B → C
não criam ciclos. → A, para gerar uma palavra bem
longa
Lema do bombeamento para LLC
• Invertendo o pensamento: se a gramática tem palavras
arbitrariamente longas, alguma variável tem que se repetir. (Se você
tem 10 derivações e sua gramática só tem 5 regras?)
S
S → 0A0

...
A → 1B1 |  A
B → 2C2

...
C→A A

0123456789010292738499142431312345131131352311414543210
Lema do bombeamento para LLC
• Se a gramática tem palavras arbitrariamente longas, alguma variável
tem que se repetir.

...
A

...
A

0123456789010292738499142431312345131131352311414543210

u v x y z
Bombeando para menos
• Se a gramática tem palavras arbitrariamente longas, alguma variável
tem que se repetir.

...
A

...
A

0123456789010292738499142431312345131131352311414543210

Novamente: Dada uma árvore de derivação como essa, você conseguiria


construir outras palavras que certamente estariam na linguagem? Que palavras
seriam essas?
Bombeando para menos
• Se a palavra é longa demais, alguma variável tem que se repetir

Uma derivação que S


deixou a palavra crescer.

...
A Uma derivação que e
levou rapidamente a

...
A um conjunto de
terminais.

0123456789010292738499142431312345131131352311414543210

Novamente: Dada uma árvore de derivação como essa, você conseguiria


construir outras palavras que certamente estariam na linguagem? Que palavras
seriam essas?
Bombeando para menos
• Se a palavra é longa demais, alguma variável tem que se repetir

Uma derivação que S


deixou a palavra crescer.

...
A Uma derivação que e
levou rapidamente a

...
A um conjunto de
terminais.

0123456789010292738499142431312345131131352311414543210

u v x y z
Bombeando para menos
• Então eu poderia ter uma palavra mais curta, fazendo a derivação
“terminadora” mais em cima

...
A
Bombeando para menos
• Então eu poderia ter uma palavra mais curta, fazendo a derivação
“terminadora” mais em cima, palavra resultante: uxz (onde u,x e z são
os pedaços das palavras)
S

...
A

0123456789010292738499142431312345131131352311414543210

u v x y z
Bombeando para menos
• Então eu poderia ter uma palavra mais curta, fazendo a derivação
“terminadora” mais em cima, palavra resultante: uxz (onde u,x e z são
os pedaços das palavras)
S

...
A

0123456789 49914243131234513 1414543210

u x z
Bombeando para mais
• Ou então eu poderia ter uma palavra mais longa, fazendo a derivação
“prolongadora” também da segunda vez

...
A

...
A

...
A
Bombeando para mais
• Ou então eu poderia ter uma palavra mais longa, fazendo a derivação
“prolongadora” também da segunda vez; palavra resultante: uvvxyyz
(onde u, v, x, y e z são os pedaços das palavras)
S

...
A

...
A

...
A
0123456789010292738499142431312345131131352311414543210
u v y

0123456789010292738499142431312345131131352311414543210 uvvxyyz

v x y z
Bombeando para menos
• Como a palavra mais curta se compara com a palavra original? Que
pedaços deixaram de existir quando a palavra foi encurtada?

S S
...

...
A A
...

0123456789010292738499142431312345131131352311414543210
Bombeando para menos
• Como a palavra mais curta se compara com a palavra original? Que
pedaços deixaram de existir quando a palavra foi encurtada?

S S
...

...
A A
...

0123456789010292738499142431312345131131352311414543210 0123456789010292738499142431312345131131352311414543210

u v x y z u v x y z

uvxyz → uxz
Bombeando para mais
• Como a palavra mais longa se compara com a palavra original? De
onde vieram os pedaços que passaram a existir?

S S
...

...
A A
...

...
A A

...
A
0123456789010292738499142431312345131131352311414543210 0123456789010292738499142431312345131131352311414543210

0123456789010292738499142431312345131131352311414543210
Bombeando para mais
• Como a palavra mais longa se compara com a palavra original? De
onde vieram os pedaços que passaram a existir?

S S
...

...
A A
...

...
A A

...
A
0123456789010292738499142431312345131131352311414543210 0123456789010292738499142431312345131131352311414543210

u v x y z

uvxyz → uvvxyyz 0123456789010292738499142431312345131131352311414543210


Então note que aqui um pedaço some...

S S S

...
...
...

A A
A
...

0123456789010292738499142431312345131131352311414543210 0123456789 49914243131234513 1414543210


0123456789010292738499142431312345131131352311414543210
E aqui um pedaço se repete...

S S
...

...
A A
Por quê?
...

...
A A

...
A
0123456789010292738499142431312345131131352311414543210 0123456789010292738499142431312345131131352311414543210

0123456789010292738499142431312345131131352311414543210
No primeiro caso a parte que some é a gerada
pela antiga escolha, que não foi mais usada

S S S

...
...
...

A A
A
...

0123456789010292738499142431312345131131352311414543210 0123456789 49914243131234513 1414543210


0123456789010292738499142431312345131131352311414543210

x u v x y z u x z
u v y z
No segundo caso, a antiga escolha foi usada
duas vezes, e por isso se repete

S S
...

...
A A
Quantas
...

...
A A vezes posso

...
0123456789010292738499142431312345131131352311414543210
A
0123456789010292738499142431312345131131352311414543210
fazer isso?
u v y
u v x y z
0123456789010292738499142431312345131131352311414543210

v x y z
No segundo caso, a antiga escolha foi usada
duas vezes, e por isso se repete

S S
...

...
A A
Quantas
...

...
A A vezes posso

...
0123456789010292738499142431312345131131352311414543210
A
0123456789010292738499142431312345131131352311414543210
fazer isso?
u v y
u v x y z Quantas eu
0123456789010292738499142431312345131131352311414543210

v x y z
quiser.
Lema do bombeamento para LLC
• Se uma linguagem L é livre de contexto, existe um número p, tal que...

• Qualquer palavra em L que seja maior que p tem uma árvore de


derivação que tem uma repetição, ou seja, daria para gerar variações
dessa palavra que precisam pertencer à linguagem

• Então, a palavra pode ser quebrada em cinco pedaços: s = u.v.x.y.z


• Para i ≥ 0, u.vi.x.yi.z A
Lema do bombeamento para LLC
• Se uma linguagem L é livre de contexto, existe um número p, tal que...

• Qualquer palavra em L que seja maior que p tem uma árvore sintática
que tem uma repetição, ou seja, daria para gerar variações dessa
palavra que precisam pertencer à linguagem

• Então, a palavra pode ser quebrada em cinco pedaços: s = u.v.x.y.z


• Para i ≥ 0, u.vi.x.yi.z A
• |v.y| > 0
• |v.x.y| ≤ p
Lema do bombeamento para LLC
• Se |s| > p então s = uvxyz e para i ≥ 0, uvixyiz A
• Só precisamos pensar nas palavras longas pois elas são as que
certamente precisam de loops

• |vy| > 0
• Algo precisou ser gerado pelo loop (as aparições da variável
que se repete)
• A → B e B → A não ajudam a gerar palavras longas (esse loop
pode sim estar lá, mas não é por causa dele que a palavra é S
longa) A → B→ A

...
A
• |vxy| ≤ p

...
• Se a parte que você consegue gerar sem usar repetições do A
loop já é maior que p, não faz sentido

00 1 00
Exemplo
• B = { anbncn | n ≥ 0} é livre de contexto?
Exemplo
• B = { anbncn | n ≥ 0} é livre de contexto?
• Primeiro, selecione uma palavra de comprimento maior que p (que tal
apbpcp?)
• Essa palavra precisa poder ser quebrada, então pense em maneiras de
quebrá-la
• v e y podem conter somente um tipo de símbolo (ou a ou b ou c)
• v e y podem conter mais de um tipo de símbolo
Exemplo
• Caso 1: v e y podem conter somente um tipo de símbolo (ou a ou b
ou c)
• No bombeamento, o símbolo que for repetido (ex., s = uv2xy2z) quebra o
balanço da palavra

• Caso 2: v e y podem conter mais de um tipo de símbolo (ex., v =aab, y


= bcc)
• A quantidade pode ser preservada com uma boa escolha de v e y
• Mas o bombeamento muda a ordem dos símbolos
Comentários
• A classe das LLCs é fechada pela intersecção? Complemento?

• Existe uma relação entre determinismo do AP e ambiguidade:


linguagens LLC Determinísticas são sempre não-ambíguas, embora
algumas LLC também o sejam

Você também pode gostar