340 likes | 625 Views
A 1. A 2. A 3. A 4. z. AUTÔMATO A PILHA. fita de entrada esquerda p/ direita,read only. x 1. x 2. x 3. x 4. x 5. x 6. x n. Q. pilha. push/pop. unidade de controle. Definição NPDA. autômato a pilha não-determinís-tico M=< Q, ,,,q 0 ,,F> Q ► estados
E N D
A1 A2 A3 A4 z AUTÔMATO A PILHA fita de entrada esquerda p/ direita,read only x1 x2 x3 x4 x5 x6 ... xn Q pilha push/pop unidade de controle
DefiniçãoNPDA autômato a pilha não-determinís-ticoM=< Q,,,,q0,,F> Q ► estados ► alfabeto da fita ► alfabeto da pilha q0Q ► estado inicial z ► símbolo de início da pilha FQ ► estados finais ►função de transição : Q x ( U {} ) x Q x *
se ( (p,a,A),(q,B1B2. …Bk ) ) isto significa intuitivamente que quando a máquina está no estado p lendo o símbolo a (na fita de entrada) e A (no topo da pilha),ela tira A da pilha,coloca B1B2. …Bk na pilha (Bk primeiro e B1 por último),move a cabeça para a direita uma célula passando o símbolo a e entra no estado q.
EXEMPLO: Considere o npda com Q={q0,q1,q2,q3),={a,b},={0,1}, z=0, F = {q3} e (q0,a,0)={(q1,10),(q3,)} (q0, ,0) = {(q3,)} (q1,a,1) = {(q1,11)} ((q1,b,1) = {(q2,)} (q2,b,1) = {(q2,)} (q2, ,0) = {(q3,)}
Não são especificadas transições para todas as combinações possíveis de entradas e símbolos da pilha; • Uma transição não especificada vai para o conjunto vazio e representa uma configuração morta do npda; • Transições cruciais • (q1,a,1) = {(q1,11)} adiciona 1 a pilha quando é lido um a ; • (q2,b,1) = {(q2,)} remove 1 quando um b é encontrado.
Estas duas etapas contam o número de a’s e compara este número com o número de b’s. • A unidade de controle fica no estado q1 até ser encontrado o primeiro b e aí entra no estado q2. Isto assegura que nenhum b precede o último a. • Após analisar as transições restantes, veremos que o npda terminará no estado finalq3 se e somente a cadeia de entrada está na linguagem L = {anbn | n 0} {a}
A tripla (q,w,u),onde q é o estado da unidade de controle, w é a parte não lida da cadeia, e u o conteúdo da pilha (com o símbolo mais a esquerda indicando o topo da pilha) é chamada uma descrição instantânea do autô-mato a pilha.
Um movimento de uma descrição instantânea para outra será denotada pelo símbolo |— (q1,aw,bx)|—(q2 ,w,yx) • é possível se e somente se (q2,y)(q1,a,b) • |—*|—+|—m
A Linguagem Aceita por um Autômato a Pilha • Existem duas definições alternati-vas para aceitação, por: pilha vazia ou estado final. • Para um pda M = <Q,,,,q0,z,F> a linguagem L(M) aceita por M por estado final é L(M)={w|(q0,w,z) |—* (p,,)pF e *}
a linguagem L(M) aceita por M por pilha vazia é L(M)={w|(q0,w,z) |—* (p,,), qQ} Obs: Quando a aceitação é por pilha vazia, o conjunto de estados finais é irrelevante, e neste caso geralmente defi-nimos o conjunto de estados finais como o conjunto vazio.
EXEMPLO. Considere o npda com Q={q}, ={[,]}, = {,[}, q0=q, z= e (i) (q,[,) = (q,[) (ii) (q,[,[) = (q,[[) (iii) (q,],[) = (q,) (iv) (q,, ) = (q,) • Transições (i) e (ii) dizem que toda vez que o próximo símbolo de entrada é [,o [ deve ser colocado no topo da pilha.
Transição (iii) diz que quando o pró-ximo símbolo de entrada é ] com um [ no topo da pilha, removemos o [ e não colocamos mais nada na pilha. • Transição (iv) ocorre quando alcan-çamos o fim da cadeia de entrada e queremos retirar da pilha e aceitar o padrão. • Dada a entrada [[[]][]][] a sequência de configurações do autômato até a aceitação da cadeia:
(q, [[[]][]][], ) conf. Inicial (q,[[]][]][], [ ) (i) (q,[]][]][], [[ ) (ii) (q,]][]][], [[[ ) (ii) (q,][]][], [[ ) (iii) (q, []][], [ ) (ii) (q,]][], [[ ) (ii) (q,][], [ ) (iii) (q,[], ) (iii) (q,], [ ) (i) (q, , ) (iii) (q, , ) (iv)
Obs: A transição (iv) poderia ter sido usada várias vezes anteriormente, por exemplo, no primeiro passo levaria a seguinte configuração (q,[[[]][]][] , ) e autômato pararia, com a pilha vazia mas sem ter lido toda a entrada!
Autômatos à Pilha E Linguagens Livre de Contexto Autômatos à pilha para linguagens livre de contexto. • Mostrar que para toda linguagem livre de contexto existe um npda que a aceita. • A idéia subjacente é construir um npda que possa, em algum sentido, efetuar uma derivação mais a esquer-da de qualquer cadeia da linguagem.
Para simplificar assumiremos que a linguagem é gerada por uma gramática na forma normal de Greibach. AaB1B2…Bk, k0 • Construir de G um npda equivalente M com um único estado que aceita a linguagem por pilha vazia. M = ({q},,N,,q,S, Φ)
q é o único estado e é estado inicial , os terminais de G, é o alfabeto de entrada de M N , os não-terminais de G, é o alfabeto da pilha de M é a função de transição S é o símbolo inicial de G, e o símbo-lo inicial da pilha de M. Φ conjunto vazio de estados finais de M • Para cada produção A aB1B2…Bk em P, contém a transição ((q,a,A),(q,B1B2…Bk) )
Exemplo: • Considere o conjunto de cadeias de parên-teses balanceadas [ ] e uma gramática G. • Abaixo temos as regras de produção de G ao lado da transição correspon-dente pela construção vista anteriormente: (i) S [BS ((q,,S),(q,BS)) (ii) S [B ((q,,S),(q,B)) (iii) S [SB (q,,S),(q,S B)) (iv) S [SBS (q,,S),(q,SBS)) (v) B ] (q,,B),(q,))
Considere a entrada x = regra | forma sentencial | configuração S (q, ,S) (iii) S B (q, ,SB) (iv) SBSB (q, ,SBSB) (ii) BBSB (q, ,BBSB) (v) BSB (q, ,BSB) (v) SB (q, ,SB) (ii) BB (q, ,BB) (v) B (q, ,B) (v) (q,,)
Lema:Para qualquer z,yΣ*, γГ*, e AN, A *zγ por uma derivação a esquerda se e somente se (q,zy,A) * (q,y, γ). Teorema: L(M) = L(G). Prova: x L(G) S * x por uma derivação a esquerda (definição de L(G) ) (q,x,s) *(q, , ) (lema) x L(M) definição de L(M). q.e.d
Gramáticas livre de contexto para autômatos a pilha. • A inversa do teorema acima também é verdadeira. • A construção é reverter o processo de construção de L(M) = L(G), de modo que a gramática simule os movimentos do pda. • Isto significa que o conteúdo da pilha deve estar refletido na parte de variá-veis na forma sentencial, enquanto a entrada processada é o prefixo termi-nal da forma sentencial.
Para simplificar assumamos que o pda M satisfaz: 1. Tem único estado final qf no qual só entra sss a pilha estiver vazia. 2. Todas as transições devem ter a forma (q,a,A)={C1,C2,…,Cn}, onde: Ci=(p,) (a) ou Ci=(p,BC) (b)
Estas restrições não são tão severas quanto parece. Mostre como, dado um pda qualquer, obter um satisfazendo 1 e 2 acima. • Na construção da gramática devemos ter uma forma sentencial que reflita o conteúdo da pilha. • Observe que a configuração de um pda também envolve um estado que deve ser lembrado.
Logo as varáveis da gramática têm que ter a forma (qiAqj). • (qiAqj)*w sss o pda apaga (desem-pilha) A da pilha, indo de qi para qj enquanto lê a cadeia w. • se (qj,)(qi,a,A) (tipo 2a), então (qiAqj)a • se (qj,BC)(qi,a,A) (tipo 2b), então (qiAql)a(qjBqk)(qkBql) • onde qk eql varrem todo o Q. • como símbolo inicial faça: (q0zqf)
Exemplo: seja o pda definido por: (q0,a,z)=(q0,Az) (q0,a,A)=(q0,A) (q0,b,A)=(q1,) (q1,,z)=(q2,) não satisfaz condição 2, mas ... (q0,a,A)=(q3,) (q3,,z)=(q3,Az)
De (q0,a,A)=(q3,), (q0,b,A)=(q1,) e (q1,,z)=(q2,) geramos: (q0Aq3) a (q0Aq1) b (q1zq2) De (q0,a,z)=(q0,Az) geramos: (q0zqi)a(q0Aq0)(q0zqi)| a(q0Aq1)(q1zqi)| a(q0Aq2)(q2zqi)| a(q0Aq3)(q3zqi) para i=0,1,2,3
E de (q3,,z)=(q3,Az) geramos: (q3zqi)(q3Aq0)(q0zqi)| (q3Aq1)(q1zqi)| (q3Aq2)(q2zqi)| (q3Aq3)(q3zqi) para i=0,1,2,3 • o símbolo inicial é (q0zq2). • Vejamos como se comportam M e G em aab:
Em M: (q0,aab,z) |— (q0,ab,Az) |— (q3,b,z) |— (q0,b,Az) |— (q1,,z) |— (q2,, ) • em G: (q0z q2) a(q0Aq3)(q3zq2) aa(q3zq2) aa(q0Aq1)(q1zq2) aab(q1zq2) aab
Teorema. Se L=L(M) para algum pda M. então L é uma linguagem livre de contexto.