DCC063
Linguagens Formais
e Autômatos
Tipos de Linguagem
Autômatos de Pilha
2
Tipo 0 Linguagens Irrestritas
Tipo 1 Linguagens Sensíveis ao Contexto
Tipo 2 Linguagens Livres de Contexto
Hierarquia de Chomsky
3
Autômatos de Pilha
Reconhecedores decidem se uma cadeia w
pertence ou não a uma dada linguagem L(G)
Exemplo : L= {aibi | i>0}
ab L?, aabb L?, aaabbb L?, aaab L?
4
Autômatos de Pilha
=
não
sim
G
L
Reconhecedores Linguagens:
5
Autômatos de Pilha
Linguagem Reconhecedor
Irrestrita
Sensível ao Contexto Máquina de Turing
Livre de contexto Autômato de Pilha
Conceito Intuitivo
Suponha L uma LLC sobre o alfabeto . Verificar
se uma cadeia w pertence a L.
Uso de Pinos e Discos
6
Conceito Intuitivo
Exemplo: L= {vcvR | v(a,b)*, vR é a cadeia
reversa de v}
Assim = {a, b, c}. Queremos saber: abaacaaba
L? , abaca L?
7
Conceito Intuitivo
Usaremos uma pilha (pino) e dois discos: preto e
branco. Para cada símbolo de entrada procederemos da seguinte forma:
Etapa 1: Se achar a empilhe um disco preto, e se achar b, um disco branco.
Etapa 2: Se achar c mude de atitude, e prepare-se para desempilhar discos.
8
Conceito Intuitivo
Etapa 3: Compare o símbolo de entrada com o que está no topo da pilha:
◼ Se for a e o topo da pilha é ocupado por um disco preto
desempilhe o disco; ou
◼ Se for b e o topo da pilha é ocupado por um disco
branco, desempilhe o disco.
Se em alguma situação nenhuma das etapas
acima puder ser aplicada, então pare: wL.
9
Conceito Intuitivo
Verificar se w = abcba pertence a L? Sim
10
Autômatos de Pilha
Símbolo de
entrada Faz Pilha
Resta na entrada
a Empilha disco preto bcba
b Empilha disco branco cba
c Mudar de atitude ba
b Compara e Desempilha a
Conceito Intuitivo
Verificar se w = aabcba pertence a L? Não
11
Autômatos de Pilha
Símbolo de
entrada Faz Pilha
Resta na entrada
a Empilha disco preto abcba
a Empilha disco preto bcba
b Empilha disco branco cba
c Muda de atitude ba
b Compara e Desempilha a
Conceito Intuitivo
Verificar se w = cab pertence a L? Não
Conclusão: A entrada deverá ser aceita se, e
somente se, ao final da execução do processamento ela foi totalmente consumida e a pilha está vazia.
12
Autômatos de Pilha
Símbolo de
entrada Faz Pilha
Resta na entrada
c Muda de atitude ab
13
Autômatos de Pilha
a1 a2 .... ai .... an
Controle +
q
s1 s2
....
sm
Fita de leitura
Registrador com estado inicial Pilha
topo
Sentido único
Definição Formal
Um autômato de pilha não determinístico M é
definido como:
M = Σ, Γ, 𝑄, 𝑞1, 𝐹, 𝛿
onde:
Σ : Alfabeto de entrada
𝚪 : Alfabeto da pilha
𝑄 : Conjunto de estados: 𝑞1, 𝑞2, ⋯ , 𝑞𝑛 𝑞1 : Estado inicial: 𝑞1 ∈ 𝑄
𝐹: Conjunto de estados finais: 𝐹 ⊆ 𝑄
𝛿: Função de transição:
𝛿 = 𝑄 × Σ ∪ 𝜀 × Γ ∪ 𝜀 → 𝜌 𝑄 × Γ∗
14
Definição Formal
Entendendo a função de transição:
Seja M um AP e suponha que: qQ,
{}e
{
}
Dados p
Q e u*, a transição (q, , ) → (p, u) M muda para o estado p.
M troca por u no topo da pilha.
15
Definição Formal
Casos onde aparecem o
:
16
Autômatos de Pilha
Casos Interpretação
= , (q, , )→ (p,u) A entrada não é consultada
= , (q, , ) → (p,u) A topo da pilha não é consultado = = , (q, , ) → (p,u) Nem a entrada, nem o topo da pilha
são consultados.
e u = , (q, , ) → (p, ) Remove da pilha (desempilha) = e u , (q, , ) → (p, u) Empilha u
Exemplos
Exemplo1: Criar um Autômato de Pilha M1 para
L1= {vcvR | v (a,b)* , vR é a cadeia reversa de v}
: {a, b, c}
: {a, b}
17
Exemplos
: função de transição:
Q = {q1, q2}, q1 = q1 e F = {q2}
18
Autômatos de Pilha
(
)
(
)
(
)
(
)
(
)
q
Desempilha A função de transição pode ser colocada em
forma de tabela. Para o autômato M1 acima:
19
Autômatos de Pilha
Estado Entrada Topo da
pilha Transições Descrição
q1 a (q1, a) Acha a e o empilha.
q1 b (q1, b) Acha b e o empilha.
q1 c (q2, ) Acha c e muda de estado.
* q2 a a (q2, ) Acha a na entrada e na pilha e o desempilha
Forma gráfica (diagrama) de uma transição
20
Autômatos de Pilha
p
𝜎, 𝛾, 𝑢
qEstado anterior
Símbolo lido da fita
Estado novo
Símbolo lido da pilha (topo)
Exemplos
Exemplo2: Criar um Autômato de Pilha M2 para
L2= {vvR | v (a,b)* , vR é a cadeia reversa de v}
: {a, b}
: {a, b}
21
Exemplos
Exemplo2: função de transição:
Q = {q1, q2}, q1 = q1 e F = {q2}
22
Autômatos de Pilha
Estado Entrada Topo da pilha
Transições Descrição
q1 a (q1, a) Acha a e o empilha. q1 b (q1, b) Acha b e o empilha. q1 (q2, ) Muda de estado.
q2 a a (q2, ) Acha a na entrada e no topo e o desempilha
Exemplos
Exemplo2: obs:
O autômato M2 deverá adivinhar o momento em
que irá alcançar o centro da cadeia de entrada e mover-se para o estado q2 de um modo não determinístico. M2 é não determinístico.
Assim, sempre que M2 estiver no estado q1,
poderá não-deterministicamente, escolher entre adicionar o próximo símbolo de entrada à pilha ou mover-se para o estado q2 sem consumir qualquer símbolo de entrada.
23
Exemplos
Exemplo 3: L = {aibi | i 0} Estratégia:
Etapa 1: Se achar um a na entrada, ponha um a na pilha.
Etapa 2: Se achar um b mude de atitude e passe a comparar a entrada com a pilha, removendo um disco da pilha para cada b que achar na entrada
(incluindo o primeiro!)
24
Exemplos
Exemplo 3: M = ( {a,b}, {a}, {q1, q2}, q1, {q1, q2},
). Onde está na tabela
25
Autômatos de Pilha
Estado Entrada Topo da pilha Transições Descrição
q1 a (q1, a) Empilha a.
q1 b a (q2, ) Desempilha a e muda de estado.
Exemplos
Exemplo 4: L = {w {a, b} | o número de a’s é
igual ao número de b’s}
Procedimento:
Etapa 1: Empilhar a para cada a encontrado e b para cada b encontrado na entrada.
Etapa 2: Empilhar um “b sobre um a” tem o efeito de desempilhar o b da pilha e vice-versa.
26
Exemplos
Exemplo 4: está na tabela:
27
Autômatos de Pilha
Estado Entrada Topo da pilha
Transições Descrição
q1 a a (q1, aa) Acha a e o empilha. q1 b b (q1, bb) Acha b e o empilha. q1 a b (q1, ) Desempilha um b. q1 b a (q1, ) Desempilha um a.
Exemplos
Exemplo 4:
A saída é inventar um novo símbolo para o
alfabeto da pilha
Este símbolo é acrescentado à pilha ainda vazia,
no início da computação e dever ser retirado no final.
Se q1 for o estado inicial e q3 final, teremos:
(q1, , ) = {(q2, )}
(q2, , ) = {(q3, )}
28
Exemplos
Exemplo 4: Resumindo, temos um autômato que
tem
{a, b} como alfabeto de entrada;
{a, b, } como alfabeto da pilha;
estados q1, q2 e q3; estado inicial q1; estado final q3;
e a função de transição é definida na tabela a seguir
29
Exemplos
Exemplo 4: função de transição
30
Autômatos de Pilha
Estado Entrada Topo da pilha
Transições Descrição
q1 (q2, ) Marca o fundo da pilha q2 a (q2, a) Acha a e empilha um a q2 b (q2, b) Acha b e empilha um b q2 a a (q2, aa) Acha a e empilha um a
Exemplos
Exemplo 4: função de transição
31
Autômatos de Pilha
Estado Entrada Topo da pilha
Transições
q1 (q2, ) q2 a (q2, a) q2 b (q2, b) q2 a a (q2, aa)
Exemplos. Exemplo 4: computação para abbbabaa
32
Autômatos de Pilha
Estado Entradas não lidas Pilha Comentário
q1 abbbabaa Configuração inicial
q2 abbbabaa Marcador
q2 bbabaa Remove um a
q2 babaa b Começa uma pilha b’s
q2 abaa bb
q2 baa b
q2 aa bb
q2 a b
q2
q3 Aceita.
Exercícios
1) Considere o autômato de pilha não determinístico M com alfabeto = {a, b} e = {a}, estados q1 e q2, estado inicial q1 e final q2 e transições dadas pela tabela:
a)Descreva todas as possíveis sequências de transições de M na entrada aba.
b)Mostre que aba, aa e abb não pertencem a L(M) e que baa, bab e baaaa pertencem a L(M).
33
Autômatos de Pilha
Estrado Entrada Topo da pilha transições
q1 a (q1, a)
(q2, )
q1 b (q1, a)
q2 a a (q2, )
Exercícios
2) Ache um autômato de pilha não determinístico cuja linguagem aceita é L, onde:
a) L={anbn+1| n 0};
b) L={anb2n| n 0};
c) L={anbmcn| m,n 1};
d) L={anbman+m| m,n 1};
3) Considere a linguagem dos parênteses balanceados.
a) Dê exemplo de uma gramática livre de contexto que gere esta linguagem.
b) Dê exemplo de um autômato de pilha não determinístico que aceita esta linguagem.
34
Linguagem aceita por um AP
Aceitação por Estado Final: (similar a AF)
Conjunto de todas as cadeias para as quais há pelo menos uma trajetória, a partir do estado inicial, que faz o autômato de pilha P =
Σ, Γ, 𝑄, 𝑞1, 𝐹, 𝛿 entrar num estado final:
𝐿 𝑃 = 𝑤 𝑞1, 𝑤, 𝜀 ⊢∗ 𝑝, 𝜀, 𝛼 , 𝑝 ∈ 𝐹
Última configuração 𝑝, 𝜀, 𝛼 da computação:
𝑝: estado final do AP P;
𝜀: a cadeia de entrada é totalmente consumida;
𝛼: a cadeia que resta na pilha (não vazia).
35
Linguagem aceita por um AP
Aceitação por Pilha Vazia: Conjunto de todas as
cadeias para as quais pelo menos uma trajetória, a partir do estado inicial, faz com que a pilha do AP
P = Σ, Γ, 𝑄, 𝑞1, 𝐹, 𝛿 fique vazia:
𝑁 𝑃 = 𝑤 𝑞1, 𝑤, 𝜀 ⊢∗ 𝑝, 𝜀, 𝜀
Última configuração 𝑝, 𝜀, 𝜀 da computação:
𝑝: estado qualquer do AP P;
𝜀: a cadeia de entrada é totalmente consumida;
𝜀: a pilha está vazia. Portanto, se o AP aceita por pilha vazia, o conjunto de estados finais é irrelevante.
36
GLC e Autômatos de Pilha
Teorema: Uma linguagem é livre de contexto se, e
somente se, é aceita por algum autômato de pilha não determinístico
Iremos elaborar uma receita que, dada uma
gramática livre de contexto G = (N, T, P, S), construiremos um autômato de pilha não determinístico M que aceita L(G).
Não desenvolveremos a recíproca, isto é, dado M
um autômato de pilha não determinístico, construir G a partir de M.
37
GLC e Autômatos de Pilha
Sejam
G = (N, T, P, S), uma gramática livre de contexto e
M = (, , Q, q1, F, ), o autômato de pilha a ser construído a partir de G .
Como M deve aceitar L(G), é claro que seu
alfabeto de entrada tem que ser igual a T.
38
GLC e Autômatos de Pilha
Continuando, temos:
= T (alfabeto de entrada é igual conjunto de terminais de G)
q1 = i (estado inicial i)
= T N (alfabeto de pilha é a união de terminais e não
terminais de G).
39
GLC e Autômatos de Pilha
O autômato deve começar pondo símbolo inicial
S no fundo da pilha (i, , ) = {(f, S)},
onde f, diferente de i, é um estado do autômato. Daí em diante toda a ação vai se processar na
pilha, e podemos simular a derivação sem nenhuma mudança de estado adicional. Portanto, f será o estado final de M.
40
GLC e Autômatos de Pilha
Construção de AP Através de GLC
o alfabeto de entrada = T;
o alfabeto da pilha = TN;
o conjunto de estados Q = {i, f};
o estado inicial i;
o conjunto de estados finais F = {f};
41
GLC e Autômatos de Pilha
a função de transição
que é definida por
42
Autômatos de Pilha
( ) ( ) ( )*
, ,
: i f T T N → i f T N
GLC e Autômatos de Pilha
Este autômato executa dois tipos diferentes de
transição a partir do estado final f.
Transições de substituições: substituem uma variável X no topo da pilha por (pertence a TN*) quando
X → é uma regra de G.
Transições de remoção: removem terminais que aparecem casados na pilha e na entrada.
Qualquer computação no autômato assim
construído simula uma derivação mais a esquerda em G.
43
GLC e Autômatos de Pilha. Exemplo 1
Considere a gramática G2 cujas regras são
E → E + T | T T → T * F | F F → (E) | id
Assim, deve-se ter
= {id, +, *, (, )}
= { id, +, *, (, ), E, T, F} Q = {i, f}
q1 = i F = {f}
44
GLC e Autômatos de Pilha. Exemplo 1
E a função de transição é definida pela tabela
45
Autômatos de Pilha
Estado Entrada Topo da pilha Transição
i (f, E)
f E (f, E+T)
(f, T)
f T (f, T*F)
(f, F)
f F (f,(E))
(f, id)
f ( ( (f, )
f ) ) (f, )
f + + (f, )
f * * (f, )
GLC e Autômatos de Pilha. Exemplo 1
Uma computação para a cadeia id + id * id
46
Autômatos de Pilha
(i, id+id*id, )
(f, id+id*id, E)
(f, id+id*id, E+T)
(f, id+id*id, T+T)
(f, id+id*id, F+T)
(f, id+id*id, id+T)
(f, +id*id, +T)
(f, id*id, T)
(f, id*id, T*F)
(f, id*id, F*F)
(f, id*id, id*F)
(f, *id, *F)
(f, id, F)
(f, id, id)
GLC e Autômatos de Pilha. Exemplo 2
Considere a gramática G3 cujas regras são
S → aSa | bSb | c
L(G3) = {wcwR | w{a, b}* }. Autômato:
= {a, b, c}
= {a, b, c, S} Q = {i, f}
q1 = i F = {f}
47
GLC e Autômatos de Pilha. Exemplo 2
E a função de transição é definida pela tabela
48
Autômatos de Pilha
Estado Entrada Topo da pilha Transição
i (f, S)
f S (f, aSa)
(f, bSb) (f, c)
f a a (f, )
f b b (f, )
GLC AP. Ex 2. Computação de abbcbba
49
Autômatos de Pilha
Estado Entradas não lidas Pilha Comentário
i abbcbba Configuração inicial
f abbcbba S
f bbcbba Sa
f bbcbba bSba
f bcbba Sba
f bcbba bSbba
f cbba Sbba
f cbba cbba
f bba bba
f ba ba
f abbcbba aSa
f a a