Anda di halaman 1dari 79

Bertha MW Hutajulu

Buku Teori Bahasa dan Otomata

PENDAHULUAN

1.1 KEDUDUKAN TEORI BAHASA DAN OTOMATA ILMU


KOMPUTER

Ilmu komputer memiliki dua komponen utama: pertama. model dan


gagasan mendasar mengenai komputasi, kedua, teknik rekayasa untuk
perancangan sistem komputasi, meliputi perangkat dan perangkat lunak,
khususnya penerapan rancangan dari teori. Teori Bahasa dan Otomata merupakan
bagian pertama. Secara teoritis ilmu komputer diawali dari sejumlah disiplin
ilmu, antara lain ahli biologi mempelajari neural network, insinyur elektro
mengembangkan switching sebagai tool untuk mendesain hardware,
matematikawan mendasarkan logika, dan ahli bahasa menyelidiki tata bahasa
natural language.

Finite state automata dan ekspresi regular awalnya dikembangkan


berdasar pemikiran neural network dan switching circuit. Finite state automata
merupakan tool yang sangat berguna dalam perancangan lexical analyzer, yaitu
bagian dari kompilator yang mengelompokkan karakter-karakter ke dalam token,
yang berupa unit terkecil nama, variabel, dan keyword. Dalam sistem penulisan
kompilator secara otomatis akan mentransformasikan ekspresi regular ke dalam
state automata untuk dipakai sebagai penganalisis leksikal. Finite state automata
dan ekspresi regular dipakai pula dalam text editor. patern matching, sejumlah
pemrosesan teks, dan program file-searching, dan sebagai konsep matematis
untuk aplikasi di disiplin lain seperti logika.

Suatu bahasa pemrograman harus didefinisikan secara tepat. Spesifikasi


dari sebuah bahasa pemrograman meliputi hal-hal berikut.
• Himpunan simbol-simbol (alphabet) yang bisa dipakai untuk membentuk
program yang benar.
• Himpunan program yang benar secara sintaksis.
• 'Makna' dari program tersebut.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

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.

1.2 KONSEP BAHASA D AIN OTOMATA

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

string (kata/untai) adalah suatu deretan berhingga dari simbol-simbol. Sebagai


contoh, 'a', 'b', 'c' adalah simbol- simbol, dan 'abcb' adalah suatu string. Pada buku
ini kita akan menggunakan istilah string dan untai bergantian. Panjang string di
sini adalah jumlah simbol yang membentuk string tersebut. Contoh:
'abad' panjangnya 4
'asdfgh' panjangnya 6

Sebuah string kosong, biasanya dinyatakan dengan e, didefinisikan


panjangnya = 0, atau | ε | = 0 (pada beberapa buku, simbol untuk ε dinyatakan
dengan λ). Suatu alphabet adalah himpunan berhingga dari simbol-simbol.

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.

Untuk memodelkan hardware dari komputer diperkenalkan otomata.


Otomaia adalah suatu bentuk yang memiliki fungsi-fungsi dari komputer digital.
Menerima input, menghasilkan output, bisa memiliki penyimpan sementara, dan
mampu membuat keputusan dalam mentransformasikan input ke ouput. Sebuah
bahasa formal adalah suatu abstraksi terdiri dari himpunan simbol-simbol dan
aturan-aturan yang mana simbol-simbol tersebut bisa dikombinasikan ke dalam
entitas yang disebut kalimat. Meskipun bahasa formal yang dipelajari di sini lebih
sederhana daripada bahasa pemrograman, mereka mempunyai banyak hal yang
penting. Kita bisa mempelajari banyak tentang bahasa pemrograman dari bahasa
formal.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Otomata merupakan suatu sistem yang terdiri atas sejumlah berhingga


state, di mana state menyatakan informasi mengenai input yang lalu, dan dapat
pula dianggap sebagai memori mesin. Input pada mesin otomata dianggap sebagai
bahasa yang harus dikenali oleh mesin. Selanjutnya, mesin otomata membuat
keputusan yang mengindikasikan apakah input itu diterima atau tidak. Sehingga
mesin otomata dapat dipakai untuk menghasilkan bahasa yang aturannya
ditentukan oleh aturan bahasa itu.

Misalnya, kita memiliki sebuah mesin sederhana yang menerima input


kata dalam bahasa Indonesia, hal ini bisa dilihat pada gambar 1.1.

Gambar 1.1 Mesin otomata sederhana

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

1.3 HIRARK1 CHOMSKY


Tata bahasa (grammar) bisa didefinisikan secara formal sebagai kumpulan
dari himpunan-himpunan variabel, simbol-simbol terminal, simbol awal, yang
dibatasi oleh aturan-aturan produksi. Pada tahun 1959 seorang ahli bernama
Noam Chomsky melakukan penggolongan tingkatan bahasa menjadi empat, yang
disebut dengan Himrki Chomsky. Penggolongan tersebut bisa dilihat pada tabel
berikut.

Bahasa Mesin Otomata Batasan Aturan Produksi

Regular / Tipe 3 Finite State Automata α adalah sebuah simbol


(FSA) meliputi variabel
Deterministic Finite β maksimal memiliki
Automata (DFA)& Non- sebuah smbol varibel yang
deterministic Finite bila ada terletak di
Automata (NFA) posisi paling kanan
Bebas Konteks / Context Push Down Automata α adalah sebuah simbol
Free! Tipe 2 (PDA) variabel
Context Sensitive/ Tipe 1 Linier Bounded Automata │α│≤│β│

Unrestricted / Phase Mesin Turing tidak ada batasan


Structure / Natural
Language / Tipe 0

Kita bisa melihat penggolongan di atas berdasarkan pembatasan yang


dilakukan pada aturan produksinya. Aturan produksi merupa-kari pusat dari tata
bahasa, yang menspesifikasikan bagaimana =jxatu tata bahasa melakukan
transformasi suatu string ke bentuk lainnya, dan melalui aturan produksi tersebut
didefinisikan suatu bahasa yang berhubungan dengan tata bahasa tersebut. Di sini
semua aturan produksi dinyatakan dalam bentuk "α→β" {bisa dibaca: α
menghasilkan β, atau dibaca α menurunkan β), di mana a menyatakan simbol-
simbol pada ruas kiri aturan produksi (sebelah kiri tanda '→') dan β menyatakan
simbol-simbol pada ruas kanan aturan produksi (sebelah kanan tanda '→', dan
bisa disebut juga sebagai hasil produksi). Simbol-simbol tersebut bisa berupa
simbol terminal atau simbol nonterminal/variable. Simbol variabel/non terminal
adalah simbol yang masih bisa diturunkan, sedang simbol terminal sudah tidak
bisa diturunkan lagi. Simbol terminal biasanya (dan pada buku ini) dinyatakan
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

dengan huruf kecil, misal 'a','b',c'. Simbol nonterminal/variabel biasanya


dinyatakan huruf besar, misal 'A','B', 'C'.

Dengan menerapkan aturan produksi, suatu tata bahasa bisa menghasilkan


sejumlah string. Himpunan semua string tersebut adalah bahasa yang
didefinisikan oleh tata bahasa tersebut.
Contoh aturan produksi:
T →a
bisa dibaca: "T menghasilkan a"
E T │ T+E
bisa dibaca: "E menghasilkan T atau E menghasilkan
T+E"
Simbol '|' menyatakan 'atau', biasa digunakan untuk mempersingkat
penulisan aturaii produksi yang mempunyai ruas kiri yang sama. Pada contoh di
atas:
E → T | T+E
merupakan pemendekan dari aturan produksi:
E →T
E →T+E
Bahasa manusia/bahasa alami termasuk ke dalam grammar (tata bahasa)
Tipe O/Unrestricted, di mana tidak ada batasan pada aturan produksinya.
Misalkan saja:
Abc → De
Pada bahasa Context Sensitive, panjang string pada ruas kiri < panjang ruas
kanan (| a | < | P |). Contoh aturan produksi yang context sensitive:
Ab → DeF
CD → eF
Perhatikan aturan produksi seperti dibawah ini.
S →e
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Kita ketahui | S | =1, sedang | ε | = 0, menurut aturan context sensitive aturan


produksi itu tidak diperkenankan, tetapi di sini kita buat suatu perkecualian
sehingga S e dianggap memenuhi context sensitive grammar.

Batasan context sensitive biasanya turut digunakan dalam proses analisis


semantik pada tahapan kompilasi.

Pada bahasa bebas konteks, batasannya bertambah lagi dengan ruas kiri
haruslah tepat satu simbol variabel. Misalnya:
B →CDeFg
D →BcDe

Bahasa bebas konteks menjadi dasar dalam pembentukan suatu


parser/proses analisis sintaksis. Bagian sintaks dalam suatu kompilator
kebanyakan didefinisikan dalam tata bahasa bebas konteks (context free
grammar), yang dideskripsikan secara formal dengan notasi BNF (Backus Naur
Form atau Backus Normal Form).

Pada bahasa regular, batasannya bertambah dengan ruas ka-nan maksimal


memiliki sebuah simbol variabel yang terletak di pa-ling kanan. Artinya bisa
memiliki simbol terminal saja dalam jumlah tidak dibatasi, tetapi bila terdapat
simbol variabel, maka simbol variabel tersebut hanya beijumlah 1 (satu) dan
terletak di posisi paling kanan.
Misalnya:
A→ e
A →efg
A →efgH
C→D
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

2.1 PENERAPAN FINITE STATE AUTOMATA

Finiite State Automata!state otomata berhingga, selanjutnya kita sebut


sebagai FSA, bukanlah mesin fisik tetapi suatu model matematika dari suatu
sistem yang menerima input dan output diskrit. Finite state automata merupakan
mesin otomata dari bahasa regular. Suatu finite state automata memiliki state
yang banyaknya berhingga, dan dapat berpindah-pindah dari suatu state ke state
lain. Perubahan state ini dinyatakan oleh fungsi transisi. Jenis otomata ini tidak
memiliki tempat penyimpanan sehingga kemampuan 'mengingatnya' terbatas.
Mekanisme kontrol pada suatu elevator/lift adalah contoh yang bagus untuk suatu
otomata. Mekanisme tersebut tidak 'mengingat' semua permintaan sebelumnya
tetapi hanya posisi lift saat itu pada suatu lantai, pergerakan (ke atas atau bawah),
dan sekumpulan permintaan yang belum terpenuhi. Dalam ilmu komputer kita
akan menemui banyak contoh dari sistem finite state automata. Teori mengenai
finite state automata adalah suatu tool yang berguna untuk merancang sistem
tersebut. Mekanisme kerja suatu finite state automata bisa diaplikasikan pada
analisis leksikal, text-editor, protokol komunikasi jaringan (misal protokol
kermit), dan pencek pariti.

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

Gambar 2.2 Mesin otomata untuk pencek pariti ganjil

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

Gambar seperti gambar 2.2 biasanya disebut sebagai graph transisi,


diagram transisi atau diagram keadaan (state). Pada gambar 2.2 tersebut kita lihat
state awal adalah EVEN. Karena mesin ini merupakan pencek pariti ganjil, maka
himpunan state akhir v ing menyatakan input diterima adalah {ODD}. Simbol
input yang ada (0.1) Kita lihat bila mesin mendapat input:
1101
urutan state yang terjadi
EVEN 1 ODD 1 EVEN 0 EVEN 1 ODD
berakhir dengan state ODD sehingga "1101" diterima oleh mesin Bila mesin
mendapat input:
101
urutan state yang terjadi
EVEN 1 ODD 0 ODD 1 EVEN
berakhir dengan state EVEN maka "101" ditolak oleh mesin.

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

Maka, kita bisa nyatakan untuk contoh pada gambar 2.1:


Q = {PKSR-Ø, SR-PK, PSR-K, R-PSK, S-PKR, PKR-S, PSK-R,
K-PSR, PK-SR, Ø-PKSR}
Σ = {p, k, s, r}
S = PKSR-Ø
F = {Ø-PKSR}

Sedang untuk contoh pada gambar 2.2:


Q = {ODD, EVEN)
Z = {0, 1}
S = EVEN
F = {ODD}

Finite state automata berdasar pada pendefinisian kemampuan berubah


state-state-nya bisa dikelompokkan ke dalam deterministik maupun non-
deterministik, yang selanjutnya akan kita bahas di sini.

2.2 DETERMINISTIC FINITE AUTOMATA

Pada Otomata Berhingga Deterministik/Defermmisfic Finite Automata,


selanjutnya kita sebut sebagai DFA, dari suatu state ada tepat satu state
berikutnya untuk setiap simbol masukan yang diterima.

Sebagai contoh, kita memiliki sebuah otomata seperti pada gambar 2.3.

Gambar 2.3 Mesin DFA


Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Konfigurasi Deterministic Finite Automata di atas secara formal


dinyatakan sebagai berikut.
Q = {qo, q1. q2}
Σ = {a,b}
S = qo
F = {q2}
Fungsi transisi yang ada sebagai berikut.
d(q0,a) = qo
d(q0,b) = qi
d(q1,a) = q1
d(q1,b) = q2
d(q2,a) = ql
d(q2,b) = q2

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

Perhatikan pada tabel transisi Deterministic Finite Automata di atas,


tampak bahwa kita mempunyai sebuah state berikutnya yang unik untuk setiap
pasangan state-input. Jadi untuk sebuah state dan input yang berlaku, kita bisa
menentukan tepat satu state berikutnya. Kita bisa menganggap tabel transisi
tersebut menyatakan aksi suatu mesin. Pada Deterministic Finite Automata,
d merupakan sebuah fungsi yang harus terdefinisi untuk semua pasangan state-
input yang ada di dalam Q X Σ. Dengan demikian apa pun state saat itu (current
state) atau input-nya, selalu terdapat satu dan hanya satu state berikutnya.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

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

Karena q2 termasuk state akhir, maka 'abb' berada dalam L(M)

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.

Gambar 2.4 contoh mesin DFA

Tabel transisi dari gambar 2.4 adalah sebagai berikut.


δ a b
qo q1 q1
q1 q1 qo
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

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.

Gambar 2.5 Mesin DFA dari suatu tabel transisi

Contoh lain, terdapat tabel transisi sebagai berikut.


δ 0 1
qo q2 q1
q1 q1 qo
q2 qo q1

dengan
S = qo
F = { qo, q2}
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Diagram transisinya dapat kita lihat pada gambar 2.6.

Gambar 2.6 Mesin D FA darijmatujahzl transisi

Perhatikan pada contoh-contoh Deterministic Finite Automata di atas, dari


setiap state selalu tepat ada satu state berikutnya untuk setiap simbol input yang
ada. Untuk lebih jelasnya dapat kita perhatikan contoh-contoh otomata berikut
yang bukan Deterministic Finite Automata.

Gambar 2.7 Finite Otomata non-DFA

Bisa kita lihat tabel transisinya dari gambar 2.7.


δ a b
qo q1 Ø
q1 q1 qo

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

Gambar 2.8 Finite Otomata non DFA

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.

2.3 NON-DETERMINISTIC FINITE AUTOMATA

Pada Non-deterministic Finite Automata (NFA) dari suatu state bisa


terdapat 0, 1, atau lebih busur keluar (transisi) berlabel simbol input yang sama.
Non-deterministic Finite Automata didefinisikan pula dengan lima (5) tupel M =
{Q, Σ, δ, S, F), dengan arti yang serupa pada Deterministic Finite Automata. Di
sini perbedaan ada pada fung-si transisinya, di mana untuk setiap pasangan state-
input, kita bisa memiliki O (nol) atau lebih pilihan untuk state berikutnya. Bisa
kita lihat contoh pada gambar 2.9
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Gambar 2.9 Mesin otomata NFA

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.

Suatu string diterima oleh Non-deterministic Finite Automata bila terdapat


suatu urutan transisi sehubungan dengan input string tersebut dari state awal
menuju state akhir. Misalkan saja L(M) adalah bahasa yang diterima oleh Non-
deterministic Finite Automata pada gambar 2.9. Tentukan apakah string 'ab'
termasuk dalam L(M). Untuk Non-deterministic Finite Automata kita harus
mencoba semua kemungkinan yang ada sampai terdapat satu yang mencapai state
akhir. Dalam contoh di atas, urutan transisi yang mencapai state akhir:
δ(q0,ab) = 5(q1,b) = q1
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Jadi untuk membuktikan suatu string diterima oleh Non-deter- ministic


Finite Automata tersebut kita buktikan suatu urutan transisi yang menuju state
akhir.
Contoh lainnya ditunjukkan pada gambar 2.10.

Gambar 2.10 Mesin otomata NFA

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

Seperti halnya pada Deterministic Finite Automata, pada Non-


deterministic Finite Automata kita bisa membuat diagram transisi dari tabel
transisinya dan sebaliknya.

2.4 EKUIVALENSI ANTAR DETERMINISTIC FINITE AUTOMATA

Misalkan terdapat dua buah Deterministic Finite Automata, M, dan M2,


yang masing-masing menerima bahasa L(Mj) dan L(M2). Jika L(Mt) = L(M2)
maka dua Deterministic Finite Automata tersebut dikatakan ekuivalen. Sebagai
contoh adalah Deterministic Finite Automata Mj dan M2 memiliki diagram
transisi seperti pada gambar 2.11 dan gambar 2.12.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Gambar 2.11 DFA M1

Gambar 2.12 DFA M2

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,

Gambar 2.14 DFA M4


Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

EKUIVALENSI
NON-DETERMINISTIC FINITE AUTOMATA KE DETERMINISTIC
FINITE AUTOMATA

3.1 TAHAPAN PENGUBAHAN NON-DETERMINISTIC FINITE


AUTOMATA KE DETERMINISTIC FINITE AUTOMATA

Dari sebuah mesin Non-deterministic Finite Automata dapat dibuat mesin


Deterministic Finite Automata-nya yang ekuivalen (bersesuaian). Ekuivalen di
sini artinya mampu menerima bahasa yang sama. Lihat finite state automata pada
gambar 3.1 dan gambar 3.2. Gambar 3.1 adalah Deterministic Finite Automata,
sedangkan gambar 3.2 adalah Non-deterministic Finite Automata. Meskipun yang
satu deterministik dan lainnya non-deterministik, kedua-duanya menerima bahasa
yang sama, yang dalam ekspresi regular = 0 (01)* (mengenai ekspresi regular
dapat Anda lihat pada bab 5).

Gambar 3.1 Mesin DFA

Gambar 3.2 Mesin NFA

Gambar 3.3 Mesin otomata NFA


Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Sekarang kita lihat bagaimana membuat suatu Deterministic Finite


Automata yang ekuivalen dengan sebuah. Non-deterministic Finite Automata.
Misalkan kita ingin membuat mesin Deterministic Finite Automata dari mesin
Non-deterministic Finite Automata pada gambar 3.3. Pertama-pertama yang kita
lakukan adalah membuat tabel transisi NFA tersebut. Bila diketahui Z = {0,1},
maka tabel transisinya adalah sebagai berikut.
δ 0 1
qo {qo,q1} {q1}
qi Ø {qo,q1}

Dengan adanya tabel transisi tersebut akan mempermudah kita melakukan


langkah selanjutnya. Kita akan mulai dari state awal, kemudian mengikuti
transisinya untuk membentuk state-state baru, untuk setiap state yang terbentuk
diikuti lagi transisinya sampai ter’cover' semua. Untuk lebih jelasnya kita lihat
contoh pengejaan berikut. Kita mulai dengan state awal seperti terlihat pada
gambar 3.4.

Gambar 3.4 Mulai dengan state awal

Selanjutnya, kita telusuri state berikutnya yang diperoleh dengan


memanfaatkan tabel transisinya:
• state {qo} bila memperoleh input 0 menjadi state {q0,q1}.
• state {qo} bila memperoleh input 1 menjadi state {q1}.
Kita lihat hasilnya pada gambar 3.5.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Gambar 3.5 Hasil dari penelusuran {qo}


Catatan:
Perhatikan bahwa di sini pada gambar setiap state kita tuliskan sebagai himpunan
state.

Ekivalensi Non-deterministic Finite Automata ke Deterministic Finite Automata

Selanjutnya, kita telusuri state-state baru yang terbentuk:


• state {q1} bila memperoleh input 0 menjadi state Ø;
• state {q1} bila memperoleh input 1 menjadi state {qo,q1};
• state {q0,q1} bila memperoleh input 0 menjadi state {q0,q1}, ini diperoleh
dari δ(qo,0)={qo,q1) digabung dengan δ(q1,0)= 0, maka hasilnya
d({q0,q1},0)={q0,q1};
• state {qo,q1} bila memperoleh input 1 menjadi state (qo,q1,}, ini diperoleh
dari δ(q0,l)={q1) digabung dengan δ(q1,1)= {qo,q1}, maka hasilnya
δ({qo,q1},l)={qo,q1}.

Catatan:
Perhatikan bahwa state yang sama cukup ditulis sekali saja.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Kita bisa melihat hasilnya pada gambar 3.6.

Gambar 3.6 Hasil setelah penelusuran {q1} dan {qo, q1}

Catatan:
Perhatikan bahwa state q1 menerima input 0 menjadi state 0, di sini 0 kita
gambarkan juga sebagai sebuah state.

Selanjutnya, kita lihat semua state sudah kita telusuri/dirunut, tinggal


state 0. State 0 menerima input 0 atau 1 menjadi state 0, atau 8(0,0)= 0 dan
8(0,1)= 0. Hasilnya dapat kita lihat pada gambar 3.7.

Gambar 3.7 Hasil setelah semua ditelusuri

Kita ingat pada mesin Non-deterministic Finite Automata semula,


himpunan state akhir adalah {q1, maka pada Deterministic Finite Automata hasil
perubahan state-state akhir adalah semua state yang mengandung {q1}. Maka,
state akhirnya sekarang adalah state {q1} dan state {qo,q1}, atau secara formal:
F = {{q1}, {qo,q1}
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Dengan demikian, Deterministic Finite Automata hasil ekuivalensi dengan


Non-deterministic Finite Automata pada gambar 3.3 dapat kita lihat pada gambar
3.8.

Gambar 3.8 Mesin DFA yang ekuivalen dengan NFA pada gambar 3.3

Kita bisa memeriksa apakah kedua otomata tersebut ekuivalen. Untuk


membuktikannya kita perlu memperlihatkan bahwa suatu bahasa yang diterima
oleh Non-deterministic Finite Automata juga diterima oleh Deterministic Finite
Automata ekuivalennya tersebut. Bila diketahui Non-deterministic Finite
Automata semula (gambar 3.3) menerima string '001', maka seharusnya
Deterministic Finite Automata pada gambar 3.8 juga menerima string tersebut.
Kita lihat:
δ(qo, 001) = δ({q0,ql}, 01) = δ{{ q0,ql }1) = {q0,ql}
Karena state { q0,ql } termasuk state akhir, maka berarti string tersebut diterima.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

NON-DETERMINISTIC FINITE AUTOMATA DENGAN ε-MOVE

4.1 NON-DETERMMISTIC FINITE AUTOMATA DENGAN ε-MOVE

Di sini kita mempunyai jenis otomata baru yang disebut Non-


deterministic Finite Automata dengan ε-move (ε di sini bisa dianggap sebagai
'empty'). Pada Non-deterministic Finite Automata dengan ε-move (transisi ε),
diperbolehkan mengubah state tanpa membaca input. Disebut dengan transisi ε
karena tidak bergantung pada suatu input ketika melakukan transisi. Contohnya
bisa dilihat pada gambar 4.1.

Gambar 4.1 Mesin NFA dengan ε-move

Penjelasan gambar 4.1:


• dari qo tanpa membaca input dapat berpindah ke q1
• dari q1 tanpa membaca input dapat berpindah ke q2
• dari q4 tanpa membaca input dapat berpindah ke q1

Salah satu kegunaan dari transisi ε ini adalah memudahkan kita untuk
mengkombinasikan finite state automata.

4.2 ε -CLOSURE UNTUK SUATU NON-DETERMMISTIC FINITE AUTOMATA


DENGAN ε -MOVE

Sekarang kita akan menambah suatu pengertian baru yang disebut ε-


closure. ε-closure adalah himpunan state-state yang dapat dicapai dari suatu state
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

tanpa membaca input. Misalkan saja ε-closure{qo) = himpunan himpunan state-


state yang dapat dicapai dari state q0 tanpa membaca input. Maka dengan melihat
gambar 4.1, ε-closure (qo) = {qo,q1,q2}, artinya dari state tanpa membaca input
dapat mencapai state qo,q1, dan q2. ε-closure untuk state lainnya bisa dilihat
sebagai berikut.
ε-closure(qj)= lqp q2}
ε-closure(q2)= {q2}
ε-closure(q3)= (q3)
ε-closure(q4)= {qt, q2, q4i
Contoh lain kita lihat pada gambar 4.2.

Gambar 4.2 Mesin NFA dengan e-move

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

4.3 EKUIVALENSI NON-DETERMINISTIC FINITE AUTOMATA DENGAN ε -MOVE


KE NON-DETERMINISTIC FINITE AUTOMATA TANPA ε -MOVE

Dari sebuah Non-deterministic Finite Automata dengan e-move dapat kita


peroleh Non-deterministic Finite Automata tanpa ε-move yang ekuivalen.
(Dalam buku ini sebutan NFA saja mengacu kepada NFA tanpa ε-move).
Contohnya, bila kita punya NFA ε-move, seperti pada gambar 4.3.

Gambar 4.3 NFA ε –move

Gambar 4.4 NFA tanpa ε-move ekuivalen gambar 4.3

Perhatikan bahwa Non-deterministic Finite Automata ε-move semula


menerima bahasa yang memuat string 'b', selanjutnya kita lihat bahwa Non-
deterministic Finite Automata tanpa ε-move pada gambar 4.4 juga mampu
menerima bahasa yang memuat string 'b'. Maka, kita dapat menyatakan bahwa
kedua mesin tersebut ekuivalen, karena mampu menerima bahasa yang sama.
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

Tabel transisi dari NFA ε-move pada gambar 4.3.


δ a b
qo Ø Ø
q1 q2 q3
q2 Ø Ø
q3 Ø Ø

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}

Kemudian kita cari δ dengan memanfaatkan tabel transisi dan e-closure


yang kita peroleh sebelumnya, sebagai berikut.

δ'(q0, a) = ε_closure( δ (ε_closure(q0), a))


= ε_closure( δ ({q0, q1}, a))
= ε_closure(q2)
= {q2}

δ'(q0, b) = ε _closure( δ (ε _closure(qo), b))


= ε _closure( δ ({q0, q1}, b))
= ε _closure(q3)
= {q3}

δ'(q1, a) = ε _closure( δ (e.closure(qo), a))


= ε _closure( δ ({q1}, a) )
= ε _closure(q2)
= {q2}

δ'(q1, b) = ε _closure{ δ (ε.closure(q1), b))


= ε _closure( δ {{q1}, b))
= ε _closure(q3)
= {q3}

δ'(q2, a) = ε _closure( 5 (ε_closure(q2), a))


= ε _closure( 8 ({q2}, a))
= ε _closure(0)
= Ø
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

δ'(q2, b) = ε __closure( 8 (ε_closure(q2), b))


= ε _closure( 8 ({q2}, b))
= e_closure(0)
= Ø
δ'(q3, a) = e_closure( 8 (e_closure{q3), a))
= e_closure( 8 ({q3}, a))
= e_closure(0)
= Ø
δ'(q3, b) = e_closure( δ (e_closure(q3), b))
= e_closure( δ ({q3}, b))
= e_closure(0)
= Ø

Kita bisa melihat tabel transisi untuk NFA tanpa e-move dari hasil di atas.
δ' a b
qo q2 q3
q1 q2 q3
q2 Ø Ø
q3 Ø Ø

Akhirnya kita tentukan himpunan state akhir untuk Non-deter ministic


Finite Automata tanpa ε-move ini. Himpunan state akhir semula adalah {q3}.
Karena tidak ada state lain yang e-closure-nya memuat q3 maka himpunan state
akhir sekarang tetap {q3}.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

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.

5.2 NOTASI EKSPRESI REGULAR

Sekarang kita akan memperkenalkan notasi baru di sini, yaitu


‘*’, ‘+’, ‘+’, ‘’, ‘.’:

*
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

Contoh ekspresi regular (selanjutnya kita singkat sebagai ER adalah sebagai


berikut.
• ER: ab*cc
Contoh string yang dibangkitkan: abcc, abbcc, abbbcc, abbbbcc, acc (b bisa
tidak muncul atau muncul sejumlah berhingga kali).
• ER: 010*
Contoh string yang dibangkitkan: 01, 010, 0100, 01000 (jumlah 0 di ujung
bisa tidak muncul, bisa muncul berhingga kali).
• ER: a*d
Contoh string yang dibangkitkan: d, ad, aad, aaad.
• ER: a+d
Contoh string yang dibangkitkan: ad, aad, aaad (a minimal muncul sekali).
• ER: a*b* (ingat '' berarti atau)
Contoh string yang dibangkitkan: a, b, aa, bb, aaa, bbb, aaaa, bbbb,
• ER: (ab)
Contoh string yang dibangkitkan: a, b.

• ER: (ab)*
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

5.3 HUBUNGAN EKSPRESI REGULAR DAN FINITE STATE


AUTOMATA

Untuk setiap ekspresi regular ada satu Non-deterministic Finite Automata


dengan transisi ε (NFA e-move) yang ekuivalen. Sementara untuk setiap
Deterministic Finite Automata ada satu ekspresi regular dari bahasa yang diterima
oleh Deterministic Finite Automata. Sederhananya kita bisa membuat suatu Non-
deterministic Finite Automata e-move dari suatu ekspresi regular. Contohnya bisa
dilihat pada gambar 5.3, 5.4, dan 5.5. Yang perlu diperhatikan di situ, state akhir
akan menandakan apakah suatu input diterima atau tidak.

Gambar 5.3 NFA ε-move untuk ER: ab

Gambar 5.4 NFA ε-move untuk ER: a*b

Gambar 5.5 NFA E-move untuk ER: aub


Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Kemudian dari Non-deterministic Finite Automata E-move tersebut dapat


kita ubah ke Non-deterministic Finite Automata, dan selanjutnya ke Deterministic
Finite Automata, atau prosesnya sebagai berikut.
NFA ε-move  NFA  DFA

Bila ekspresi regularnya cukup sederhana kita bisa saja langsung


mengkonstruksi NFA-nya, tanpa melalui NFA ε-move. Misalkan saja NFA tanpa
e-move untuk ER: ab bisa dilihat pada gambar 5.6.

Gambar 5.6 NFA untuk ER: ab

Gambar 5.7 NFA untuk ER: a b


Contoh-contoh lain bisa dilihat pada gambar 5.8 sampai 5.15.

Gambar 5.8 NFA untuk ER: 010*

Gambar 5.9 NFA untuk ER: 0 (1 0)


Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Gambar 5.10 NFA untuk ER: 0 (1 0)*

Gambar 5.11 NFA untuk ER: 01*0

Gambar 5.12 NFA untuk ER: 0*10*

Gambar 5.13 NFA untuk ER:a*

Gambar 5.14 NFA untuk ER: a (ba)*

Gambar 5.15 NFA untuk ER: (ab)*


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*.

Gambar 5.16 Mesin FSA

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

Gambar 5.17 Mesin FSA

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*)*.

Gambar 5.18 Mesin FSA


Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

FINITE STATE AUTOMATA DENGAN OUTPUT


7.1 MESIN MOORE

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.

Pohon penurunan (derivation tree / parse tree) berguna untuk


menggambarkan bagaimana memperoleh suatu string (untai) dengan cara
menurunkan simbol-simbol variabel menjadi simbol-simbol terminal. Setiap
simbol variabel akan diturunkan menjadi terminal, sampai tidak ada yang belum
tergantikan.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Misalnya terdapat tata bahasa bebas konteks dengan aturan produksi


(simbol awal S, selanjutnya di dalam bab ini digunakan sebagai simbol awal
untuk tata bahasa bebas konteks adalah S):
S →AB
A→aA | a
B → bB | b
Akan kita gambarkan pohon penurunan untuk memperoleh untai: 'aabbb'.
Pada pohon tersebut simbol awal akan menjadi akar Iroot). Setiap kali penurunan
dipilih aturan produksi yang menuju ke solusi. Simbol-simbol variabel akan
menjadi simpul-simpul yang mempunyai anak. Simpul-simpul yang tidak
mempunyai anak akan menjadi simbol terminal. Kalau kita baca simbol terminal
yang ada pada gambar 8.2 dari kiri ke kanan akan diperoleh untai 'aabbb'.

Gambar 8.2 Pohon penurunan untuk untai 'aabbb'

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.

Kita dapat melihat pohon penurunannya pada gambar 8.3. Meskipun


proses penurunannya berbeda, namun akan tetap memiliki pohon penurunan yang
sama.

Gambar 8.3 Pohon penurunan untuk untai 'aabbaa'

Biasanya persoalan yang diberikan berkaitan dengan pohon penurunan


adalah untuk mencari penurunan yang hasilnya menuju kepada suatu untai yang
ditentukan. Dalam hal ini, perlu untuk melakukan percobaan pemilihan aturan
produksi yang bisa menuju ke solusi. Misalkan sebuah tata bahasa bebas konteks
memiliki aturan produksi sebagai berikut.
S → aB | bA
A → a | aS | bAA
B → b | bS | aBB

Pohon penurunan untuk memperoleh 'aaabbabbba' bisa dilihat pada gambar


8.4.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Gambar 8.4 Pohon penurunan untuk untai 'aaabbabbba'

8.3 AMBIGUITAS

Ambiguitas/kedwiartian terjadi bila terdapat lebih dari satu pohon


penurunan yang berbeda untuk memperoleh suatu untai.
Misalkan terdapat tata bahasa bebas konteks:
S →A | B
A→a
B→a

Untuk memperoleh untai 'a' bisa terdapat dua cara penurunan berikut ini.
• SAa
• SBa

Contoh lain, terdapat tata bahasa bebas konteks:


S →SbS | ScS | a

Kita bisa menurunkan untai 'abaca' dalam dua cara berikut ini.
• S  SbS  SbScS SbSca Sbaca  abaca.
• S  ScS  SbScS  abScS  abacS  abaca.

Pohon penurunannya bisa dilihat pada gambar 8.5 dan 8.6.


Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Gambar 8.5 Pohon penurunan untuk 'abaca'

Gambar 8.6 Pohon penurunan untuk 'abaca'


Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

PENYEDERHANAAN TATA BAHASA BEBAS KONTEKS


9.1 TUJUAN PENYEDERHANAAN

Penyederhanaan tata bahasa bebas konteks bertujuan untuk melakukan


pembatasan sehingga tidak menghasilkan pohon penurunan yang memiliki
kerumitan yang tak perlu atau aturan produksi yang tidak berarti. Misalkan
terdapat tata bahasa bebas konteks (dengan simbol awal S, dalam bab ini kita
gunakan sebagai simbol awal untuk tata bahasa bebas konteks adalah S):
S → AB | a
A→a
Kelemahan tata bahasa bebas konteks di atas, aturan produksi S → AB
tidak berarti karena B tidak memiliki penurunan
Untuk tata bahasa bebas konteks berikut.
S →A
A →B
B →C
C →D
D →a | A
memiliki kelemahan terlalu panjang jalannya padahal berujung pada S → a,
produksi D → A juga menyebabkan kerumitan.

Suatu tata bahasa bebas konteks dapat disederhanakan dengan melakukan


cara berikut ini.
1. Penghilangan produksi useless (tidak berguna).
2. Penghilangan produksi unit.
3. Penghilangan produksi ε.

Selanjutnya akan kita bahas satu persatu cara-cara penyederhanaan tersebut.

9.2 PENGHILANGAN PRODUKSI USELESS


Dalam konteks ini, produksi useless didefinisikan sebagai:
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

• 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).

Contoh, terdapat tata bahasa bebas konteks:


S → aSa | Abd | Bde
A→ Ada
B → BBB | a
Kita bisa melihat bahwa:
• Simbol variabel A tidak memiliki penurunan yang menuju terminal, sehingga
bisa dihilangkan;
• Konsekuensi no (1), aturan produksi S à Abd tidak memiliki penurunan;
maka tata bahasa bebas konteks setelah disederhanakan menjadi:
S → aSa | Bde
B → BBB | a
Contoh, terdapat tata bahasa bebas konteks adalah sebagai berikut.
S → Aa | B
A → ab | D
B→b|E
C → bb
E → aEa
Kita bisa melihat bahwa:
1) Aturan produksi A→ D, simbol variabel D tidak memiliki penurunan;
2) Aturan produksi C → bb, bila kita coba melakukan penurunan dari simbol awal
S, dengan jalan mana pun tidak akan pernah mencapai C;
3) Simbol variabel E tidak memiliki aturan produksi yang menuju terminal (E →
aEa satu-satunya aturan produksi dari E);
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

4) Konsekuensi no (3) Aturan produksi B → E, simbol variabel E tidak memiliki


penurunan.

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

Contoh, tata bahasa bebas konteks adalah sebagai berikut.


S → aB
A → bcD | dAC
B → e | Ab
C → bCb j adF | ab
F → cFB
Kita bisa melihat bahwa:
• Aturan produksi A → bcD, variabel D tidak memiliki penurunan;
• Konsekuensi no (1), simbol variabel A tidak memiliki penurunan yang
menuju terminal (tinggal A → dAC);
• Konsekuensi no (2), B → Ab tidak memiliki penurunan;
• Simbol variabel F tidak memiliki penurunan yang menuju terminal;
• Konsekuensi no (4), C → adF tidak memiliki penurunan. Setelah
disederhanakan, akan menjadi:
S→aB
B→e
C → bCb | ab
Contoh, tata bahasa bebas konteksnya adalah sebagai berikut.
S→aBD
B →cD | Ab
D →ef
A→ Ed
F → dc
Kita bisa melihat bahwa:
• Aturan produksi A →Ed, E tidak memiliki penurunan;
• Aturan produksi F dc, redundan. Sisa aturan produksi:
S → aBD
B → cD | Ab
D → ef
Kita lihat sekarang, B → Ab, A tidak memiliki penurunan. Aturan produksi
setelah disederhanakan:
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.

9.3 PENGHILANGAN PRODUKSI UNIT

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

sehingga aturan produksi setelah penyederhanaan:


S → Sb
S → dd | ef
C →dd
C →ef
D →dd
Contoh, tata bahasa bebas konteks:
S → →→A
S → Aa
A→ B
B→C
B→b
C→D
C → ab
D→ b
Penggantian yang dilakukan:
• C→DC→b
• B → C  B → b | ab, karena B -> b sudah ada, maka kita cukup tuliskan
B → ab
• A → B  A → ab | b
• S → A  S ab | b
Sehingga aturan produksi setelah penyederhanaan:
S → ab │ b
S →Aa
A → ab | b
B →ab
B →b
C→b
C → ab
D→b
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Contoh, tata bahasa bebas konteks:


S →Cba | D
A → bbC
B → Sc | ddd
C→ eA | f | C
D → E | SABC
E → gh
Penggantian yang dilakukan:
• D →E menjadi D →gh
• C → C, kita hapus
• S → D menjadi S → gh | SABC
sehingga aturan produksi setelah penyederhanaan:
S → Cba | gh | SABC
A → bbC
B →Sc│ddd
C → eA│f
D → gh SABC
E → gh

9.4 PENGHILANGAN PRODUKSI ε

Produksi e adalah produksi dalam bentuk


Α→e
atau bisa dianggap sebagai produksi kosong (empty). Penghilangan produksi e
dilakukan dengan melakukan penggantian produksi yang memuat variabel yang
bisa menuju produksi ε, atau biasa disebut nullable. Prinsip penggantiannya bisa
dilihat kasus berikut ini.
S → bcAd
A→ e
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Pada kasus di atas A nullable, serta A -> e satu-satunya pro-duksi dari A,


maka variabel A bisa ditiadakan, hasil penyederhanaan tata bahasa bebas konteks
menjadi:
S → bed
Tetapi bila kasusnya:
S → bcAd
A → bd | e
Pada kasus di atas A nullable, tapi A → ε bukan satu-satunya produksi
dari A, maka hasil penyederhanaan:
S → bcAd | bed
A→ bd
Contoh, terdapat tata bahasa bebas konteks:
S → Ab | Cd
A→ d
C→ e

Variabel yang nullable adalah variabel C. Karena penurunan C → ε


merupakan penurunan satu-satunya dari C, maka kita ganti S → Cd menjadi S →
d. Kemudian produksi C → ε kita hapus.

Tata bahasa bebas konteks setelah penyederhanaan:


S → Ab | d
A→d
Contoh, terdapat tata bahasa bebas konteks:
S →dA | Bd
A→bc
A→e
B→c
Variabel yang nullable adalah variabel A. A → ε bukan penurunan satu-
satunya dari A (terdapat A→ bc), maka kita ganti S → dA menjadi S → dA | d.
A→ ε kita hapus.
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

Selanjutnya kita lihat variabel B dan C memiliki penurunan e, meskipun


bukan satu-satunya penurunan, maka kita lakukan penggantian:
• A → AB  A AB | A [ B
• S → AaC  S → AaC | aC | Aa | a
• B → ε dan C → ε 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

Variabel yang nullable adalah A, B, C. Dari S AB, maka S juga nullable.


Kita lakukan penggantian:
• A → aCa  A aa
• B → bA  B bA | b
• B → BB  B BB j B
• A → abB  A → abB | ab
• S → AB  S → AB | A | B | ε
• C → ε, B→ ε, A→ ε dihapus
Catatan:
Perhatikan bahwa untuk penggantian S → AB kita tetap mempertahankan
produksi S → e, karena S merupakan simbol awal. Ini merupakan satu-satunya
perkecualian produksi ε yang tidak dihapus, yaitu produksi ε yang dihasilkan
oleh simbol awal.

Hasil akhir penyederhanaan:


S → AB | A | B | e
A → abB | ab | aa
B → bA | b | BB | B
Contoh, tata bahasa bebas konteks:
S → aAb
A → aAb | ε
Hasil penyederhanaan:
S → aAb | ab
A → aAb | ab
Contoh, tata bahasa bebas konteks:
S → ABaC
A → BC
B →b | ε
C→ D | ε
D→d
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

BENTUK NORMAL CHOMSKY


10.1 PENGERTIAN BENTUK NORMAL CHOMSKY

Bentuk normal Chomsky/Chomsky Normal Form (CNF) merupakan salah


satu bentuk normal yang sangat berguna untuk tata bahasa bebas konteks (CFG).
Bentuk normal Chomsky dapat dibuat dari sebuah tata bahasa bebas konteks yang
telah mengalami penyederhanaan, yaitu penghilangan produksi useless, unit, dan
e. Dengan kata lain, suatu tata bahasa bebas konteks dapat dibuat menjadi bentuk
normal Chomsky dengan syarat tata bahasa bebas konteks tersebut:
• tidak memiliki produksi useless,
• tidak memiliki produksi unit,
• tidak memiliki produksi E.

Aturan produksi dalam bentuk normal Chomsky ruas kanannya tepat


berupa sebuah terminal atau dua variabel. Misalkan:
A → BC
A→b
B→a
C → BA | d

10.2 PEMBENTUKAN BENTUK NORMAL CHOMSKY

Langkah-langkah pembentukan bentuk normal Chomsky secara umum


sebagai berikut:
 Biarkan aturan produksi yang sudah dalam bentuk normal Chomsky.
 Lakukan penggantian aturan produksi yang ruas kanannya memuat simbol
terminal dan panjang ruas kanan > 1.
 Lakukan penggantian aturan produksi yang ruas kanannya memuat > 2
simbol variabel.
 Penggantian-penggantian tersebut bisa dilakukan berkali-kali sampai
akhirnya semua aturan produksi dalam bentuk normal Chomsky.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

 Selama dilakukan penggantian, kemungkinan kita akan memperoleh


aturan-aturan produksi baru, dan juga memunculkan simbol- simbol
variabel baru.

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

terbentuk aturan produksi dan simbol variabel baru:


P1 → a
P2 → b
P3 → c
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

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

PENGHILANGAN REKURSIF KIRI


11.1 ATURAN PRODUKSI REKURSIF

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 β=(VT)* 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 | ε

Gambar 11.1 Pohon penurunan sebuah CFG yang rekursif kiri


Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

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.

11.2 TAHAPAN PENGHILANGAN REKURSIF KIRI

Langkah-langkah penghilangan rekursif kiri adalah sebagai berikut.


 Pisahkan aturan produksi yang rekursif kiri dan yang tidak.
Contoh:
Aturan produksi yang rekursif kiri:
A → Aα1 | Aα2 | Aα3 | Aαn
Aturan produksi yang tidak rekursif kiri (termasuk produksi ε):
A → β1 | β 2 | β 3 | ........ β m

 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

S → Sab | aSc | dd | ff | Sbd


Pertama-tama kita lakukan pemisahan aturan produksi. Aturan produksi
yang rekursif kiri:
S → Sab | Sbd
Dari situ kita tentukan:
untuk simbol ruas kiri S: α1 = ab, α2 = bd
Aturan produksi yang tidak rekursif kiri:
S → aSc | dd | ff

Dari situ kita dapatkan:


untuk simbol ruas kiri S: β1=aSc, β2=dd, β3=ff

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

Hasil akhir setelah penghilangan rekursif kiri adalah sebagai berikut.


S → aSc ] dd | ff
S → aScZ1| ddZ1 | ffZt
Z1 → ab | bd
Z1 → abZ1 | bdZj
Catatan:
Pada kasus di atas S adalah satu-satunya simbol variabel yang menghasilkan
produksi rekursif kiri.
Contoh lain, terdapat tata bahasa bebas konteks:
S → Sab | Sb | cA
A→ Aa | a | bd
Pertama-tama kita lakukan pemisahan aturan produksi
Aturan produksi yang rekursif kiri:
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

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

Dari situ kita dapatkan:


untuk simbol ruas kiri S: β1 = cA
untuk simbol ruas kiri A: β1 = a, β 2 = bd
Kita lakukan penggantian aturan produksi yang rekursif kiri: Untuk yang
memiliki simbol ruas kiri S: S → Sab | Sb, digantikan oleh:
i. S → cAZ1
ii. Z1 → ab | b
iii. Z1 → abZ1 | bZ1
Untuk yang memiliki simbol ruas kiri A:
A → Aa, digantikan oleh:
i. A→ aZ2 | bdZ2
ii. Z2 → a *
iii. Z2 → aZ2
Hasil akhir setelah penghilangan rekursif kiri adalah sebagai berikut.
S → cA
A → a | bd
S → cAZ1
Zl →ab | b
Z1→ abZ2 | bZ2
A → a Z2 | bdZ2
Z2 → a
Z2 → aZ2
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

BENTUK NORMAL GREIBACH


12.1 PENGERTIAN BENTUK NORMAL GREIBACH

Bentuk normal Greibach merupakan bentuk normal yang memiliki banyak


konsekuensi teoretis dan praktis. Dalam bentuk normal. Greibach kita membatasi
posisi munculnya terminal- terminal dan variabel-variabel. Suatu tata bahasa
bebas konteks (CFG) dikatakan dalam bentuk normal Greibach/Greibach Normal
Form, selanjutnya kita sebut sebagai GNF, jika setiap aturan produksinya ada
dalam bentuk:
A → aa
a: simbol terminal (tunggal), a  T
α: rangkaian simbol-simbol variabel (V*)

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.

Terdapat dua cara pembentukan bentuk normal Greibach, yaitu melalui


substitusi dan perkalian matriks. Pada bagian berikutnya kita membahas kedua
cara tersebut.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

12.2 PEMBENTUKAN BENTUK NORMAL GREIBACH DENGAN


SUBSTITUSI

Secara umum langkah-langkah untuk mendapatkan bentuk normal


Greibach adalah sebagai berikut.
1. Tentukan urutan simbol-simbol variabel yang ada dalam tata bahasa.
Misalkan, terdapat m variabel dengan urutan AJ( Ap ..., Am
2. Berdasarkan urutan simbol yang ditetapkan pada langkah (1) seluruh
aturan produksi yang ruas kanannya diawali dengan simbol variabel dapat
dituliskan dalam bentuk:
Ah→ A1 
di mana h <> i (rekursif kiri sudah dihilangkan),  bisa berupa simbol-
simbol variabel.
a. Jika h < i, aturan produksi ini sudah benar (tidak perlu diubah)
b. Jika h > i, aturan produksi belum benar. Lakukan substitusi berulang-
ulang terhadap Ai (ganti Ai pada produksi ini dengan ruas kanan
produksi dari variabel A.) sehingga suatu saat diperoleh produksi
dalam bentuk:
Ah→ A1  (di mana h <p)
i) Jika h = p, lakukan penghilangan rekursif kiri.
ii) Jika h < p, aturan produksi sudah benar.

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

Produksi-produksi yang lain ada dalam bentuk:


A→ a  (a = simbol terminal)
Bx→ 
Bx = simbol variabel baru yang muncul sebagai akibat dari operasi
penghilangan rekursif kiri).

5. Bentuk normal Greibach diperoleh dengan cara melakukan substitusi


mundur mulai dari variabel Am, lalu Am.1A m.2... Dengan cara ini aturan
produksi dalam bentuk Ax → Ay dapat diubah sehingga ruas kanannya
dimulai dengan simbol terminal.
6. Produksi yang dalam bentuk Bx →  juga dapat diubah dengan cara
substitusi seperti pada langkah (5).

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

Setelah semua aturan produksi sudah memenuhi ketentuan urutan variabel,


kita lakukan substitusi mundur pada aturan produksi yang belum dalam bentuk
normal Greibach ('=>' dibaca 'menjadi'):
C →DD  C →aBD j dBD
S → CA  S → aBDA | dJBDA
Perhatikan bahwa substitusi mundur dimulai dari aturan produksi yang memiliki
ruas kiri dengan urutan variabel paling akhir (kasus di atas: S<A<B<C<D, maka
C lebih dulu disubstitusi daripada S).
Hasil akhir aturan produksi yang sudah dalam bentuk normal Greibach
adalah sebagai berikut.
S → aBDA j dBDA
A →a │ d
B→b
C → aBD │dBD
D → aB I dB
Catatan:
Perhatikan bahwa setiap substitusi kita lakukan pada simbol variabel pertama
pada ruas kanan (pada aturan produksi yang belum bentuk normal Greibach
tentunya).

Prinsipnya sebagai berikut.


 Biarkan aturan produksi yang sudah dalam bentuk normal Greibach.
 Tentukan pengurutan simbol variabel, berdasarkan kondisi aturan produksi
yang ada buatlah urutan sedemikian sehingga memudahkan untuk proses
selanjutnya. Mulailah terlebih dahulu dari simbol awal.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

 Lakukan perubahan pada aturan produksi yang belum memenuhi


ketentuan urutan tersebut dan bila perlu selama proses itu bisa dilakukan
substitusi dan penghilangan rekursif kiri.
 Lakukan substitusi mundur sedemikian rupa sehingga semua aturan
produksi akan diawali dengan tepat sebuah simbol terminal. Proses
substitusi mundur dimulai dari aturan produksMengan urutan paling akhir.
 Lakukan substitusi mundur juga pada aturan produksi baru yang muncul
sebagai hasil penghilangan rekursif kiri.

Contoh lain (simbol awal A):


A→BC
B → CA | b
C → AB | a
Kita tentukan urutan simbol: A, B, C (A<B<C).
A → BC (sudah memenuhi karena A<B)
B → CA (sudah memenuhi karena B<C)
C → AB (padahal C > A sehingga harus diubah)

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

Setelah semua aturan produksi sudah memenuhi ketentuan urutan variabel,


kita lakukan substitusi mundur:
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

B → CA  B → bCBZ1A | aZ1A | bCBA | aA


A → BC  A bCBZjAC | aZ1AC | bCBAC | aAC | bC

Selanjutnya lakukan pula substitusi pada aturan produksi dengan variabel


baru yang terbentuk (pada contoh ini Z1):
 Z1 →ACB  Z1 →bCBZ1ACCB | aZ1ACCB | bCBACCB | aACCB |
bCCB
 Z1 →ACBZj  Z1 → bCBZ1CCBZ1 | aZ1CCBZ1 | bCBACCBZ1 |
aACCBZ1 | bCCBZ1

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


13.1 MEKANISME KERJA PUSH DOWN AUTOMATA

Push Down Automata, selanjutnya kita sebut sebagai PDA, merupakan


mesin otomata dari bahasa bebas konteks. Bila sebuah finite state automata atau
otomata berhingga mempunyai kemampuan "memori" yang terbatas, pada
otomata push down atau Push Down Automata didefinisikan sebuah tempat
penyimpanan yang tidak terbatas berupa stock/tumpukan.

Stack ialah kumpulan dari elemen-elemen sejenis dengan sifat


penambahan elemen dan pengambilan elemen melalui suatu tempat yang disebut
top of stack (puncak stack), selanjutnya kita sebut saja sebagai top stack. Kita
ingat bahwa sebuah stack diketahui top/puncaknya, dengan aturan pengisian
LIFO (Last In First Out). Pengambilan elemen dari stack dinyatakan dengan
operasi pop, sedang memasukkan elemen ke dalam stack dengan operasi push.
Setiap elemen stack bisa memuat satu simbol, yang pada push down automata
disebut sebagai simbol stack.
Contoh sebuah stack:
top stack → A
D
E

Bila dilakukan operasi pop, maka kondisi stack menjadi:


top stack → D
E

Bila dilakukan operasi push B, maka kondisi stack menjadi:


top stack → B
D
E
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Sebuah push down automata dinyatakan dalam 7 tupel, M= (Q, Σ, Γ, , S,


F, Z), di mana:
Q = himpunan state
Σ = himpunan simbol input
Γ = simbol-simbol tumpukan/stacfc
 = fungsi transisi
S = state awal, S G Q
F = himpunan final state, F c Q
Z = simbol awal tumpukan/fop stack, Z e T

Dari komponen di atas bisa kita lihat:


 definisi untuk: Q, S, S, F sama dengan yang ada pada finite state
automata;
 tupel baru di situ adalah: T dan Z yang berhubungan dengan stack;
 A memiliki kemiripan dengan δ pada finite state automata, dengan
beberapa perbedaan (akan dijelaskan nanti).

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.

Setelah membuat pilihan, kemudian push down automata membaca simbol


input berikutnya.
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

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}

PDA tersebut memiliki fungsi transisi sebagai berikut.


A(qi,ε ,Z) = {(q2, Z)}
A(ql, a, Z) = {(q1, AZ))
A(q1, b1 Z) = {(q1 BZ)}
A(q1, a, A) = {(q1, AA)}
A(q1, b, A) = {(q1, ε)}
A(q1, a, B) = {(q1, ε)}
A(q1, b, B) = {(q1, BB)}
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

Kita bisa membaca fungsi transisi tersebut sebagai berikut.


(q1, a, Z) = {(q1, AZ)}
mesin dengan konfigurasi:
state q1 dan top-stack Z membaca input 'a'

konfigurasi menjadi:
state q., push A ke stack, A menjadi top-stack
A

(q1, b, A) = {ql, ε)}


mesin dengan konfigurasi:
state q1 dan top-stack A membaca input ‘b’

konfigurasi menjadi:
state q,, A di pop, elemen di bawah A menjadi top-stack

(q1, ε, Z) = {(q2, Z)}


mesin dengan konfigurasi:
state q1 dan top-stack Z, serta tanpa membaca input (ε)
Z
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

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

2. membaca input ‘b’


fungsi transisinya: (q1, b, A) = {(q1, e)}
konfigurasi mesin menjadi: state q1, top stack di pop
Z

3. membaca input 'b'


fungsi transisinya: (q1, b, Z) = {(q1, BZ)} konfigurasi
mesin menjadi: state q1, B di push
B

Z
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

4. membaca input 'a'


fungsi transisinya: (q1, a, B) = {(q1, ε)} konfigurasi mesin
menjadi: state q1 top stack di pop
Z

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

 (q1, 0, Z) = {q1, BZ)}


 (q1, 0, B) = {q1, BB)}
 (q1, 0, G) = {q1, BG)}
 (q1, 2, Z) = {q2, Z)}
 (q1, 2, B) = {q2, B)}
 (q1, 2, G) = {q2, G)}
 (q2, 0, B) = {q2, ε)}
 (q2, ε, Z) = {q2, ε)}
 (q1, 1, B) = {q1, GZ)}
 (q1, 1, G) = {q1, GB)}
 (q1, 1, G) = {q1, GG)}
 (q1, 1, G) = {q2, ε)}

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

2. membaca input '2'


fungsi transisinya: (q1, 2, B) = {(q2, B)}
konfigurasi mesin menjadi: state q2, stack tetap
B

Z
Bertha MW Hutajulu
Buku Teori Bahasa dan Otomata

3. membaca input '0'


fungsi transisinya: (q2, 0, B) = {(q2, e)} konfigurasi mesin
menjadi: state q2, B di pop
B

4. tanpa membaca input (e)


fungsi transisinya: (q2> ε, Z) = {(q2, e)} konfigurasi mesin
menjadi: state q2> Z di pop Stack kosong.

Semua input sudah selesai dibaca. Stack kosong, berarti string tersebut
diterima oleh push down automata.

----- o O o -----