Back to IF2224 Teori Bahasa Formal dan Otomata

Topic

Questions/Cues

  • Apa itu CFG?

  • Komponen CFG?

  • Apa itu Derivasi?

  • Jenis Derivasi?

  • Bahasa dari Grammar?

  • Apa itu Sentential Form?

Reference Points

  • Slide 07 - Context Free Grammars and Languages.pdf

Apa itu Context-Free Grammar (CFG)?

Context-Free Grammar (CFG) adalah sebuah formalisme atau kerangka aturan yang digunakan untuk mendefinisikan sebuah bahasa bebas konteks (Context-Free Language - CFL). Secara sederhana, CFG bisa dibayangkan seperti “resep” atau “aturan tata bahasa” yang menentukan cara membentuk semua string (kalimat) yang valid dalam sebuah bahasa.

CFG jauh lebih kuat daripada Regular Expression atau Finite Automata karena mampu menangani struktur yang bersifat rekursif atau bersarang (nested), seperti tanda kurung yang berpasangan atau struktur palindrom, yang tidak bisa ditangani oleh bahasa reguler.

Contoh kegunaan:

  • Bahasa Pemrograman: Mendefinisikan sintaksis seperti struktur if-else, perulangan for, atau ekspresi aritmatika.

  • Markup Languages: Mendefinisikan struktur dokumen seperti XML atau HTML.

  • Bahasa Alami: Menganalisis struktur sintaktis kalimat.

Komponen Formal CFG: (V, T, P, S)

Sebuah CFG secara formal didefinisikan sebagai sebuah tupel 4-elemen G = (V, T, P, S):

  1. V (Variables): Himpunan terbatas dari simbol non-terminal. Ini adalah simbol-simbol abstrak yang akan “dipecah” atau diperluas lagi menjadi struktur lain. Analogi: Kategori dalam tata bahasa seperti (Kalimat), (Subjek), (Predikat).

  2. T (Terminals): Himpunan terbatas dari simbol terminal. Ini adalah elemen dasar atau “kata” aktual yang membentuk string akhir dan tidak bisa dipecah lagi. Analogi: Kata-kata seperti saya, makan, 0, 1, +, *. Himpunan V dan T tidak boleh memiliki irisan (V ∩ T = ∅).

  3. P (Productions): Himpunan terbatas dari aturan produksi. Ini adalah inti dari CFG, yang mendefinisikan bagaimana variabel dapat digantikan oleh kombinasi variabel lain dan/atau terminal. Formatnya adalah A → α, yang dibaca “A dapat menghasilkan α”, di mana A adalah sebuah variabel (anggota V) dan α adalah string yang terdiri dari simbol-simbol di (V U T)*.

  4. S (Start Symbol): Sebuah variabel khusus (anggota V) yang menjadi titik awal dari semua proses pembentukan string.

Contoh (Grammar Palindrom):

G = ({P}, {0, 1}, A, P) di mana aturan produksi A adalah:

  • P → ε (epsilon/string kosong)

  • P → 0

  • P → 1

  • P → 0P0

  • P → 1P1

Di sini: V={P}, T={0, 1}, S=P.

Proses Derivasi (Derivation)

Derivasi adalah proses sekuensial penerapan aturan produksi untuk mengubah simbol awal (Start Symbol) menjadi sebuah string terminal. Proses ini adalah cara CFG “menghasilkan” (generate) string-string dalam bahasanya.

  • Simbol : Dibaca “menghasilkan dalam satu langkah” (derives in one step). Contoh: 0P0 ⇒ 01P10 (karena ada aturan P → 1P1).

  • Simbol ⇒*: Dibaca “menghasilkan dalam nol atau lebih langkah” (derives in zero or more steps). Ini menunjukkan keseluruhan proses dari awal hingga akhir. Contoh: P ⇒* 0110.

Leftmost vs. Rightmost Derivation

Saat sebuah string mengandung lebih dari satu variabel, kita memiliki pilihan variabel mana yang akan diekspansi terlebih dahulu. Dua strategi sistematis untuk ini adalah:

  1. Leftmost Derivation (⇒lm): Pada setiap langkah, variabel paling kiri dalam string yang sedang diproses selalu dipilih untuk digantikan (diekspansi) sesuai aturan produksi.

  2. Rightmost Derivation (⇒rm): Pada setiap langkah, variabel paling kanan yang selalu dipilih untuk digantikan.

Meskipun urutan penerapannya berbeda, kedua jenis derivasi ini akan menghasilkan string terminal yang sama dan merepresentasikan struktur sintaktis yang sama (yang nantinya akan divisualisasikan oleh Parse Tree).

Bahasa dari Sebuah Grammar (L(G))

Bahasa yang didefinisikan oleh sebuah CFG G, dinotasikan sebagai L(G), adalah himpunan semua string terminal w yang dapat diturunkan dari simbol awal S.

Secara formal: L(G) = {w ∈ T* | S ⇒* w}

Ini berarti, sebuah string w dianggap valid atau “diterima” oleh grammar G jika dan hanya jika ada setidaknya satu urutan derivasi yang bisa mengubah S menjadi w.

Sentential Form

Sentential Form adalah string apa pun (bisa berupa campuran variabel dan terminal) yang dapat diturunkan dari simbol awal S.

  • Perbedaan dengan L(G): L(G) adalah himpunan sentential form yang hanya terdiri dari simbol-simbol terminal. Semua string di L(G) adalah sentential form, tetapi tidak semua sentential form adalah bagian dari L(G).

  • Left-Sentential Form: Sebuah sentential form yang dihasilkan melalui proses leftmost derivation.

  • Right-Sentential Form: Sebuah sentential form yang dihasilkan melalui proses rightmost derivation.

Contoh: dalam grammar ekspresi, E * (I + E) adalah sebuah sentential form karena bisa diturunkan dari E, tetapi bukan bagian dari L(G) karena masih mengandung variabel E dan I.

Summary

Secara esensial, Context-Free Grammar (CFG) adalah sebuah sistem formal (V, T, P, S) yang mendefinisikan sebuah bahasa (Context-Free Language) melalui proses derivasi, di mana aturan produksi digunakan secara berulang untuk mengubah simbol awal menjadi sekumpulan string terminal. Proses derivasi ini dapat dilakukan secara sistematis melalui leftmost atau rightmost derivation, dan setiap string antara yang terbentuk dalam proses ini disebut sentential form. Bahasa L(G) adalah hasil akhir dari semua kemungkinan derivasi yang valid yang hanya mengandung simbol terminal.