Pushdown Automata PDA Sulistyo Puspitodjati Sumber Ananth Kalyanaraman
Pushdown Automata (PDA) Sulistyo Puspitodjati Sumber: Ananth Kalyanaraman https: //www. eecs. wsu. edu/~ananth/Cpt. S 317/Lectures/index. htm 1
PDA - Otomata untuk Bahasa Bebas Konteks (CFL) n n Jika FA untuk Reg Lang, PDA untuk CFL PDA == [ -NFA + “stack” ] Input string -NFA Accept/reject stack berisi simbol stack 2
Pushdown Automata - Definisi n A PDA P : = ( Q, ∑, , δ, q 0, Z 0, F ): n n n n Q: ∑: : δ: q 0: Z 0: F: himpunan state (sebagaimana pada -NFA alfabet input himpunan simbol stack fungsi transisi start state Initial stack top symbol Final/accepting states 3
old state input symb. Stack top new state(s) new Stack top(s)) δ : Q x ∑ x => Q x δ : Fungsi. Transition X Y i n d e t ermin No δ(q, a, X) = {(p, Y), …} 1. Transision state dari q ke p a 2. a input symbol yang sedang dibaca p q 3. X - current stack top symbol 4. Y – “pegantian” X; Y=? * (string simbol stack) i) Y= i. Set Y = untuk Pop(X) ii) Y=X ii. If Y=X: stack top tidak berubah iii. If Y=Z 1 Z 2…Zk: X di pop dan diganti iii) Y=Z 1 Z 2. . Zk dengan Y urutan (Z 1 jadi stack top yang baru) Action Pop(X) Push(X) Pop(X) Push(Zk-1) … Push(Z 2) Push(Z 1) 4
Contoh Lwwr = {ww. R | w dalam (0 |1)*} n CFG untuk Lwwr : S 0 S 0 | 1 S 1 | n PDA untuk Lwwr : P = ( Q, ∑, , δ, q 0, Z 0, F ) n = ( {q 0, q 1, q 2}, {0, 1, Z 0}, δ, q 0, Z 0, {q 2}) 001100 5
state awal PDA: PDA untuk Lwwr 1. 2. δ(q 0, 0, Z 0)={(q 0, 0 Z 0)} δ(q 0, 1, Z 0)={(q 0, 1 Z 0)} Stack top q 0 Z 0 Simbol pertama di-push ke stack δ(q 0, 0, 0)={(q 0, 00)} δ(q 0, 0, 1)={(q 0, 01)} δ(q 0, 1, 0)={(q 0, 10)} δ(q 0, 1, 1)={(q 0, 11)} Tumpuk di stack dengan mem-push simbol baru ke atas dari posisi top sebelumnya (w-part) δ(q 0, , 0)={(q 1, 0)} δ(q 0, , 1)={(q 1, 1)} δ(q 0, , Z 0)={(q 1, Z 0)} Kondisi mem-pop, nondeterministically (batas antara w dengan w. R) 11. δ(q 1, 0, 0)={(q 1, )} δ(q 1, 1, 1)={(q 1, )} Kurangi stack dengan me-pop matching symbols (w. R-part) 12. δ(q 1, , Z 0)={(q 2, Z 0)} Masuk ke acceptance state 3. 4. 5. 6. 7. 8. 9. 10. 6
PDA as a state diagram δ(qi, a, X)={(qj, Y)} State saat ini Simbol ysng sedang dibaca qi stack top a, X / Y Stack Top yang diganti (w/ string Y) qj State selanutnya 7
PDA untuk Lwwr: Diagram Transisi ∑ = {0, 1} = {Z 0, 0, 1} Q = {q 0, q 1, q 2} Penumpukan stack δ(q 0, 0, Z 0)={(q 0, 0 Z 0)} δ(q 0, 1, Z 0)={(q 0, 1 Z 0)} , Z 0/Z 0 0, Z 0/0 Z 0 1, Z 0/1 Z 0 0, 0/00 0, 1/01 1, 0/10 1, 1/11 q 0 Pop stack untuk matching symbols 0, 0/ 1, 1/ , Z 0/Z 0 , 0/0 , 1/1 proses popping mode non-deterministic PDA 1. q 1 2. , Z 0/Z 0 q 2 Ke –state penerima 3. 4. 5. 6. 7. 8. 9. δ(q 0, 0, Z ={(q 0, 0 Z 0 δ(q 0, 1, Z 0)={( δ(q 0, 0, 0)={(q δ(q 0, 0, 1)={(q δ(q 0, 1, 0)={(q δ(q 0, 1, 1)={(q δ(q 0, , 0 {(q 1, 0)} δ(q 0, , 1)={(q 8 δ(q , , Z )={
Contoh 2: Bahasa kurung Berpasangan ∑ = { (, ) } = {Z 0, ( } Q = {q 0, q 1, q 2} Penumpukan stack Pop stack untuk matching symbols (, Z 0 / ( Z 0 (, ( / ( ( , Z 0 / Z 0 q 0 ), ( / , Z 0 / Z 0 proses popping mode q 1 (, ( / ( ( (, Z 0 / ( Z 0 , Z 0 / Z 0 q 2 Ke acceptance (by final state) saat menemukan symbol stack paling bawah Untuk memperbolehkan kurung bersarang 9
Contoh 2: Bahasa kurung Berpasangan (desain yang lain) ∑ = { (, ) } = {Z 0, ( } Q = {q 0, q 1} (, Z 0 / ( Z 0 (, ( / ( ( ), ( / start , Z 0/ Z 0 q 0 , Z 0/ Z 0 q 1 10
Konfigurasi PDA (Instantaneous Description / ID) Konfigurasi PDA setiap saat langkah transisi dari satu state ke state lain, adalah catatan mengenai (q, w, y) n n n q – state terkini w – sisa untai yang belum dibaca (simbol paling depan akan menjadi masukan untuk aksi selanjutnya) y – untai stack (baca dari bawah ke atas) Transisi δ(q, a, X)={(p, A)} mengandung konfigurasi : n (q, a, X ) |--- (p, , A) n (q, aw, XB ) |--- (p, w, AB) |--- simbol “turnstile notation” , mewakili satu langkah |---* mewakili nol langkah atau lebih 11
Perjalanan Konfigurasi untuk input “ 1111” dari PDA Lwwr ? (q 0, 1111, Z 0) (q 0, 111, 1 Z 0) (q 0, 11 Z 0) (q 0, 1, 111 Z 0) Perjalanan bergaya konfigurasi dari langkah non-deterministic PDA (q 1, 1111, Z 0) (q 1, 111, 1 Z 0) Path dies… (q 1, 11 Z 0) (q 1, 1, 111 Z 0) (q 1, 1, 1 Z 0) (q 1, , 1111 Z 0) (q 1, , Z 0) Path dies… (q 0, , 1111 Z 0) (q 2, , Z 0) Diterima oleh final state: = empty input AND final state 12
Dua tipe PDA berdasarkan penerimaan untai : state akhir atau stack kosong (accept by final state or by empty stack) Diterima melalui … n PDA yang menerima melalui final state: n Bahasa L(P) yang diterima oleh PDA P oleh final state, adalah: n n {w | (q 0, w, Z 0) |---* (q, , A) }, s. t. , q F Checklist: - input habis? - di final state? PDA yang menerima melalui empty stack: n Bahasa N(P) yang diterima PDA P, oleh empty stack, adalah: n {w | (q 0, w, Z 0) |---* (q, , ) }, q Q. Checklist: - input habis? - stack kosong? Q) Apakah PDA yang menerima dengan empty stack perlu final state? 14
Contoh: L = bahasa kurung berpasanagn PDA yang accept dengan final state PF : start q 0 (, Z 0 / ( Z 0 (, ( / ( ( ), ( / , Z 0 / PN: (, Z 0 / ( Z 0 (, ( / ( ( ), ( / , Z 0/ Z 0 PDA ekuivalen yang accept dengan empty stack start q 1 , Z 0/ Z 0 q 0 (()) (q 0, (()), Z 0) |-- (q 0, ()), (Z 0) |-- (q 0, )), ((Z 0) |-- (q 0, ), (Z 0) |-- (q 0, , Z 0) |-(q 1, , Z 0) 15
PDA ekuivalen yang accept dengan empty stack (, Z 0 / ( Z 0 (, ( / ( ( ), ( / , Z 0 / start , Z 0/ Z 0 q 0 ( ( ( Z 0 Cek PDA untuk input: ( ( ( ) ) ( ) (q 0, ( ( ( ) ) ( ) , Z 0 ) |--- (q 0 , ( ( ) ) ( ) , (Z 0 ) (q 0 , ( ) ) ( ) , ((Z 0 ) |--- (q 0 , ) ) ( ) , (((Z 0 ) |---. . . 16
PDA yang menerima string melalui final state ekuivalen dengan yang menerima melalui empty stack n PF <= PDA accepting by final state n n PN <= PDA accepting by empty stack n n PF = (QF, ∑, , δF, q 0, Z 0, F) PN = (QN, ∑, , δN, q 0, Z 0) Theorem: n (PN==> PF) untuk setiap PN, ada PF s. t. L(PF)=L(PN) n (PF==> PN) untuk setiap PF, ada PN s. t. L(PF)=L(PN) 18
How to convert an empty stack PDA into a final state PDA? PN==> PF construction n n Whenever PN’s stack becomes empty, make PF go to a final state without consuming any addition symbol To detect empty stack in PN: PF pushes a new stack symbol X 0 (not in of PN) initially before simultating PN P N: PF : New start , X 0 / X 0 , X 0/Z 0 X 0 p 0 q 0 … PF = (QN U {p 0, pf}, ∑, P N U {X 0}, δF, p 0, X 0, {pf}) , X 0/ X 0 pf X 0 19
Contoh: Kurung Berpasangan “(” “)” PN: ( {q 0}, {(, )}, {Z 0, Z 1}, δN, q 0, Z 0 ) Pf : ( {p 0, q 0 , pf}, {(, )}, {X 0, Z 1}, δf, p 0, X 0 , pf) δN: δN(q 0, (, Z 0) = { (q 0, Z 1 Z 0) } δN(q 0, (, Z 1) = { (q 0, Z 1 Z 1) } δf : δf(p 0, , X 0) = { (q 0, Z 0) } δf(q 0, (, Z 0) = { (q 0, Z 1 Z 0) } δf(q 0, (, Z 1) = { (q 0, Z 1 Z 1) } δf(q 0, ), Z 1) = { (q 0, ) } δf(q 0, , Z 0) = { (q 0, ) } δf(p 0, , X 0) = { (pf, X 0 ) } δN(q 0, ), Z 1) = { (q 0, ) } δN(q 0, , Z 0) = { (q 0, ) } (, Z 0 /Z 1 Z 0 (, Z 1 /Z 1 Z 1 ), Z 1 / , Z 0 / start (, Z 0/Z 1 Z 0 (, Z 1/Z 1 Z 1 ), Z 1/ , Z 0/ start q 0 Accept by empty stack p 0 , X /Z X 0 0 0 q 0 , X / X 0 Accept by final state 0 pf 20
Bagaimana mengubah final state PDA ke empty stack PDA? PF==> PN construction n idea: n n Kapanpun PF final state terjangkau , buat -transition baru ke end state, habiskan stack dan accept Jika PF stack habis ditengan jalan tetapi belum masuk ke final state tambah start symbol baru X 0 (yang tidak di dari PF) PN = (Q U {p 0, pe}, ∑, U {X 0}, δN, p 0, X 0) PN: New start , X 0/Z 0 X 0 p 0 q 0 … , any/ pe , any/ PF 21
22
- Slides: 20