Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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 →
• 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”
P2 :
L(P2) = ?
Relação TC – Compiladores (2)
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)
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→
...
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
...
A Uma derivação que e
levou rapidamente a
...
A um conjunto de
terminais.
0123456789010292738499142431312345131131352311414543210
...
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
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
S S S
...
...
...
A A
A
...
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
...
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 sintática
que tem uma repetição, ou seja, daria para gerar variações dessa
palavra que precisam pertencer à linguagem
• |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