Anda di halaman 1dari 33

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 documenttype 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 stringstring 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
simbol-simbol terminal.
Dalam Contoh 1, simbol terminal adalah 0 dan 1.
2. 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 polindrompolindrom 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 kelaskelas 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:

4.

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
2. E E + E
Secara formal CFG yang
dimaksud adalah
3. E E*E
4. E (E)
G = ({E,I}, T, P, E)
5. I a
dimana T adalah himpunan
6. I b
simbol-simbol {+, *, (, ), a, b,
7. I Ia
0, 1} dan P adalah himpunan
8. I Ib
produksi-produksi.
9. I I0
10.I I1

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
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 terminalterminal 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 produksi-produksinya, dan
seterusnya sampai diperoleh sebuah string yang
mengandung terminal-terminal saja.
3. Bahasa dari grammar adalah semua stringstring 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
Stringyang
string yang
digunakan digunakan

(i)

(ii)

(iii)

b0

(ii)

(iv)

b00

(iii)

(v)

(i)

(vi)

b00

(iv)

(vii)

a + b00

(v), (vi)

(viii)

(a + b00)

(vii)

(ix)

a*(a +
b00)

(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 kitaA
katakan

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 terminalterminal dan variabel-variabel kita
katakan

G

artinya suatu string menurunkan dirinya


sendiri.

Definisi untuk notasi *


(lanjutan)

Induksi:

Jika
dan G
maka
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 stringstring 1,2,..., n, untuk n1 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 polindrompolindrom adalah CFL (Bukti dapat dilihat
pada buku rujukan).

Bentuk-Bentuk
Sentential
Penurunan dari start symbol menghasilkan stringstring 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. AddisonWesley

Anda mungkin juga menyukai