Pertemuan 10 Grammar Bebas Konteks

Download Report

Transcript Pertemuan 10 Grammar Bebas Konteks

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 polindrompolindrom 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
1. P  
2. P  0
3. P  1
4. P  0P0
5. P  1P1
Definisi CFG (1)
Komponen-komponen dalam deskripsi gramatikal dari sebuah
bahasa adalah sebagai berikut:
1. Himpunan berhingga dari simbol yang membentuk string
dari bahasa yang didefinisikan.
Alphabet ini dinamakan terminal-terminal atau simbolsimbol terminal.
Dalam Contoh 1, simbol terminal adalah 0 dan 1.
2. Himpunan berhingga dari variabel-variabel. Variabelvariabel 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)
3. 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)
4.
Himpunan berhingga dari produksi-produksi atau aturanaturan 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:
1. Ekspresi dibatasi hanya mengandung operator dan
(penjumlahan dan perkalian).
2. Argumen juga dapat berupa identifier yang dibatasi
hanya untuk huruf a dan b, dan digit 0 dan 1.
3. 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:
1. E menyatakan ekspresi yang juga merupakan
start symbol dan merepresentasikan bahasa
dari ekspresi yang didefinisikan.
2. I menyatakan identifier.
Contoh 3 (Lanjutan)
CFG yang dimaksud memiliki produksi-produksi berikut
1. E  I
Secara formal CFG yang dimaksud
2. E  E + E
adalah
3. E  E*E
4. E (E)
G = ({E,I}, T, P, E)
5. I  a
dimana T adalah himpunan simbol6. I  b
simbol {+, *, (, ), a, b, 0, 1} dan P
7. I  Ia
adalah himpunan produksi-produksi.
8. I  Ib
9. I  I0
10.I  I1
Notasi untuk produksi
• Produksi-produksi A1, A2, …, An
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 stringstring tertentu dalam bahasa dari sebuah
variabel.
• Terdapat 2 pendekatan untuk inferensi tersebut,
yaitu
1. Inferensi rekursif, menggunakan aturan dari body ke
head
2. Derivation, menggunakan aturan dari head ke body
Langkah-langkah Inferensi rekursif
1. Ambil string-string yang diketahui ada dalam
bahasa dari setiap variabel dari body.
2. Rangkai string-string tersebut, dalam urutan yang
sesuai, dengan terminal-terminal muncul dalam
body.
3. Simpulkan bahwa string yang dihasilkan adalah
dalam bahasa dari variabel pada head.
Langkah-langkah derivation
1. Perluas start symbol menggunakan salah satu
produksinya (yaitu gunakan salah satu produksi yang
memiliki head adalah start symbol).
2. Perluas string yang dihasilkan dengan mengganti salah
satu dari variabel dengan body dari salah satu produksiproduksinya, dan seterusnya sampai diperoleh sebuah
string yang mengandung terminal-terminal saja.
3. 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
I
6
-
(iii)
b0
I
9
(ii)
(iv)
b00
I
9
(iii)
(v)
a
E
1
(i)
(vi)
b00
E
1
(iv)
(vii)
a + b00
E
2
(v), (vi)
(viii)
(a + b00)
E
4
(vii)
(ix)
a*(a + b00)
E
3
(v), (viii)
Definisi simbol relasi 
• Anggap G = (V,T,P,S) adalah sebuah CFG.
• Misalkan A adalah sebuah string dari terminalterminal dan variabel-variabel dengan A adalah
sebuah variabel.
Bahwa  dan  adalah string dalam (VT), dan
A  V.
• Misalkan A   adalah sebuah produksi dari G.
Maka kita katakan
A  
G
•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 
 
G
artinya suatu string menurunkan dirinya
sendiri.
Definisi untuk notasi * (lanjutan)

Induksi:


• Jika    dan    maka  
G
G
G
Bahwa jika  dapat menjadi  dengan 0 atau lebih
langkah, dan satu langkah lagi mengambil  ke , maka 
dapat menjadi .


• Dalam pernyataan lain, notasi  
G
berarti bahwa terdapat serangkaian string-string
1,2,..., n, untuk n≥1 sedemikian sehingga
 = 1
 = n
Untuk i = 1, 2, ... , n1, 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 (VT)* 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