Professional Documents
Culture Documents
PENDAHULUAN
Tata bahasa bebas konteks dan push down automata telah banyak
memberikan bantuan pada spesifikasi dari bahasa pemrograman dan perancangan
parser, bagian penting dari kompilator. Spesifikasi formal dari bahasa
pemrograman telah mengganti deskripsi yang tidak lengkap maupun ambigu dari
bahasa. Pemahaman tentang kemampuan push down automata telah
menyederhanakan parsing. Pada mulanya pengembangan parser untuk
kompilator-kompilator terdahulu merupakan masalah yang sulit, dengan hasil
yang tidak efisien. Dengan pengetahuan tata bahasa bebas konteks perancangan
parser bukan lagi suatu masalah.
Suatu teori hanya menarik bila itu membantu dalam mencari solusi
terbaik. Tanpa penerapan, timbul pertanyaan "mengapa mempelajari teori?" Teori
memberikan konsep dan prinsip yang menolong untuk memahami 'perilaku' dari
suatu disiplin ilmu. Bidang ilmu komputer meliputi topik yang luas, dari
perancangan mesin sampai pemrograman. Di samping perbedaan yang ada,
terdapat prinsip-prinsip yang umum dipakai. Untuk mempelajari prinsip-prinsip
dasar inilah kita mengkonstruksi model abstrak dari komputer dan komputasi.
Model ini memiliki fungsi-fungsi yang penting dan umum pada perangkat keras
maupun perangkat lunak. Meskipun model tersebut terlalu sederhana untuk
diterapkan langsung pada dunia nyata, keuntungan yang diperoleh dari
mempelajarinya adalah memberikan landasan, yang mana suatu pengembangan
didasarkan. Pendekatan dengan model ini tidak hanya dilakukan pada ilmu
komputer, tetapi juga pada ilmu sains lainnya. Beberapa gagasan yang diutarakan
memiliki penerapan yang penting. Misalnya, pada perancangan digital, bahasa
pemrograman, dan kompilator.
Sebuah simbol adalah suatu entitas abstrak yang tidak kita definisikan
secara formal, seperti halnya kita tidak mendefinisikan 'titik' dan 'garis' pada
geometri. Huruf dan digit adalah contoh dari simbol yang sering dipakai. Sebuah
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Pada umumnya kita mengenal bahasa alami, seperti bahasa Inggris atau
Indonesia. Bahasa didefinisikan di dalam kamus adalah suatu sistem yang
meliputi pengekspresian gagasan, fakta, konsep, termasuk sekumpulan simbol-
simbol dan aturan untuk melakukan manipulasinya. Sebuah bahasa adalah
himpunan string-string dari simbol- simbol untuk suatu alphabet. Karena sebuah
bahasa adalah kumpulan dari string-string, kita bisa mempunyai sebuah bahasa
yang tidak terdiri dari string-string, yaitu bahasa kosong, yang dinotasikan seperti
kita menuliskan himpunan kosong, Ø. Bahasa kosong berbeda dengan bahasa
yang terdiri dari string kosong {ε}. Bahasa bisa juga disebut sebagai rangkaian
simbol-simbol yang mempunyai makna.
Pada gambar 1.1 tersebut, bila mesin mendapat string input berikut:
• ada: diterima,
• adu: diterima,
• add: ditolak.
Sebuah string input diterima bila mencapai state akhir/final state, yang di
situ digambarkan dengan lingkaran ganda. Mesin ini memiliki 6 state,
{q0,q1,q2,q3,q4,q5}, yang mana adalah himpunan state yang ada pada mesin itu.
State awal dari mesin adalah q0.(q3,q4} adalah himpunan state akhir/final.
Sedangkan himpunan simbol input adalah {a,d,u}. Penjelasan lebih lanjut secara
formal dari suatu mesin otomata bisa dilihat pada bab dua.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Pada bahasa bebas konteks, batasannya bertambah lagi dengan ruas kiri
haruslah tepat satu simbol variabel. Misalnya:
B →CDeFg
D →BcDe
SebuahTkasus yang populer berikut, akan kita jadikan contoh suatu finite
state automata. Seorang petani dengan seekor kambing, serigala, dan seikat
rumput berada pada suatu sisi sungai (kita sebut saja sisi kiri). Terdapat sebuah
perahu yang kecil dan hanya bisa memuat petani itu dan salah satu dari kambing,
serigala, atau rumput. Petani itu akan menyeberangkan ketiganya ke sisi kanan
sungai. Tetapi jika petani meninggalkan serigala dan kambing pada suatu sisi
sungai, maka kambing akan dimakan serigala. Begitu juga jika kambing di-
tinggalkan dengan rumput, maka rumput akan dimakan kambing. Mungkinkah
untuk menemukan cara melintasi sungai tanpa menyebabkan kambing atau
rumput dimakan?. Masalah tersebut bisa dimodelkan dengan memperhatikan
mereka yang menempati setiap sisi sungai. Pada gambar 2.1, kombinasi pada
setiap sisi sungai untuk petani (P), kambing (K), serigala (S), dan rumput (R),
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
terdapat 10 state dari 16 kombinasi state yang mungkin. Karena terdapat state
yang tidak boleh dimasuki, misalnya KR-PS (kambing dan rumput di kiri sungai-
petani dan serigala di kanan sungai), karena rumput akan dimakan kambing. Input
dari sistem adalah tindakan yang dilakukan oleh petani. Petani bisa menyeberang
sendirian (input p), dengan kambing (input k), dengan serigala (input s), atau
rumput (input r). State awal adalah PKSR-Ø (semua berada di sisi kiri sungai),
dan state akhir adalah Ø-PKSR (semua berada di sisi kanan sungi), yang
digambarkan dengan lingkaran ganda. Terlihat pada gambar 2.1 kita bisa
memperoleh dua solusi singkat dengan menelusuri lintasan dari state awal ke
state akhir.
Contoh penerapan lain adalah pada pencek pariti ganjil (odd parity).
Pengirim akan menambahkan bit paritas sehingga jumlah bit 1 adalah ganjil.
Misal, terdapat data:
0110
maka pengirim akan menambahkan bit 1 sehingga penerima akan memperoleh
01101
Jika data:
0111
maka pengirim akan menambahkan bit 0 sehingga penerima akan memperoleh
01110
Bila suatu saat penerima memperoleh jumlah bit 1 yang genap, misalnya:
10010
maka penerima akan memutuskan bahwa telah terjadi kesalahan/error dalam
pengiriman.
Kita bisa membuat sebuah otomata yang akan memeriksa apakah scan:
barisan input memiliki bit 1 dalam jumlah ganjil atau genap. Mesin ini akan
mempunyai dua state, kita sebut saja sebagai state EVEN (genap) Eir state ODD
(ganjil). Kita bisa lihat pada gambar 2.2.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Gambar 2.1 Diagram transisi untuk persoalan petani, kambing, serigala, dan
rumput
Pada finite state automata, arti dari bentuk-bentuk seperti yang ada pada
gambar 2.2 adalah sebagai berikut.
• Lingkaran menyatakan stafe/kedudukan.
• Label pada lingkaran adalah nama state tersebut.
• Busur menyatakan transisi yaitu perpindahan kedudukan/stote.
• Label pada busur adalah simbol input.
• Lingkaran didahului sebuah busur tanpa label menyatakan state awal.
• Lingkaran ganda menyatakan state akhir/final.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Meskipun pada kedua contoh di atas state akhirnya hanya satu, umumnya
bisa terdapat sejumlah state akhir. Istilah state akhir state) tidak berarti komputasi
(di sini berupa perpindahan/tran- mm. berhenti (halt) begitu state akhir tercapai.
State akhir hanya melasakan kedudukan-kedudukan (state) tertentu sebagai
kedudukan- kedudukan yang diterima (accepting state).
Secara formal finite state automata dinyatakan oleh 5 tupel atau M=(Q, Σ,
δ, S, F), di mana:
Q = himpunan stote/kedudukan
Σ = himpunan simbol m/juf/masukan/abjad
δ = fungsi transisi
S = state awal/kedudukan awal (initial state), S Q
F = himpunan state akhir, F Q
Catatan:
Perhatikan: F adalah himpunan state akhir, jadi jumlah state akhir pada
Kiatu finite state automata bisa lebih dari satu.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Sebagai contoh, kita memiliki sebuah otomata seperti pada gambar 2.3.
Biasanya fungsi-fungsi transisi ini kita sajikan dalam sebuah tabel transisi.
Tabel transisi tersebut menunjukkan state-state berikutnya untuk kombinasi state-
state dan input. Tabel transisi dari fungsi transisi di atas sebagai berikut.
δ a b
qo qo q1
q1 q1 q2
q2 q1 q2
State berikutnya itu sepenuhnya ditentukan oleh informasi yang ada di dalam
pasangan state-input.
Suatu string x dinyatakan diterima bila δ(S.x) berada pada state akhir.
Biasanya secara formal dikatakan bila M adalah sebuah finite state automata,
M=(Q, Σ, δ, S, F), menerima bahasa yang disebut L(M), yang merupakan
himpunan {x\ δ(S,x) di dalam F). (L: bisa dianggap kependekan dari 'language')
Jika pada contoh gambar 2.3 kita input-kan string 'abb' pada mesin
tersebut, maka:
δ(q0,abb) = δ(q0, bb) = δ(q1,b) = q2
Jika pada contoh gambar 2.3 kita input-kan string 'baba' pada mesin
tersebut, maka:
δ(00,baba) = δ(q1, aba) = δ(q1,ba) = δ(q2,a) = q1
Karena q, tidak termasuk state akhir, maka 'baba' tidak berada dalam
L(M).
Contoh lain bisa dilihat pada gambar 2.4 sebagai berikut.
Jadi, dari suatu gambar/diagram transisi dapat kita buat tabel transisinya.
Sebaliknya, kita dapat pula menggambar diagram tran sisi suatu Deterministic
Finite Automata bila kita ketahui tabel transisinya. Kita lihat contoh-contoh
selanjutnya. Terdapat tabe! transisi sebagai berikut.
δ a b
qo qo q1
q1 qo qo
dengan
S = qo
F = {ql}
Maka, diagram transisinya dapat dilihat pada gambar 2.5.
dengan
S = qo
F = { qo, q2}
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Terlihat dari qo tidak ada state berikutnya bila menerima input 'b' atau
dinyatakan sebagai Ø. Kita lihat contoh berikutnya pada gambar 2.8.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Terlihat dari q0 bila menerima input 'a', maka akan berpindah ke state atau
q2, padahal Deterministic Finite Automata mensyaratkan tepat ada satu saja state
berikutnya (deterministik) untuk setiap simbol input. Bisa dilihat tabel transisi
untuk gambar 2.8.
δ a b
qo {q1, q2) qo
q1 q1 qo
q2 q2 q1
Untuk bentuk pada gambar 2.7 dan 2.8 merupakan mesin Non-
deterministic Finite Automata (NFA), yang akan kita pelajari pada bagian
selanjutnya.
Kita lihat gambar 2.9, dari state terdapat dua busur keluar yang berlabel
input 'a'. Dari state q0 bila mendapat input 'a' bisa berpindah ke state q0 atau qJf
yang secara formal dinyatakan:
δ(q0,a) = {qo,q1}
maka otomata ini disebut non-deterministik (tidak pasti arahnya). Bisa kita lihat
tabel transisinya seperti dibawah ini.
5 a b
qo {qo,q1} {qi}
qi {q1} {qi}
Catatan:
Perbatikan cara penulisan state hasil transisi pada tabel transisi untuk Non-
deterministic Finite Automata digunakan kurung kurawal'{' dan '}', karena hasil
transisinya merupakan suatu himpunan state.
Terlihat tidak ada busur keluar dari state q1 untuk simbol input 'b', atau
secara formal dinyatakan:
δ(q1,b) = Ø
Kita bisa melihat tabel transisinya dibawah ini.
δ a b
qo {q1} {qo}
q1 {qo} 0
Deterministic Finite Automata pada gambar 2.13 dan gambar 2.14 juga
ekuivalen. Deterministic Finite Automata M4 lebih sederhana dari Deterministic
Finite Automata M3 dalam arti mempunyai jumlah state yang lebih sedikit.
Gambar 2.13 D FA M,
EKUIVALENSI
NON-DETERMINISTIC FINITE AUTOMATA KE DETERMINISTIC
FINITE AUTOMATA
Catatan:
Perhatikan bahwa state yang sama cukup ditulis sekali saja.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Catatan:
Perhatikan bahwa state q1 menerima input 0 menjadi state 0, di sini 0 kita
gambarkan juga sebagai sebuah state.
Gambar 3.8 Mesin DFA yang ekuivalen dengan NFA pada gambar 3.3
Salah satu kegunaan dari transisi ε ini adalah memudahkan kita untuk
mengkombinasikan finite state automata.
Dari gambar 4.2 kita ketahui ε-closure untuk setiap state adalah sebagai
berikut.
ε-closure(qo) = {qo, q1, q3)
ε-closure(q1) = {q1, q3}
ε-closure(q2) = {q2,q4}
ε-closure(q3) = {q3}
ε-closure(q4) = {q4}
Catatan:
Perhatikan bahwa pada suatu state yang tidak memiliki transisi e, maka e-
closure-nya adalah state itu sendiri.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Tentu saja bila gambarnya tidak sesederhana itu, kita perlu melakukan
beberapa tahapan untuk mendapatkan perubahan dari Non- deterministic Finite
Automata e-move ke Non-deterministic Finite Automata tanpa ε-move. Secara
umum caranya adalah sebagai berikut.
1. Buat tabel transisi Non-deterministic Finite Automata e-move semula.
2. Tentukan e-closure untuk setiap state.
3. Carilah setiap fungsi transisi hasil perubahan dari Non-determin- istic
Finite Automata e-move ke Non-deterministic Finite Automata tanpa ε-
move (kita sebut saja sebagai δ') di mana δ' didapatkan dengan rumus:
δ(state, input) = ε_closure( δ (ε_closure(state), input) ).
4. Berdasarkan hasil no (3), kita bisa membuat tabel transisi dan diagram
transisi dari Non-deterministic Finite Automata tanpa ε-move yang
ekuivalen dengan Non-deterministic Finite Automata ε-move tersebut.
5. Jangan lupa menentukan state-state akhir untuk Non-deterministic Finite
Automata tanpa e-move tersebut, yaitu state-state akhir semula ditambah
dengan state-state yang ε_closure-nya menuju ke salah satu dari state
akhir semula. Dalam bahasa formalnya:
F'= F │q │ (ε-closure(q) ∩ F) ≠ Ø }
Misalnya: bila semula F = {q0,q3}, ε_closure (q1} = {q0,q2}, maka
Dari Non-deterministic Finite Automata e-move pada gambar 4.3 kita bisa
tentukan e-closure untuk setiap state (ε-closure bisa kita juga singkat sebagai
ε-cl):
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
ε_cl(qo) = {qoq1}
ε_cl(q1) = {q,}
ε_cl(q2) = {q2}
ε_cl(q3) = {q3}
Kita bisa melihat tabel transisi untuk NFA tanpa e-move dari hasil di atas.
δ' a b
qo q2 q3
q1 q2 q3
q2 Ø Ø
q3 Ø Ø
EKSPRESI REGULAR
5.1 PENERAPAN ELSPRESI REGULAR
Sebuah bahasa dinyatakan regular jika terdapat finite state automata yang
dapat menerimanya. Bahasa-bahasa yang diterima oleh suatu finite state
automata bisa dinyatakan secara sederhana dengan ekspresi regular
(regularexpression). Ekspresi regular, selanjutnya kita sebut sebagai ER,
memungkinkan menspesifikasikan atau mendefinisikan bahasa-bahasa. Ekspresi
regular memberikan suatu pola (pattern) atau template untuk untai/string dari
suatu bahasa. Untai yang menyusun suatu bahasa regular akan cocok (match)
dengan pola bahasa itu. Banyak masalah pada perancangan perangkat lunak yang
bisa disederhanakan dengan melakukan pengubahan notasi ekspresi regular ke
dalam implementasi komputer dari finite state automata yang bersangkutan.
Penerapan ekspresi regular yang tampak, misalnya pencarian (searching) untai
karakter (string) pada suatu file, biasanya fasilitas ini ada pada text editor. Dalam
kasus itu dilakukan penerapan Finite state automata pada untai-untai yang
terdapat dalam file tersebut.
*
yaitu karakter asterisk, berarti bisa tidak muncul, bisa juga muncul berhingga
kali (0-n).
+
(pada posisi superscript /di atas) berarti minimal muncul satu kali (1-n)
+ atau berarti union.
. (titik) berarti konkatenasi, biasanya titik bisa dihilangkan, Misalnya: ab
bermakna sama seperti a.b.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
• ER: (ab)*
Contoh string yang dibangkitkan: a, b, ab, ba, abb, bba, aaaa, bbbb (untai
yang memuat a atau b).
Catatan:
Perhatian bahwa notasi '' kadang dituliskan juga sebagai’+’
• ER: 01* + 0
contoh string yang dibangkitkan: 0, 01, 011, 0111, 01111, (string yang
berawalan dengan 0, dan selanjutnya boleh diikuti deretan 1).
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Dari sebuah finite state automata (NFA atau DFA) kita bisa menentukan
ekspresi regular yang diterima oleh otomata bersangkutan. Terdapat langkah-
langkah secara formal untuk menemukan ekspresi regular dari suatu finite state
automata, tetapi kita bisa juga secara langsung menentukan ekspresi regular-nya
dengan mengamati perilaku dari otomata tersebut.
Kita lihat dari gambar 5.16, input yang menuju pada final state (q2) adalah
0 atau 10*1, pada state q2 menerima input 1 dalam jumlah berapapun (1*) akan
tetap di q2. Dengan demikian, bisa dikatakan mesin itu menerima 01* atau
10*11*, yang dinyatakan dalam ekspresi regular:
01* u 10*11*.
Pada gambar 5.17 kita lihat final state adalah q2 dan q3. Input yang menuju
q3 adalah ab, dengan di q3 bisa menerima a* sehingga bila digabung menjadi
aba*. Input yang menuju q2 adalah aa, selanjutnya dari q2 menerima ba* b
kembali ke q2 sehingga bila digabung menjadi aa(ba*b)*. Akhirnya kita peroleh
ekspresi regular untuk gambar 5.17: aba* u aa(ba*b)*, bisa pula dipersingkat
menjadi:
a(ba* a (ba*b)* ).
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Pada gambar 5.18 input yang menuju final state (q,,) adalah a(ba)*a,
karena dari q1 bila menerima (ba)* kembali ke q1 lagi. Di q2 bila menerima b*
tetap di q2. Selanjutnya menerima (aba) kembali ke q2, dan di q2 bila menerima b*
tetap di q2, atau digabung (abab*). Maka ekspresi regularnya:
a(ba)*ab*(abab*)*.
Suatu keterbatasan dari finite state automata yang sudah kita pelajari
selama ini keputusannya terbatas pada diterima atau ditolak. Otomata tersebut
biasa disebut sebagai accepter, dalam hal ini finite state accepter. Kita bisa
mengkonstruksi sebuah finite state automata yang memiliki keputusan beberapa
keluar an/ouipuf, dalam hal ini otomata tersebut akan dikenal sebagai
transducer. Pada mesin Moore, output akan berasosiasi dengan state. Mesin
Moore didefinisikan dalam 6 (enam) tupel, M = (Q, Σ, δ, S, , λ ), di mana:
Q = himpunan state
Σ = himpunan simbol input
δ = fungsi transisi
S = state awal, S Q
= himpunan output
λ = fungsi output untuk setiap state.
Misalkan saja:
• 5 mod 3 = ?
input 5 dalam biner 101
bila kita masukkan 101 ke dalam mesin, urutan state yang dicapai:
q0, q2, q2, q2
Perhatikan state terakhir yang dicapai adalah q2, λ,(q2) = 2, maka 5 mod 3 = 2
• 10 mod 3 = ?
input 10 dalam biner 1010
bila kita masukkan 1010 ke dalam mesin, urutan state yang dicapai: qo, q1 q2,
q2, q1
λ(q2) = 1, maka 10 mod 3 = 1
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
POHON PENURUN
8.1 TATA BAHASA BEBAS KONTEKS
Bila pada tata bahasa regular terdapat pembatasan pada ruas kanan atau
hasil produksinya, maka pada tata bahasa bebas konteks/eontert free grammar,
selanjutnya kita sebut sebagai CFG, tidak terdapat pembatasan hasil produksinya.
Pada aturan produksi:
a→b
batasannya hanyalah ruas kiri (a) adalah sebuah simbol variabel. Contoh aturan
produksi yang termasuk CFG:
B →CDeFg
D →BcDe
Seperti halnya pada tata bahasa regular, sebuah tata bahasa bebas konteks
adalah suatu cara yang menunjukkan bagaimana menghasilkan untai-untai dalam
sebuah bahasa. Seperti kita ketahui, pada saat menurunkan suatu string, simbol-
simbol variabel akan mewakili bagian-bagian yang belum terturunkan dari string
tersebut. Bila pada tata bahasa regular, bagian yang belum terturunkan tersebut
selalu ssjadi pada suatu ujung, pada tata bahasa bebas konteks bisa terdapat lebih
banyak bagian yang belum terturunkan itu, dan bisa terjadi di mana saja. Ketika
penurunan itu telah lengkap, semua bagian yang belum terturunkan telah diganti
oleh string-string (yang mungkin saja kosong) dari himpunan simbol terminal.
Bahasa bebas konteks menjadi dasar dalam pembentukan suatu parser/proses
analisis sintaksis.
Proses penurunan atau parsing bisa dilakukan dengan cara sebagai berikut.
Penurunan terkiri (leftmost derivation): simbol variabel terkiri yang diperluas
terlebih dulu.
Penurunan terkanan (rightmost derivation)-, simbol variabel ter- kanan yang
diperluas terlebih dulu.
Misal, terdapat tata bahasa bebas konteks:
S → aAS | a
A →SbA | ba
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Untuk memperoleh untai 'aabbaa' dari tata bahasa bebas konteks di atas
('=*' bisa dibaca 'menurunkan'):
dengan penurunan terkiri: S → aAS → aSbAS → aabAS → aabbaS
→aabbaa,
dengan penurunan terkanan: S → aAS → aAa → aSbAa → aSbbaa →
aabbaa.
8.3 AMBIGUITAS
Untuk memperoleh untai 'a' bisa terdapat dua cara penurunan berikut ini.
• SAa
• SBa
Kita bisa menurunkan untai 'abaca' dalam dua cara berikut ini.
• S SbS SbScS SbSca Sbaca abaca.
• S ScS SbScS abScS abacS abaca.
• Produksi yang memuat simbol variabel yang tidak memiliki penurunan yang
akan menghasilkan terminal-terminal seluruhnya (kita sebut saja sebagai
'menuju terminal'), produksi ini tidak berguna karena bila diturunkan tidak
akan pernah selesai (masih ada simbol variabel yang tersisa);
• Produksi yang tidak akan pernah dicapai dengan penurunan apapun dari
simbol awal sehingga produksi itu redundan (berlebih).
maka dari tata bahasa bebas konteks di atas, produksi yang useless:
A→D
C → bb
E → aEa
B→E
maka tata bahasa bebas konteks setelah disederhanakan menjadi:
S → Aa | B
A → ab
B→b
Contoh, tata bahasa bebas konteksnya adalah sebagai berikut.
S → aAb | cEB
A → dBE eeC
B → ff
C → ae
D→h
Kita bisa melihat bahwa:
1) aturan produksi S →EB, A → dBE (E tidak memiliki penurunan); ) aturan
produksi D → h, redundan.
2) Sisa aturan produksi:
S → aAb
A → eeC
B → ff
C → ae
Kita lihat sekarang B → ff juga redundan sehingga hasil penyederhanaan
menjadi:
S → aAb
A → eeC
C→ ae
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
S → aBD
B →cD
D → ef
Contoh, tata bahasa bebas konteks:
S →Abc | ab
A→ AAA | ε
Aturan produksi setelah disederhanakan:
S → Abc | ab
A→ AAA | e
Ingat A → e juga harus diperhitungkan
Catatan:
Prinsipnya setiap kali melakukan penyederhanaan kita periksa lagi aturan
produksi yang tersisa, apakah semua produksi yang useless sudah kita hilangkan.
Produksi unit adalah produksi di mana ruas kiri dan kanan aturan produksi
hanya berupa satu simbol variabel, misalkan: A → B, C → D: Keberadaan
produksi unit membuat tata bahasa memiliki kerumitan yang tak perlu atau
menambah panjang penurunan. Penyederhanaan ini dilakukan dengan melakukan
penggantian aturan produksi unit.
Contoh tata bahasa bebas konteks:
S → Sb
S→C
C→D
C → ef
D → dd
Kita lakukan penggantian berurutan mulai dari aturan produksi yang
paling dekat menuju ke penurunan terminal-terminal ('' dibaca 'menjadi'):
• C →D C →dd
• S C S → dd | ef
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Setelah penyederhanaan:
S → dA | d | Bd
A → bc
B→c
Contoh, tata bahasa bebas konteks:
S → AaCD
A → CD | AB
B→b|ε
C→d|ε
D→ε
Variabel yang nullable adalah variabel B, C, D. Kemudian kita lihat dari
A → CD, maka variabel A juga nullable (A → ε). Karena D hanya memiliki
penurunan D → ε, maka kita sederhanakan dulu:
• S → AaCD S → AaC
• A CD A → C
• D → ε kita hapus
Setelah penyederhanaan:
S AaC │ aC J Aa │ a
A → C │ AB | A | B
B→b
C→ε
Contoh, tata bahasa bebas konteks:
S → AB A abB | aCa | ε
B → bA | BB | ε
C→E
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Hasil penyederhanaan:
S → ABaC | BaC | AaC | ABa | aC | Aa | Ba | a
A → B | C | BC
B→b
C→D
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Contoh, tata bahasa bebas konteks (kita anggap tata bahasa bebas konteks
pada bab ini sudah mengalami penyederhanaan) sebagai berikut.
S → bA j aB
A → bAA | aS | a
B → aBB j bS I b
Aturan produksi yang sudah dalam bentuk normal Chomsky adalah sebagai
berikut.
A→a
B→b
Dilakukan penggantian aturan produksi yang belum bentuk normal
Chomsky ('=>' bisa dibaca berubah menjadi);
S → bA S P1A
S → aB => S P2B
A → bAA A P1AA => A → P1P3
A → aS A P2S
B →aBB B → P2BB B → P2P4
B → bS B → P1S
terbentuk aturan produksi dan simbol variabel baru:
P1→ b
P2 → a
P3→AA
P4 → B
Hasil akhir aturan produksi dalam bentuk normal Chomsky adalah sebagai
berikut.
A→a
B→b
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
S → P1A
S → P2B
A → P1P3
A → P2S
B → P2P4
B → P1S
P1 → b
P2 → a
P3 → AA
P4 → BB
Contoh, tata bahasa bebas konteks:
S → aB | CA
A → a | bc
B → BC | Ab
C → aB | b
Aturan produksi yang sudah dalam bentuk normal Chomsky:
S → CA
A→a
B → BC
C→b
Penggantian aturan produksi yang belum dalam bentuk normal Chomsky:
S → aB S → P1B
A → bc S → P2P3
B → Ab B → AP2
C → aB C → P1B
Hasil akhir aturan produksi dalam bentuk normal Chomsky adalah sebagai berikut.
S → CA
A→a
B → BC
C→b
S → P1B
S → P2P3
B → AP2
C → P1B
P→a
P2 → b
P3 → e
Contoh, tata bahasa bebas konteks:
S → aAB | ch | CD
A → dbE | eEC
B → ff | DD
C →ADB | aS
D→i
E → jD
Aturan produksi yang sudah dalam bentuk normal Chomsky:
S → CD
B → DD
D→i
Penggantian aturan produksi:
S → AAB S → P1P2
S → CH S →P3P4
A → DBE A → P5P6
A → EC => A → P8P9
B → ff B → P10P10
C → ADB C → AP11
C → aS C → P1S
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
E → jD E → P12D
terbentuk aturan produksi baru:
P→a
P2 → AB
P3 →c
P4 → h
P5 → D
P6 → P7E
P7 → b
P8 → e
P9 → EC
P10 → f
P11 → DB
P12 → j
Hasil akhir dalam bentuk normal Chomsky adalah sebagai berikut.
S → CD
B → DD
D→i
S → P1P2
S → P3P4
A → P5P6
A → P8P9
B → P10Pl0
C → AP11
C → P1S
E → P12D
P1 → a
P2 → AB
P3 → c
P4 → h
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
P6 → P7E
P7 → b
P8 → e
P9 → EC
P10 → f
P11 → DB
PI2 → j
vi.;=v vj t z* j -r BU
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Aturan Produksi yang rekursif memiliki ruas kanan (hasil produksi) yang
memuat simbol variabel pada ruas kiri. Sebuah aturan produksi dalam bentuk:
A→ βA
merupakan aturan produksi yang rekursif kanan β=(VT)* atau
kumpulan simbol variabel dan terminal.
Contoh aturan produksi yang rekursif kanan:
S →dS
B → adB
Produksi dalam bentuk:
A → Aβ
merupakan aturan produksi yang rekursif kiri, contohnya:
S → Sd
B → Bad
Produksi yang rekursif kanan menyebabkan pohon penurunan tumbuh ke
kanan, sebaliknya produksi yang rekursif kiri menyebabkan pohon penurunan
tumbuh ke kiri. Bisa dilihat pohon penurunan pada gambar 11.1 dari tata bahasa
bebas konteks dengan aturan produksi:
S → aAc
A → Ab | ε
Dalam banyak penerapan tata bahasa, rekursif kiri tak diinginkan. Untuk
menghindari penurunan yang bisa mengakibatkan loop kita perlu menghilangkan
sifat rekursif kiri dari aturan produksi. Penghilangan rekursif kiri di sini
memungkinkan suatu tata bahasa bebas konteks nantinya diubah ke dalam bentuk
normal Greibach.
Dari situ kita bisa tentukan α1,α2, ... αn,dan β1,β2,... βm dari setiap aturan
produksi yang memiliki simbol ruas kiri yang sama
Lakukan penggantian aturan produksi yang rekursif kiri, menj adi sebagai
berikut.
1) A→ β1Z │ β1Z │….βmZ
2) Z → α1 │ α2 │ α3 │ ... αn
3) Z → α1Z │α1Z │ α1Z │ ... αnZ
Penggantian di atas dilakukan untuk setiap aturan produksi dengan simbol
ruas kiri yang sama, bisa muncul simbol variabel baru Z1 Z2, dan
seterusnya, sesuai banyaknya variabel yang menghasilkan produksi yang
rekursif kiri.
Hasil akhir berupa aturan produksi pengganti ditambah dengan aturan
produksi semula yang tidak rekursif kiri.
Contoh, tata bahasa bebas konteks:
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Kita lakukan penggantian aturan produksi yang rekursif kiri. Untuk yang
memiliki simbol ruas kiri S: S → Sab | Sbd, digantikan oleh:
i. S → aScZ1 | ddZ1 | fiZ1
ii. Z1 → ab | bd
iii. Z1 → abZ1| bdZ1
S → Sab | Sb
A → Aa
Dari situ kita tentukan:
untuk simbol ruas kiri S: α1 = ab, α2 = b
untuk simbol ruas kiri A: α1 = a
Aturan produksi yang tidak rekursif kiri:
S → cA
A → a | bd
Atau dengan kata lain, suatu tata bahasa bebas konteks dalam bentuk
normal Greibach bila hasil produksinya (ruas kanan) diawali dengan satu simbol
terminal, selanjutnya bisa diikuti oleh rangkaian simbol variabel. Contoh tata
bahasa bebas konteks dalam bentuk bentuk normal Greibach:
S → a | aAB
A → aB
B → cS
Untuk dapat diubah ke dalam bentuk normal Greibach, tata bahasa semula
harus memenuhi syarat-syarat sebagai berikut.
Sudah dalam bentuk normal Chomsky.
Tidak bersifat rekursif kiri.
Tidak menghasilkan e.
3. Jika terjadi penghilangan rekursif kiri pada tahap (2b), sejumlah simbol
variabel baru yang muncul dari operasi ini dapat disisipkan pada urutan
variabel semula di mana saja asalkan ditempatkan tidak sebelum Ah (di
kiri).
4. Setelah langkah (2) & (3) dikerjakan, maka aturan-aturan produksi yang
ruas kanannya dimulai simbol variabel sudah berada dalam urutan yang
benar.
Ah→ Ay (di mana x < y).
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Contoh (tata bahasa bebas konteks sudah dalam bentuk normal Chomsky
dan memenuhi syarat untuk diubah ke bentuk normal Greibach), simbol awal
adalah S:
S → CA
A →a | d
B→b
C →DD
D → AB
Kita tentukan urutan simbol variabel, misalnya S, A, B, C, D
(S<A<B<C<D).
Catatan:
Perhatikan bahwa urutan tersebut boleh Anda tentukan sendiri, buatlah urutan
sedemikan sehingga memudahkan untuk proses selanjutnya.
Kita periksa aturan produksi yang simbol pertama pada ruas kanan adalah
simbol variabel, apakah sudah memuhi ketentuan urutan variabel:
• S → CA (sudah memenuhi karena S<C),
• C → DD (sudah memenuhi karena C<D),
• D → AB (tidak memenuhi, karena D>A).
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Yang belum memenuhi urutan yang telah kita tentukan adalah: D → AB,
karena ruas kiri > simbol pertama pada ruas kanan. Maka kita lakukan substitusi
pada simbol variabel A, aturan produksi menjadi:
D → aB | dB
Pengubahan C → AB:
C →AB C BCB C → CACB | bCB
untuk C → CACB lakukan penghilangan rekursif kiri menjadi:
C → bCBZ1 | aZ1
Z1 → ACB
Z1 → ACBZ1
Kita lihat seluruh hasil produksi dari variabel C, sudah dalam bentuk
normal Greibach adalah sebagai berikut.
C → bCBZ1 | aZ1 | bCB | a
Hasil akhir aturan produksi dalam bentuk bentuk normal Greibach adalah
sebagai berikut.
A →bCBZ1C | aZ1AC | bCBAC | aAC | bC
B → bCBZ1A | aZ1A | bCBA | aA | b
C → bCBZ1 | aZ1 | bCB | a
Z1→ bCBZ1CCB | aZ1ACCB | bCBACCB | aACCB | bCCB
Z1→ bCBZ1ACCBZ1 | aZ1ACCBZ1 | bCBACCBZ1 | aACCBZ1 | bCCBZ1
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Push down automata bisa pula dianggap seperti finite state automata yang
dilengkapi stack. Sebuah push down automata yang menerima suatu input, selain
bisa berpindah state juga bisa melakukan operasi pada stack. Kondisi/konfigurasi
push down automata pada suatu saat akan dinyatakan dengan state dan stack.
Pada push down automata terdapat dua jenis transisi (D). Yang pertama
memakai suatu simbol input. Bergantung pada simbol input, simbol pada top
stack, dan state, terdapat sejumlah pilihan yang mungkin. Setiap pilihan terdiri
dari state berikutnya dan simbol-simbol (bisa satu, beberapa, atau kosong) untuk
mengganti simbol pada top stack. Penggantian simbol pada top stack bisa berupa
push, untuk satu atau beberapa simbol, bisa berupa pop, untuk simbol kosong.
Jenis transisi kedua biasa disebut dengan transisi ε, mirip yang pertama,
kecuali dilakukan tanpa membaca simbol input. Transisi ini memungkinkan push
down automata memanipulasi isi stack atau berpindah state tanpa membaca
simbol input.
Bahasa yang diterima oleh suatu push down automata bisa berupa
himpunan semua input, yang mana urutan pergerakannya bisa menyebabkan push
down automata mengosongkan stack. Push down automata ini bisa disebut
sebagai PDA yang melakukan penerimaan dengan stack kosong atau PDA null
stack. Cara lain adalah melakukan mekanisme seperti bagaimana otomata
berhingga menerima input, yaitu dengan menentukan satu atau beberapa state
akhir, dan bahasa yang diterima adalah himpunan semua input yang pilihan
transisinya menyebabkan push down automata mencapai state akhir, biasa
disebut PDA final state.
Contoh sebuah PDA:
Q = {q1, q2}
Σ = {a, b}
Γ = {A, B, Z)
S = q1
Z= Z
F = {q2}
konfigurasi menjadi:
state q., push A ke stack, A menjadi top-stack
A
konfigurasi menjadi:
state q,, A di pop, elemen di bawah A menjadi top-stack
konfigurasi menjadi:
state q2, stack tidak berubah
Z
Catatan:
Perhatikanlah kapan POP/PUSH dilakukan pada stack berdasarkan fungsi
transisinya. Pop dan push untuk setiap kali transisi pada mesin Push Down
Automata, dapat dilakukan pada lebih dari satu symbol.
Misal ingin diketahui apakah string ‘abba’ diterima oleh PDA ini:
Z
1. konfigurasi awal mesin: state qp top stack Z, membaca input 'a' fungsi
transisinya: (qt, a, Z) = {(q,, AZ)}
konfigurasi mesin menjadi: state q1, A di push
A
Z
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
5. semua input sudah selesai dibaca fungsi transisinya: A(q1, ε, Z) = {(q2, Z)}
konfigurasi mesin menjadi: state q2
state q2 berada dalam F (final state), maka 'abba' diterima oleh PDA itu
Z
Dapat kita lihat bahwa push down automata di atas termasuk jenis push
down automata yang melakukan penerimaan dengan mencapai state akhir.
Sekarang kita lihat contoh untuk push down automata yang melakukan
penerimaan dengan jalan stack kosong. Konfigurasi PDA:
Q = (q1, q2)
Σ = {0, 1, 2}
Γ = {Z, B, G}
S = q2
Z= Z
F=Ø
Catatan:
Perhatikan untuk push down automata menerima dengan stack kosong maka
himpunan state akhir dinyatakan sebagai Ø.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Misalnya ingin diketahui apakah string '020' diterima oleh PDA ini:
Z
1. konfigurasi awal mesin: state q1, top stack Z, menerima input '0' fungsi
transisinya: (q1, 0, Z) = {(q1, BZ)}
konfigurasi mesin menjadi: state q1B di push
B
Z
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata
Semua input sudah selesai dibaca. Stack kosong, berarti string tersebut
diterima oleh push down automata.
----- o O o -----