Pertemuan 12 Pushdown Automata

Download Report

Transcript Pertemuan 12 Pushdown Automata

Session 12
Pushdown Automata
Theory of Languages and Automata
(KOM208)
Credits: 3(3-0)
TIK, Subtopik dan Waktu Penyajian
• Tinjauan Instruksional Khusus:
– Mahasiswa akan dapat menjelaskan cara kerja
Pushdown Automata.
• Subtopik:
– Definisi formal Pushdown Automata
– Notasi grafis dari Pushdown Automata
– Bahasa dari Pushdown Automata
– Ekuivalensi Pushdown Automata dan tata bahasa bebas
konteks
– Deterministic Pushdown Automata
• Waktu penyajian: 1 x 150 menit
Pendahuluan (1)
• Bahasa bebas konteks memiliki bentuk automata
yang mendefinisikannya.
• Automata ini dinamakan Pushdown Automata
(PDA)
• PDA merupakan perluasan dari nondeterministic
finite automaton dengan transisi , yang
merupakan suatu cara untuk mendefinisikan
bahasa regular.
• PDA secara esensial merupakan -NFA dengan
tambahan stack.
Pendahuluan (2)
• Stack tersebut dapat dibaca, di-push, dan di-pop hanya
pada bagian atas dari stack (top stack).
• Stack adalah struktur data yang dapat digunakan untuk
menyimpan sejumlah simbol.
• Stack hanya bisa diakses dengan aturan LIFO (Last In First
Out).
• Penambahan dan pengambilan elemen dalam stack
melalui satu tempat, yaitu top stack.
• Pengambilan elemen dari stack dinamakan operasi pop.
• Pemasukan elemen ke dalam stack dinamakan operasi
push.
Komponen-komponen dalam PDA
Input
Finite State
Control
Accept/
Reject
Stack
• Finite-state contol membaca input 1 simbol pada
suatu waktu
Definisi Formal PDA (1)
• PDA melibatkan tujuh komponen. Spesifikasi dari
PDA dituliskan sebagai berikut:
P = (Q, , , , q0, Z0, F)
• Komponen-komponen dari PDA adalah:
– Q: Himpunan berhingga dari state, seperti dalam FA.
– : Himpunan berhingga dari simbol-simbol input,
seperti dalam FA.
– : Himpunan berhingga dari alphabet stack. 
merupakan himpunan dari simbol-simbol yang di-push
ke dalam stack.
Definisi Formal PDA (2) – fungsi transisi ()
• Seperti dalam FA,  menentukan perilaku
dari otomata.
•  memiliki 3 argumen, (q, a, X), dimana:
•q adalah sebuah state dalam Q
•a adalah sebuah simbol input dalam  atau a = 
(string kosong), yang asumsikan bukan merupakan
sebuah simbol input.
•X adalah sebuah symbol stack, X  
Definisi Formal PDA (3) – fungsi transisi
• Output dari  adalah sebuah himpunan berhingga
dari pasangan (p, ),
– p: state baru,
–  : string dari simbol-simbol stack yang menggantikan X
pada top stack.
• Sebagai contoh:
– jika  = , maka stack di-pop,
– jika  = X, maka stack tidak berubah
– jika  = YZ, maka X diganti kan oleh Z, dan Y di-push ke
dalam stack.
Definisi Formal PDA (4)
• q0: start state. PDA berada pada start state
sebelum membuat transisi.
• Z0: start symbol. Pada awalnya, stack dari
PDA terdiri dari start symbol.
• F: himpunan accepting state atau final state.
Contoh 1
• Diberikan bahasa Lwwr:
Lwwr = {wwR | w adalah dalam (0 + 1)*}
• Lwwr dirujuk sebagai w-w-reversed, merupakan
palindrom-palindrom dengan genap pada alphabet
{0, 1}.
• Lwwr merupakan CFL String-string dalam bahasa ini
di-generate oleh grammar berikut:
P
P  0P0
P  1P1
Contoh 1 (lanjutan)
• Komponen PDA:
Q = {q0, q1, q2}
 = {0, 1}
 ={0, 1, Z0}
Start state: q0.
Start symbol: Z0
Accepting state: {q2}
Contoh 1 (lanjutan)
Fungsi transisi ():
• (q0, 0, Z0) = {(q0, 0Z0)} dan
(q0, 1, Z0) = {(q0, 1Z0)}
– Pada saat awal PDA berada pada state q0, dan
melihat start symbol Z0 pada top stack.
– Kemudian PDA membaca input pertama, dan
memasukan (push) input tersebut ke dalam
stack.
Contoh 1 (lanjutan)
• (q0, 0, 0) = {(q0, 00)}, (q0, 0, 1) = {(q0, 01)},
(q0, 1, 0) = {(q0, 10)}, (q0, 1, 1) = {(q0, 11)}
– PDA berada pada state q0, dan membaca input,
dan memasukkan (push) input-input ke dalam
top stack dan meninggalkan top stack
sebelumnya.
• (q0, , Z0) = {(q1, Z0)}, (q0, , 0) = {(q1, 0)},
(q0, , 1) = {(q1, 1)}
– PDA menuju state q1 dari state q0 (pada input ),
meninggalkan simbol apapun pada top stack.
Contoh 1 (lanjutan)
• (q1, 0, 0) = {(q1, )}, (q1, 1, 1) = {(q1, )}
– Dalam state q1, dapat dilakukan pencocokan
simbol-simbol input terhadap simbol-simbol
pada top stack, dan mem-pop top stack ketika
simbol-simbol sesuai.
• (q1, , Z0) = {(q2, Z0)}
– Input dengan bentuk wwR telah ditemukan.
PDA menuju state q2, dan menerima input.
Diagram transisi untuk PDA
• terdiri dari:
– Node-node yang berkaitan dengan state-state
dari PDA
– Anak panah dengan label Start yang
menunjukkan start state, state dengan
lingkaran ganda adalah accepting state.
– Arc yang berkaitan dengan transisi dari PDA.
•Sebuah arch diberi label a,X/ dari state q ke state
p yang berarti bahwa (q, a, X) mengandung
pasangan (p, ).
•Label dari arc menyatakan input apa yang
digunakan, dan juga memberikan simbol lama dan
baru dari top stack.
Diagram transisi untuk Contoh 1
0, Z0/ 0 Z0
1, Z0/ 1 Z0
0, 0/ 0 0
0, 1/ 0 1
1, 0/ 1 0
1, 1/ 1 1
start
q0
 , Z0/ Z0
 , 0/ 0
 , 1/ 1
0, 0/ 
1, 1/ 
q1
 , Z0/ Z0
q2
Deskripsi Instantaneous dari PDA (1)
• Konfigurasi PDA dinyatakan dengan sebuah
triple (q, w, ), yang dinamakan deskripsi
instantaneous (ID) dari PDA, dimana
– q adalah state
– w adalah input sisa
–  menyatakan isi stack
Deskripsi Instantaneous dari PDA (2)
• Misalkan P = (Q, , , , q0, Z0, F) adalah sebuah
PDA. Definisikan ├p, atau ├ .
• Anggap (q, a, X) mengandung (p, ).
• Maka untuk semua string w dalam * dan 
dalam *:
(q, aw, X) ├ (p, w, )
– Bentuk ini berarti bahwa dengan membaca a (yang
dapat berupa ) dari input dan mengganti X pada top
stack dengan ,
– PDA bergerak dari state q ke state p.
– Sisa dari input adalah w. Isi stack yang ada di bawah
top stack, yaitu , tidak terpengaruh oleh aksi PDA.
Deskripsi Instantaneous dari PDA (3)
• Notasi ├p*, atau ├* digunakan untuk menyatakan
nol atau lebih pergerakan dari PDA, bahwa:
– Basis: I ├* I, untuk ID I.
– Induksi: I ├* J jika terdapat ID K sedemikian
sehingga I ├ K dan K ├* J.
Bahwa I ├* J jika terdapat sebuah urutan dari
ID-ID K1, K2, K3, ..., Kn sedemikian sehingga I =
K1, J = Kn, dan untuk semua i = 1, 2, ..., n1,
diperoleh Ki├ Ki+1.
Pergerakan PDA pada Contoh 1
• Akan dilihat pergerakan PDA jika diberikan
input 1111.
• Karena start state adalah q0, dan start
symbol adalah Z0, maka ID awal adalah (q0,
1111, Z0).
• ID-ID dari PDA pada input 1111 ditunjukkan
dalam gambar berikut:
(q0, 1111, Z0)
(q0, 111, 1Z0)
(q1, 1111, Z0)
(q2, 1111, Z0)
(q0, 11, 11Z0)
(q1, 111, 1Z0)
(q1, 11, Z0)
(q0, 1, 111Z0)
(q1, 11, 11Z0)
(q2, 11, Z0)
(q0, , 1111Z0)
(q1, 1, 111Z0)
(q1, 1, 1Z0)
(q1,  , 11Z0)
(q1,  , Z0)
(q1,  , 1111Z0)
(q2,  , Z0)
Pergerakan PDA pada Contoh 1
• Dari ID awal terdapat dua pilihan pergerakan
yaitu
– (q0, 111, 1Z0) menyatakan sebuah 1 dibuang
dari input dan di-push ke dalam stack.
– (q1, 1111, Z0) menyatakan tanpa membaca
input, PDA menuju state q1, menuju ke ID (q1,
1111, Z0).
•Selanjutnya PDA menuju ID (q2, 1111, Z0). ID (q2,
1111, Z0) bukan merupakan accepting ID, karena
input tidak seluruhnya dibaca.
Pergerakan PDA pada Contoh 1
• Urutan ID yang benar untuk PDA pada
Contoh 1 untuk input 1111 adalah
(q0, 1111, Z0) ├ (q0, 111, 1Z0) ├ (q0, 11, 11Z0) ├
(q1, 11, 11Z0) ├ (q1, 1, 1Z0) ├ (q1, , Z0)
├ (q2, , Z0)
Prinsip yang penting tentang ID dan
transisinya:
1. Jika sebuah urutan ID-ID (komputasi) adalah legal untuk
PDA P, maka komputasi yang dibentuk dengan
penambahan string input tambahan yang sama ke ekhir
dari input pada setiap ID juga legal.
2. Jika sebuah komputasi adalah legal untuk PDA P, maka
komputasi yang dibentuk oleh penambahan simbol-simbol
stack tambahan yang sama juga legal.
3. Jika sebuah komputasi adalah legal untuk PDA P, dan
ujung dari input tidak dibaca, maka ujung tersebut dapat
dibuang dari input dalam setiap ID, dan komputasi yang
dihasilkan masih legal.
Teorema
• Jika P = (Q, , , , q0, Z0, F) adalah PDA,
dan (q, x, ) ├p* (p, y, ), maka untuk string
w dalam * dan  dalam *, adalah benar
bahwa
(q, xw, ) ├p* (p, yw, ).
• Jika P = (Q, , , , q0, Z0, F) adalah PDA,
dan (q, xw, ) ├ * (p, yw, ) maka juga benar
bahwa (q, x, ) ├ * (p, y, ).
Bahasa dari Sebuah PDA
• Terdapat dua pendekatan untuk mendefinisikan
bahasa dari PDA, yaitu:
– Acceptance by final state
– Acceptance by empty stack
• Kedua pendekatan tersebut adalah ekuivalen
sebuah bahasa L memiliki PDA yang menerima
bahasa tersebut dengan final state jhj memiliki
PDA yang menerima bahasa tersebut dengan stack
kosong.
Acceptance by Final State
• Jika P = (Q, , , , q0, Z0, F) adalah PDA.
Maka L(P), bahasa yang diterima oleh P
dengan final state, adalah
{w | (q0, w, Z0) ├p* (q, , )}
untuk suatu state q dalam F dan suatu
string stack .
Contoh 1 (lanjutan)
• Diberikan bahasa Lwwr :
Lwwr = {wwR |w adalah dalam (0+1)*}
• Lwwr dirujuk sebagai w-w-reversed, merupakan
palindrom-palindrom dengan genap pada
alphabet {0, 1}. Lwwr merupakan CFL String-string
dalam bahasa ini di-generate oleh grammar
berikut:
P
P  0P0
P  1P1
• PDA P menerima string x dengan final state jika
dan hanya jika x berbentuk wwR.
Bukti (if):
• (If) Jika x = wwR, perhatikan bahwa
(q0, wwR, Z0) ├* (q0, wR, wRZ0) ├ (q1, wR,
wRZ0) ├* (q1, , Z0) ├ (q2, , Z0)
dengan demikian x = wwR diterima dengan
final state.
Bukti (only if):
• Perhatikan bahwa satu-satunya cara memasuki
accepting state q2 adalah berada dalam state q1,
dan memiliki Z0 pada top stack.
• Komputasi yang diterima dari P berawal dari state
q0, membuat satu transisi ke q1, dan tidak pernah
kembali ke q0.
• Dengan demikian, perlu ditentukan kondisi pada x
sedemikian sehingga (q0, x, Z0) ├* (q1, , Z0); x
diterima P dengan final state.
• Pernyataan berikut akan ditunjukkan dengan
menggunakan induksi pada |x|: jika (q0, x, ) ├*
(q1, , ) maka x berbentuk wwR.
Bukti (only if):
Basis: Jika x = , maka x adalah berbentuk wwR (dengan
w = ). Dengan demikian konklusi adalah benar.
• Induksi: Anggap x = a1a2...an untuk n  0. Terdapat dua
pergerakan yang dibuat P dari ID (q0, x, ):
1. (q0, x, ) ├ (q1, x, ).
• P hanya dapat mem-pop stack ketika PDA berada
dalam state q1.
• P harus mem-pop stack dengan setiap simbol input
dibaca oleh P, dan |x| > 0.
• Dengan demikian jika (q1, x, ) ├* (q1, , ), maka ||
< | |.
•
Bukti (only if):
2. (q0, a1a2...an, ) ├ (q0, a2...an, a1).
Satu-satunya cara sebuah urutan dari
pergerakan dapat berakhir di (q1, , ) adalah
jika pergerakan terakhir adalah sebuah pop: (q1,
an, a1) ├ (q1, , ). Dalam kasus ini, haruslah
dipenuhi bahwa a1 = an. Diketahui bahwa
(q0, a2...an, a1) ├* (q1, an, a1).
Bukti (only if):
• Berdasarkan Teorema:
– Jika P = (Q, , , , q0, Z0, F) adalah PDA, dan (q, xw, )
├ (p, yw, ) maka juga benar bahwa (q, x, ) ├ (p, y, ).
• simbol an dapat dibuang dari ujung input karena
tidak digunakan. Dengan demikian
(q0, a2...an-1, a1) ├* (q1, , a1).
• Karena panjang input untuk urutan ini lebih kecil
dari n, hipotesis induksi dapat digunakan dan
diperoleh kesimpulan bahwa a2...an-1 berbentuk yyR
untuk suatu y.
• Karena x = a1yyRan, dan diketahui a1 = an,
disimpulkan bahwa w berbentuk wwR ; khususnya
w = a1y.
Acceptance by Empty Stack
• Untuk setiap PDA P = (Q, , , , q0, Z0, F),
didefinisikan
N(P) = {w | (q0, w, Z0) ├* (q, , )}
untuk suatu state q.
• Bahwa N(P) adalah himpunan input-input w
yang dapat dibaca oleh P dan pada waktu
yang sama mengosongkan stack-nya.
Contoh 2
• PDA P tidak pernah mengosongkan stacknya, sehingga N(P) = .
• Walaupun demikian, dengan modifikasi, P
dapat menerima Lwwr dengan empty stack.
• Daripada menggunakan transisi
(q1, , Z0) = {(q2, Z0)}, gunakan
(q1, , Z0) = {(q2, )}.
L(P) = N(P) = Lwwr
Hubungan pendekatan acceptance by final state dan
accepted by empty stack
• PN : PDA yang menerima bahasa L by empty stack.
• PF : PDA yang menerima bahasa L by final state.
• Hubungan kedua pendekatan untuk mendefinisikan
bahasa dari PDA, yaitu acceptance by final state dan
accepted by empty stack dinyatakan dalam teoremateorema berikut:
– Jika L = N(PN) untuk PDA PN = (Q, , , N, q0, Z0, F),
maka terdapat sebuah PDA PF sedemikian sehingga L =
L(PF).
– Misalkan L adalah L(PF) untuk PDA PF = (Q, , , F, q0,
Z0, F). Maka terdapat sebuah PDA sedemikian sehingga
L =N(PN).
Ekuivalensi PDA dan CFG
• Ketiga kelas bahasa berikut adalah kelaskelas yang sama.
1. CFL, yaitu bahasa yang didefinisikan oleh CFG
2. Bahasa yang diterima dengan final state oleh suatu
PDA.
3. Bahasa yang diterima dengan empty stack oleh
suatu PDA.
Grammar
PDA by
empty stack
PDA by
final state
Dari Grammar ke PDA
•
Misalkan G = (V, T, Q, S) adalah sebuah CFG.
Buat PDA P yang menerima L(G) dengan empty
stack sebagai berikut:
P = ({q}, T, V  T, , q, S)
Dimana fungsi transisi  didefinisikan oleh
1. Untuk setiap variabel A,
(q, , A) = {(q, ) | A   adalah sebuah produksi
dari G}
2. Untuk setiap terminal a, (q, a, a) = {(q, )}
Teorema:
Jika PDA P dikonstruksi dari CFG G dengan
konstruksi di atas, maka N(P) = L(G).
Contoh 3
• Konversikan CFG berikut ke PDA
I  a | b | Ia | Ib | I0 | I1
E  I | E + E | E * E | (E)
– Himpunan terminal dari PDA adalah {a, b, 0, 1, (,
), +, *}.
– Simbol-simbol ini beserta simbol I dan E
membentuk alphabet stack.
Contoh 3 (lanjutan)
Fungsi transisi PDA adalah:
• (q, , I) = {(q,a),(q,b),(q,Ia),(q,Ib),(q,I0),(q,I1)}
• (q, , E) = {(q,I), (q,E+E), (q,E*E), (q,(E))}
• (q, a, a) = {(q,)}; (q,b,b) = {(q,)}; (q,0,0) =
{(q,)}; (q,1,1) = {(q,)}; (q,(,( ) = {(q,)}; (q, ),) )
= {(q,)}; (q,+,+) = {(q,)}; (q,*, *) = {(q,)};
Bentuk fungsi transisi a dan b diperoleh dari
aturan 1, sedangkan bentuk fungsi transisi c
diperoleh dari aturan 2.
Konstruksi PDA dari CFG (1)
Misalkan G = (V, , S, P) adalah sebuah CFG.
Dari CFG tersebut dapat dibuat PDA P = (Q, , ,
, q0, Z0, F), yang menerima L(G) dengan final
state (L(P) = L(G)).
• Konstruksi dilakukan sebagai berikut:
1. Definisikan
•
•
–
–
–
–
Q ={q0, q1, q2}
Start state: q0
F = {q2}
 = V    {Z0}
Konstruksi PDA dari CFG (2)
2. Dalam keadaan awal, PDA mem-push Z0 pada
top stack
–
–
Jika top stack dari simbol stack adalah sutau non
terminal (misal A), top stack tersebut diganti dengan
bagian body dari produksi yang head-nya A.
Misal A  x, maka top stack diganti x.
Jika top stack dari simbol stack adalah sebuah
terminal dan jika top stack tersebut menyamai simbol
masukkan berikutnya, pop top stack tersebut.
Konstruksi PDA dari CFG (3)
3. Berdasarkan aturan tsb, dapat diperoleh 4
bentuk fungsi transisi:
– (q0, , Z0) = {(q1, Z0)}
– (q1, , A) = {(q1, x) | A x adalah sebuah
produksi dalam CFG} untuk suatu non terminal A.
– (q1, a, a) = {(q1, )} untuk setiap simbol terminal.
– (q1, , Z0) = {(q2, Z0)}.
Deterministic PDA
• Sebuah PDA P = (Q, , , , q0, Z0, F)
adalah deterministic (DPDA) jika dan hanya
jika ditemui kondisi-kondisi berikut:
1. (q, a, X) memiliki paling banyak satu anggota
untuk suatu q dalam Q, a dalam  atau a = ,
dan X dalam .
2. Jika (q, a, X) tidak kosong, untuk suatu a
dalam , maka (q, , X) haruslah kosong.
Contoh 4
• Bahasa Lwwr adalah sebuah CFL yang bukan
merupakan DPDA.
• Tetapi bahasa Lwcwr = {wcwR | w dalam (0 + 1)*}
dapat diterima oleh DPDA. DPDA yang menerima
Lwcwr (Buktikan !)
0, Z0/ 0 Z0
1, Z0/ 1 Z0
0, 0/ 0 0
0, 1/ 0 1
1, 0/ 1 0
1, 1/ 1 1
start
q0
DPDA yang
menerima Lwcwr
0, 0/ 
1, 1/ 
c , Z0/ Z0
c , 0/ 0
c , 1/ 1
q1
q2
 , Z0/ Z0
Daftar Pustaka
• John E. Hopcroft, Rajeev Motwani, Jeffrey D.
Ullman. 2001. Introduction to Automata
Theory, Languange, and Computation. Edisi
ke-2. Addison-Wesley