Session 10 Context-free grammar Theory of Language and Automata (KOM208) Credits: 3(3-0)
TIK, Subtopik dan Waktu Penyajian Tinjauan Instruksional Khusus: Mahasiswa akan dapat menjelaskan tata bahasa dan bahasa bebas konteks. Subtopik: Definisi dari tata bahasa bebas konteks Penurunan menggunakan tata bahasa Bahasa dari sebuah tata bahasa Waktu penyajian: 1 x 150 menit
Pendahuluan (1) Grammar merupakan alat untuk menjelaskan dan menganalisis bahasa. Aplikasinya: CFG memiliki peranan penting dalam teknologi kompilator sejak tahun 1960-an. CFG juga telah digunakan untuk menjelaskan format dokumen, menggunakan document-type definition (DTD) yang digunakan dalam komunitas XML (extensible markup language) untuk pertukaran informasi pada web.
Pendahuluan (2) Contoh, misal = {0,1}. Bahasa Lpal dari polindrom-polindrom pada didefinisikan secara rekursif sebagai berikut: Basis: , 0, 1 adalah polindrom. Induksi : Jika w adalah sebuah polindrom, begitu juga 0w0 dan 1w1. Tidak ada string lain dalam Lpal selain string yang diperoleh dari basis dan induksi.
Pendahuluan (3) CFG adalah sebuah notasi formal untuk menyatakan definisi rekursif dari bahasa. Sebuah grammar terdiri dari satu atau lebih variabel yang merupakan kelas-kelas dari string yaitu bahasa. Dalam contoh bahasa Lpal, terdapat hanya satu variabel p yang menyatakan himpunan dari polindrom-polindrom yaitu kelas-kelas dari string-string yang membentuk bahasa Lpal. Terdapat aturan-aturan yang menyatakan bagaimana string dalam setiap kelas dikonstruksi. Konstruksi dapat menggunakan simbol-simbol dari alphabet, string yang diketahui ada dalam satu kelas tertentu atau keduanya.
Contoh 1 CFG untuk polindrom adalah P P 0 P 1 P 0P0 P 1P1
Definisi CFG (1) Komponen-komponen dalam deskripsi gramatikal dari sebuah bahasa adalah sebagai berikut: Himpunan berhingga dari simbol yang membentuk string dari bahasa yang didefinisikan. Alphabet ini dinamakan terminal-terminal atau simbol-simbol terminal. Dalam Contoh 1, simbol terminal adalah 0 dan 1. Himpunan berhingga dari variabel-variabel. Variabel-variabel tersebut dinamakan nonterminal atau kategori syntactic. Setiap variabel menyatakan sebuah bahasa. Dalam Contoh 1, hanya terdapat 1 variabel, yaitu P, yang menyatakan kelas dari polindrom-polindrom pada alphabet {0,1}.
Definisi CFG (2) Salah satu dari variabel-variabel menyatakan bahasa yang sedang didefinisikan. Variabel tersebut dinamakan start symbol. Variabel-variabel lain menyatakan kelas-kelas pembantu dari string-string yang digunakan untuk mendefinisikan bahasa dari start symbol. Dalam Contoh1, hanya terdapat 1 variabel, yaitu P, yang dinamakan start symbol.
Definisi CFG (3) Himpunan berhingga dari produksi-produksi atau aturan-aturan yang menyatakan definisi rekursif dari sebuah bahasa. Setiap produksi terdiri dari: Sebuah variabel yang didefinisikan (secara parsial) oleh produksi. Variabel ini sering kali dinamakan head dari produksi. Simbol produksi Sebuah string dari nol atau lebih terminal dan variabel. String ini dinamakan body dari produksi, yang menyatakan salah satu cara untuk membentuk string dalam bahasa dari variabel dari head. Terminal-terminal tidak diubah dan setiap variabel dari body disubstitusi dengan string yang diketahui dalam bahasa dari variabel tersebut. Dalam Contoh 1 terdapat 5 produksi.
Komponen CFG Keempat komponen membentuk sebuah CFG atau hanya grammar, notasinya adalah G = (V, T, P, S), dengan V : Himpunan variabel-variabel T : Terminal P : Himpunan produksi S : Start symbol.
Contoh 2 Grammar Gpal untuk polindrom-polindrom dinyatakan oleh Gpal = ({P}, {0,1}, A, P) dengan A adalah himpunan dari 5 produksi seperti dalam Contoh 1
Contoh 3 Sebuah CFG menyatakan ekspresi dalam bahasa pemrograman, dengan ketentuan berikut: Ekspresi dibatasi hanya mengandung operator dan (penjumlahan dan perkalian). Argumen juga dapat berupa identifier yang dibatasi hanya untuk huruf a dan b, dan digit 0 dan 1. Setiap identifier haruslah diawali dengan a atau b dan dapat diikuti oleh string dalam {a, b, 0, 1}*.
Contoh 3 (Lanjutan) Terdapat dua variabel dalam grammar ini yaitu: E menyatakan ekspresi yang juga merupakan start symbol dan merepresentasikan bahasa dari ekspresi yang didefinisikan. I menyatakan identifier.
Contoh 3 (Lanjutan) CFG yang dimaksud memiliki produksi-produksi berikut E I E E + E E E*E E (E) I a I b I Ia I Ib I I0 I I1 Secara formal CFG yang dimaksud adalah G = ({E,I}, T, P, E) dimana T adalah himpunan simbol-simbol {+, *, (, ), a, b, 0, 1} dan P adalah himpunan produksi-produksi.
Notasi untuk produksi Produksi-produksi A1, A2, …, An dapat digantikan dengan notasi A 1| 2,|…| n Dalam Contoh 1, grammar untuk polindrom dapat ditulis sebagai P | 0 | 1 | 0P0 | 1P1.
Penurunan Menggunakan Sebuah Grammar Produksi-produksi dari sebuah CFG dapat digunakan untuk menyimpulkan bahwa string-string tertentu dalam bahasa dari sebuah variabel. Terdapat 2 pendekatan untuk inferensi tersebut, yaitu Inferensi rekursif, menggunakan aturan dari body ke head Derivation, menggunakan aturan dari head ke body
Langkah-langkah Inferensi rekursif Ambil string-string yang diketahui ada dalam bahasa dari setiap variabel dari body. Rangkai string-string tersebut, dalam urutan yang sesuai, dengan terminal-terminal muncul dalam body. Simpulkan bahwa string yang dihasilkan adalah dalam bahasa dari variabel pada head.
Langkah-langkah derivation Perluas start symbol menggunakan salah satu produksinya (yaitu gunakan salah satu produksi yang memiliki head adalah start symbol). Perluas string yang dihasilkan dengan mengganti salah satu dari variabel dengan body dari salah satu produksi-produksinya, dan seterusnya sampai diperoleh sebuah string yang mengandung terminal-terminal saja. Bahasa dari grammar adalah semua string-string dari terminal-terminal yang dapat diperoleh dengan cara ini.
Contoh 4: Inferensi rekursif Tabel berikut menyatakan proses inferensi menggunakan grammar pada Contoh 3: Baris String yang diperoleh Untuk Bahasa dari Produksi yang digunakan String-string yang digunakan (i) a I 5 - (ii) b 6 (iii) b0 9 (iv) b00 (v) E 1 (vi) (vii) a + b00 2 (v), (vi) (viii) (a + b00) 4 (ix) a*(a + b00) 3 (v), (viii)
Definisi simbol relasi Anggap G = (V,T,P,S) adalah sebuah CFG. Misalkan A adalah sebuah string dari terminal-terminal dan variabel-variabel dengan A adalah sebuah variabel. Bahwa dan adalah string dalam (VT), dan A V. Misalkan A adalah sebuah produksi dari G. Maka kita katakan Jika G dimengerti, kita hanya mengatakan A .
Definisi simbol relasi (lanjutan) Perhatikan bahwa satu langkah derivation mengganti suatu variabel dalam string dengan body dari salah satu produksinya. Kita dapat memperluas hubungan untuk menyatakan 0, 1 atau banyak langkah penurunan.
Definisi untuk notasi * Notasi * menyatakan 0 atau banyak langkah dengan definisi sebagai berikut: Basis: Untuk suatu string dari terminal-terminal dan variabel-variabel kita katakan artinya suatu string menurunkan dirinya sendiri.
Definisi untuk notasi * (lanjutan) Induksi: Jika dan maka Bahwa jika dapat menjadi dengan 0 atau lebih langkah, dan satu langkah lagi mengambil ke , maka dapat menjadi . Dalam pernyataan lain, notasi berarti bahwa terdapat serangkaian string-string 1,2,..., n, untuk n≥1 sedemikian sehingga = 1 = n Untuk i = 1, 2, ... , n1, diperoleh i i +1.
Contoh 5 Tunjukkan bahwa a*(a+b00) adalah dalam bahasa dari variabel E pada Contoh 3. Berikut adalah salah satu penurunan tersebut : E E*E I*E a*E a*(E) a*(E+E) a*(I+E) a*(a+E) a*(a+I) a*(a+I0) a*(a+I00) a*(a+b00)
Notasi * Notasi * digunakan untuk menyingkat penurunan. Dari basis bisa diperoleh E * E Penggunaan berulang bagian induksi menghasilkan E * E*E E * I*E dan seterusnya sampai diperoleh E * a*(a+b00)
Leftmost dan Rightmost Derivation Leftmost derivation pada setiap langkah digantikan leftmost variable dengan salah satu dari body-body produksinya. Notasi: lm untuk satu langkah dan *lm untuk banyak langkah. Righmost derivation, rightmost variable diganti oleh salah satu dari body-nya. Notasi: rm untuk satu langkah dan *rm untuk banyak langkah.
Contoh 6 Penurunan dari Contoh 5 merupakan leftmost derivation E lm E*E lmI*E lm a*E lm a*(E) lm a*(E+E) lm a*(I+E) lm a*(a+E) lm a*(a+I) lm a*(a+I0) lm a*(a+I00) lm a*(a+b00) Secara singkat dapat dinyatakan E *lm a*(a+b00).
Contoh 6 (lanjutan) Sedangkan rightmost derivation a*(a+b00): E rm E*E rm E*(E) rm E*(E+E) rm E*(E+I) rm E*(E+I0) rm E*(E+I00) rm E*(E+b00) rm E*(I+b00) rm E*(a+b00) rm I*(a+b00) rm a*(a+b00) Secara singkat dapat dinyatakan E *rm a*(a+b00).
Leftmost atau rightmost derivation Baik menggunakan leftmost atau rightmost derivation: “jika w adalah terminal string dan A adalah variabel maka A * w jika dan hanya jika A *lm w dan A * w jika dan hanya jika A *rm w”.
Bahasa dari Sebuah Grammar Jika G = (V,T,P,S) adalah sebuah CFG, bahasa dari G dinotasikan L(G) adalah himpunan dari string-string terminal yang memiliki penurunan dari start symbol. Bahwa L(G) = {w dalam T* | S * w} Jika sebuah bahasa L adalah bahasa dari CFG, maka L dikatakan CFL (Context Free Language). Sebagai contoh, himpunan dari polindrom-polindrom adalah CFL (Bukti dapat dilihat pada buku rujukan).
Bentuk-Bentuk Sentential Penurunan dari start symbol menghasilkan string-string yang memiliki aturan khusus dinamakan bentuk-bentuk sentential. Bahwa, jika G = (V,T,P,S) adalah sebuah CFG, maka string dalam (VT)* sedemikian sehingga s * adalah bentuk sentential Jika S *lm maka adalah bentuk left sentential Jika S *rm maka adalah bentuk right sentential Bahasa L(G) adalah bentuk-bentuk sentential yang ada dalam T*; yaitu hanya terdiri dari terminal
Contoh 7 Dari Contoh 3: E*(I+E) adalah sebuah bentuk sentential karena terdapat sebuah penurunan E E*E E*(E) E*(E+E) E*(I+E) Contoh bentuk left sentential adalah a*E, karena terdapat penurunan berikut E lm E*E lm I*E lm a*E Contoh bentuk right sentential adalah E*(E+E), karena terdapat penuruan berikut E rm E*E rm E*(E) rm E*(E+E)
Daftar Pustaka John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman. 2001. Introduction to Automata Theory, Languange, and Computation. Edisi ke-2. Addison-Wesley