Back to IF2224 Teori Bahasa Formal dan Otomata
Ekuivalensi PDA & CFG (Bagian 1: Konversi CFG ke PDA)
Questions/Cues
Apa hubungan CFG & PDA?
Apa tujuan konversi CFG PDA?
Apa ide utama di balik konversi ini?
Bagaimana PDA mensimulasikan derivasi?
Bagaimana jika top stack Variabel?
Bagaimana jika top stack Terminal?
Apa konstruksi formal ?
Transisi Tipe 1 ()
Transisi Tipe 2 ()
Teorema 6.13
Reference Points
- Slide 12_2023_Equivalence PDA and CFG.pdf (hlm. 2-9)
Hubungan Fundamental CFG & PDA
Teorema inti dari bab ini adalah:
Sebuah bahasa adalah Context-Free Language (CFL) jika dan hanya jika bahasa tersebut diterima oleh sebuah Pushdown Automata (PDA).
Ini berarti:
Setiap bahasa yang bisa dibangkitkan oleh CFG, pasti bisa dikenali oleh PDA.
Setiap bahasa yang bisa dikenali oleh PDA, pasti bisa dibangkitkan oleh CFG.
Karena kita sudah tahu dari materi sebelumnya bahwa PDA (by final state) PDA (by empty stack), maka kita hanya perlu membuktikan:
CFG PDA (by empty stack).
Catatan ini berfokus pada arah pertama: CFG PDA.
Tujuan: Konversi CFG PDA
Diberikan sebuah CFG , kita ingin membuat sebuah PDA yang menerima bahasa yang sama, . Kita akan menggunakan metode acceptance by empty stack.
Tujuannya: Membuktikan bahwa .
Ide Utama: Simulasi Leftmost Derivation
Ide utamanya adalah membuat PDA yang mensimulasikan leftmost derivation () dari grammar .
Stack PDA akan digunakan untuk menyimpan sentential form (bentuk kalimat) dari proses derivasi. Sentential form adalah string yang berisi campuran Variabel dan Terminal.
Top (puncak) stack akan selalu mewakili simbol paling kiri dari sentential form yang tersisa.
Bagaimana PDA Mensimulasikan Derivasi?
PDA akan bekerja sebagai berikut:
Jika top stack adalah Variabel (misal ):
PDA secara non-deterministik akan memilih salah satu aturan produksi untuk dari grammar (misal ).
PDA akan POP dari stack.
PDA akan PUSH (string isi aturan) ke stack.
Ini semua terjadi dalam satu transisi spontan (membaca input ).
Jika top stack adalah Terminal (misal ):
PDA harus mencocokkan simbol ini dengan string input.
PDA akan membaca simbol input berikutnya.
Jika simbol input = (cocok): PDA akan POP dari stack dan melanjutkan.
Jika simbol input (tidak cocok): Komputasi di jalur non-deterministik ini “mati” (gagal).
Kondisi Penerimaan (Acceptance):
Jika di akhir proses, semua input telah habis dibaca DAN stack menjadi kosong, berarti string input tersebut berhasil diderivasi dari simbol , sehingga string tersebut diterima.
Konstruksi Formal
Diberikan , kita definisikan PDA sebagai:
State : Hanya punya satu state, yaitu .
Alfabet Input : Adalah himpunan terminal , yaitu .
Alfabet Stack : Adalah gabungan Variabel dan Terminal , yaitu .
Fungsi Transisi : Didefinisikan dalam 2 tipe (lihat di bawah).
Start State : Adalah .
Start Symbol : Adalah start symbol grammar, yaitu .
Transisi Tipe 1: Ekspansi Variabel
Untuk setiap Variabel , kita tambahkan transisi untuk setiap aturan produksinya.
Jika adalah aturan produksi di , maka:
Artinya: Di state , tanpa membaca input (), jika top stack adalah , ganti dengan (POP , PUSH ). Ini adalah langkah “derivasi”.
Transisi Tipe 2: Pencocokan Terminal
Untuk setiap Terminal , kita tambahkan transisi pencocokan.
Artinya: Di state , jika input adalah dan top stack adalah , maka POP dari stack (ganti dengan ) dan lanjut. Ini adalah langkah “pencocokan”.
Teorema 6.13
Jika dibuat dari CFG dengan metode di atas, maka .
Ini membuktikan bahwa untuk setiap CFG, ada PDA (by empty stack) yang ekuivalen.
Setiap Context-Free Grammar (CFG) dapat diubah menjadi Pushdown Automata (PDA) yang ekuivalen yang menerima bahasa yang sama melalui empty stack. PDA () ini bekerja dengan hanya satu state dan secara langsung mensimulasikan leftmost derivation dari grammar. PDA menggunakan transisi untuk mengganti Variabel di top stack dengan isi aturannya (seperti langkah derivasi), dan menggunakan transisi input untuk mencocokkan dan menghapus Terminal di top stack dengan simbol input (langkah pencocokan). String diterima jika seluruh input habis dibaca dan stack menjadi kosong, yang membuktikan bahwa string tersebut dapat diderivasi dari start symbol .
Additional Information
Penting: Urutan PUSH Balik (Reverse Order)
Saat kita bilang “PUSH ”, ada detail teknis yang sangat penting. Jika aturan produksinya adalah , stack bekerja dengan basis LIFO (Last-In, First-Out).
Agar (simbol paling kiri) berada di puncak stack dan diproses terlebih dahulu (sesuai leftmost derivation), kita harus me-PUSH simbol-simbol tersebut dalam urutan terbalik: PUSH , lalu PUSH , …, lalu PUSH .
Dalam notasi formal , string secara konvensi berarti akan berada di puncak.
Contoh: Lacak String “01” pada
Grammar :
Konstruksi :
State: , Start Symbol:
(dari 2 aturan )
(match ‘0’)
(match ‘1’)
Lacak Komputasi (ID) untuk input “01”:
(q, 01, S)(Pilih aturan . POP , PUSH . Top stack kini ‘0’)
(Baca input ‘0’, match top stack ‘0’. POP ‘0’. Top stack kini ‘S’)
(Pilih aturan . POP , PUSH . Top stack kini ‘1’)
(Baca input ‘1’, match top stack ‘1’. POP ‘1’. Top stack kini kosong)
Hasil: Input habis (), Stack kosong (). String “01” diterima.
Eksplorasi Mandiri
Coba lacak input “0011” menggunakan di atas.
Coba lacak input “011” (seharusnya ditolak). Di mana komputasinya “mati”?