Back to IF2224 Teori Bahasa Formal dan Otomata
Topic: Teknik Penyederhanaan (Simplification) CFG
Questions/Cues
Mengapa perlu disederhanakan?
Urutan Pengerjaan (CRITICAL)
1. Simbol Useless
Generating vs Reachable
Algoritma Pencarian Generating
Algoritma Pencarian Reachable
2. Produksi Epsilon ()
Definisi Nullable Variable
Algoritma Pencarian Nullable
Cara Substitusi Produksi
3. Produksi Unit
Masalah Unit Pair
Algoritma Unit Pair
Teknik Penghapusan
Reference Points
Slide-13_2025_Properti CFL.pdf (Hal 6-21) - Sumber Utama Algoritma
Bab 7 Sifat2 CFG.pdf (Hal 4-12)
Slide-15_2025_CNF.pdf (Hal 9)
1. Urutan Pengerjaan (The Golden Rule)
Dalam menyederhanakan tata bahasa, urutan eksekusi algoritma sangat krusial. Jika urutan salah, masalah yang sudah dihapus bisa muncul kembali.
Urutan Wajib:
Eliminasi -Productions (Hilangkan variabel yang bisa jadi kosong).
Eliminasi Unit Productions (Hilangkan oper-operan variabel ).
Eliminasi Useless Symbols (Bersihkan sampah sisa).
Sub-urutan: Cek Generating dulu, baru cek Reachable.
2. Eliminasi Simbol Useless (Sampah)
Simbol dianggap berguna (useful) HANYA jika memenuhi dua syarat sekaligus: Generating (bisa menghasilkan string) DAN Reachable (bisa diakses dari start).
A. Tahap 1: Generating Symbols ()
Simbol disebut generating jika (terminal string).
Algoritma Pencarian:
Basis: Semua simbol Terminal () otomatis masuk himpunan .
Induksi: Jika ada produksi dimana semua simbol dalam string SUDAH ada di , maka masukkan ke .
Ulangi induksi sampai tidak ada penambahan baru.
Hapus semua variabel yang TIDAK ada di beserta produksi yang melibatkannya.
Contoh:
Basis: generating.
Langkah 1: (body generating), jadi masuk. Set: .
Langkah 2: (body generating), jadi masuk. Set: .
Variabel tidak pernah masuk karena tidak punya produksi menuju terminal. dihapus.
B. Tahap 2: Reachable Symbols ()
Simbol disebut reachable jika .
Algoritma Pencarian:
Basis: Start Symbol () otomatis masuk .
Induksi: Untuk setiap variabel yang sudah ada di , cari semua produksinya . Masukkan semua simbol di body () ke dalam .
Ulangi sampai jenuh.
Hapus semua simbol yang TIDAK ada di .
Penting: Lakukan tahap Generating dulu, baru Reachable. Jika dibalik, penghapusan simbol generating bisa menyebabkan simbol lain menjadi tidak reachable (kerja dua kali).
3. Eliminasi -Productions (Nullable)
Tujuan: Menghapus aturan tanpa mengubah bahasa (kecuali string kosong itu sendiri).
Langkah 1: Cari Nullable Variables ()
Variabel disebut nullable jika .
Algoritma:
Basis: Jika ada produksi langsung , maka adalah nullable.
Induksi: Jika ada produksi dan SEMUA adalah nullable, maka juga nullable.
Contoh:
Basis: nullable.
Induksi: (A dan B nullable), maka juga nullable.
Langkah 2: Konstruksi Produksi Baru
Untuk setiap produksi :
Identifikasi posisi simbol-simbol nullable di body.
Buat variasi produksi dengan menghadirkan atau menghilangkan simbol nullable tersebut dalam segala kombinasi.
Hapus produksi asli .
Contoh Kasus:
, dimana nullable.
Kombinasi:
hadir, hadir:
hadir, hilang:
hilang, hadir:
hilang, hilang: (Jangan dimasukkan jika tujuan kita menghapus ).
Hasil: .
4. Eliminasi Unit Productions
Unit production adalah aturan bentuk (satu variabel ke satu variabel). Ini boros langkah.
Algoritma Unit Pairs
Kita mencari pasangan yang berarti ” bisa berubah menjadi lewat serangkaian unit production”.
Basis: adalah unit pair untuk semua variabel.
Induksi: Jika adalah unit pair, dan ada produksi unit , maka tambahkan sebagai unit pair.
Contoh:
Unit Pairs:
(Basis)
(karena )
(karena )
(Transitif: )
Langkah Penghapusan
Untuk setiap unit pair , cari aturan non-unit milik (misal ).
Tambahkan aturan ke grammar.
Hapus semua aturan unit asli ().
Hasil Contoh:
Pasangan berarti mewarisi aturan non-unit milik .
(non-unit), maka tambahkan .
Hasil akhir: punya aturan langsung ke terminal, rantai putus.
Penyederhanaan CFG adalah proses sistematis yang wajib dilakukan sebelum konversi ke bentuk normal. Proses ini terdiri dari tiga algoritma utama yang harus dijalankan berurutan: (1) Eliminasi dengan mengidentifikasi variabel nullable dan mensubstitusi kehadirannya; (2) Eliminasi Unit dengan melacak unit pairs (pasangan pewarisan) dan menyalin body non-unit ke variabel leluhur; dan (3) Eliminasi Useless dengan menyaring simbol yang generating (bisa jadi terminal) terlebih dahulu, baru menyaring yang reachable (bisa diakses). Ketidakpatuhan pada urutan ini dapat menyebabkan ketidakefisienan atau kesalahan pada grammar hasil.