Anda di halaman 1dari 12

Teori Bahasa dan Otomata

Teori bahasa dan otomata merupakan bagian dari teori komputasi pada ilmu komputer.
Beberapa teori komputasi datang dari bahasa dan rekayasa sistem, terutama yang berbasiskan
matematika. Dalam hal ini penekanannya adalah pada pemecahan masalah. Melalui contoh-
contoh ilustrasi-masalah dapat dikenali latar belakang dari suatu konsep dan
hubungannya dengan definis dan teorema yang ada. Secara teoritis ilmu komputer diawali dari
sejumlah berbeda disiplin ilmu; ahli biologi mempelajari neural network, insinyur elektro
mengembangkan switching sebagai tools untuk mendesain perangkat keras, matematikawan
bekerja berdasarkan logika, dan ahli bahasa menyelidiki tata bahasa untuk bahasa alami (natural
language) Finite state automata dan ekspresi reguler awal dikembangkan berdasarkan
pemikiran neural network dan switching circuit. Finite state automata merupakan tools
yang sangat berguna dalam perancangan suatu penganalisa leksikal (lexical analyzer)
yang berguna dalam mengelompokkan karakter-karakter kedalam token-token sebagai
unit terkecil dalam mengenali pola. Jadi apa sesungguhnya teori bahasa tersebut ? Teori bahasa
merupakan suatu gagasan mendasar dalam komputasi yang menjadi tools untuk mengenali
persoalan. Gagasan dasar tersebut dimodel dengan suatu simbol-simbol yang
merepresentasikan juga suatu fungsi dari komputer digital. Teori bahasa pada awalnya lebih
diarahkan untuk mengenali suatu tata bahasa dan dapat mendefinisikan spesifikasi formal dari
tata bahasa tersebut. Sehingga pada akhirnya dapat didefinisikan langkah-langkah algoritmik
dalam pemrosesan tata bahasa.

Teori bahasa dan otomata dalam ilmu komputer


Suatu teori hanya menarik jika dapat membantu dalam mencari solusi terbaik. Tanpa penerapan
timbul pertanyaan, mengapa mempelajari teori? Teori memberikan konsep dan prinsip yang
menolong untuk memahami perilaku dari suatu persoalan yang berkorelasi dengan teori
tersebut. Bidang ilmu komputer meliputi topik yang luas, dari perancangan mesin sampai
pemrograman. Disamping perbedaan yang ada, terdapat keseragaman prinsip-prinsip umum
yang dipakai. Untuk mempelajari prinsip-prinsip dasar tersebut, kita mengkonstruksi suatu
mesin otomata sebagai model abstrak dari komputer dan komputasi. Model ini memiliki fungsi-
fungsi yang penting dan umum pada perangkat keras dan perangkat lunak komputer. Meskipun
model tersebut sederhana untuk diterapkan langsung pada dunia nyata, keuntungan yang
diperoleh dari mempelajarinya adalah memberikan landasan untuk basis dari suatu
pengembangan algoritma. Pendekatan ini, juga diterapkan pada ilmu sains lainnya.

Abjad, Kata, dan Bahasa


Abjad adalah himpunan berhingga tak kosong dari simbol.
notasi dari abjad adalah ∑ "sigma"
contoh 
∑ : {a,b,c,d,...z}
∑ : {1,2,3,4....}
(a,b,c,d....z & 1,2,3,4....) adalah sebuah simbol. dan jika di kumpulkan dalam satu kurung
kurawal maka akan menjadi suatu abjad

Kata/string/untai adalah Barisan berhingga simbol-simbol dari suatu abjad.

notasi dari kata/string/untai adalah w "w kecil"


contoh
∑ : {a,b,c,d.....z}
w1 = saya
w2 = buku dst

∑ : {1,2,3,4......}
w1 = 1
w2 = 12
w3 = 11 dst

kata kosong/string kosong : Barisan yang kosong dari simbol-simbol


notasi dari string kosong adalah Ɛ

Bahasa adalah suatu himpunan dari string-string.


notasi dari bahasa adalah L
contoh
L1 = bahasa inggris
L2 = bahasa jawa
L3 = bahasa spanyol dll
Nb: setiap bahasa mempunyai aturan masing-masing, jadi begitu juga dalam otomata
dan teori bahasa dalam membuat bahasa harus ada aturannya
contoh
∑ : {1}
w1 = 1; w2 =11; w3 = 111; w4 = 1111 dst
L1={1,111,1111}"aturannya : Genap"
L2={11.1111.111111} "aturannya : Ganjil"

Bahasa Universal adalah suatu bahasa yang bisa mengakomodasi semua string dari suatu abjad
notasi : ∑*
contoh
∑   : {a,b,c}
∑* : {Ɛ,a,b,c,d,ab,aa,cc,....}

∑   : {2}
∑* : {Ɛ,22,2,222,2222......}

contoh sederhana
∑   : {1,2,3}
L   : {1,2,3} -> apa aturannya..??
bahasa itu menggunakan aturan "satu state tunggal"
Operasi-operasi string
-> Panjang (length) dari string
notasi |w|
contoh
w1 = 1 2 1     ->     |w1|= 3
w2 = aa         ->     |w2|=2

-> Perangkaian (concatenation) 


contoh
w1 = ab
w2 = 31
w1.w2 = ab.31 -> ab31

->Exponensial (pangkat)
misal w adalah kata
w^n = {Ɛ, jika n = 0}
               {w.w^n-1 jika n > 0}

dibaca "w pangkat n, w dikalikan dengan w pangkat n-1"


contoh:
w : ab
w^0 = Ɛ
w^1 = w.w^1-1 = w.w^0 = ab.Ɛ =ab
w^2 = w.w^2-1 = w.w^1 = ab.ab = abab dst
Operasi-operasi pada Bahasa
-> Perangkaian (concatenation)
misal A dan B adalah Bahasa
A.B={w1.w2|w1 € A & w2 € B}
contoh:
A    = {Rumah}
B     = {lia,kucing}
A.B = {Rumah lia, Rumah kucing}

-> Exponensial (Pangkat)
misal A adalah Bahasa
A^n = {{Ɛ}, jika n=0}
           {A.A^n-1 jika n > 1}
contoh
A     = {A,B}
A^0 = {Ɛ}
A'    = A.A^0 = {AB}.{Ɛ}  = {AB}
-> Gabungan (Union)
misal A dan B adalah bahasa
A U B = {w | w € A atau w € B}
contoh
A : {a,ab,c,d}
B : {c,a,aa,dd}
A U B : {a,ab,c,d,aa,dd}

-> Irisan (Lutesectim)
misal A dan B adalah Bahasa

A n B : { w | w € A dan w € B }

dari contoh Gabungan di atas maka irisannya adalah {C,A} karna {C,A} ada di A dan juga ada
di B

-> Sub bahasa
misal A dan B adalah Bahasa
A C B "dibaca A sub bahasa dari B"
jika semua kata anggota A jika merupakan anggota B
contoh
∑ : {a,b}
a C b = ..?
a : {aa,ab,aab,....}
b : {a,b,aa,bb,ab,aab...}

-> Sama (Equal)
misal A dan B adalah Bahasa
A = B jika Semua anggota A merupakan anggota B dan sebaliknya
A : {a,b}
B : {b,a}
A=B
-> Star Clousure & Plus Clousure
misal A dan B adalah Bahasa
A* ("di baca A star clousure")

Contoh
∑ : {a} "abjad"
A : {aa} "bahasa"

Klasifikasi Tata Bahasa


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 Hirarki Chomsky.
Penggolongan tersebut bisa dilihat pada tabel berikut:
Tabel Chomsky

TEORI-TEORI
Komputasi
Komputasi sebetulnya bisa diartikan sebagai cara untuk menemukan pemecahan masalah dari data input dengan
menggunakan suatu algoritma. Hal ini ialah apa yang disebut dengan teori komputasi, suatu sub-bidang dari
ilmu komputer dan matematika. Selama ribuan tahun, perhitungan dan komputasi umumnya dilakukan dengan
menggunakan pena dan kertas, atau kapur dan batu tulis, atau dikerjakan secara mental, kadang-kadang dengan
bantuan suatu tabel. Namun sekarang, kebanyakan komputasi telah dilakukan dengan menggunakan komputer.
Teori komputasi berkaitan dengan studi bagaimana persoalan (problem) dapat diselesaikan pada sebuah model
dengan menggunakan algoritma. Model tersebut dinamakan model komputasi. Ada beberapa model yang
digunakan, namun yang paling umum dipelajari adalah mesin Turing. Sebuah mesin Turing dapat dipikirkan
sebagai komputer pribadi meja dengan kapasitas memori yang tak terhingga, namun hanya dapat diakses dalam
bagian-bagian terpisah dan diskret. Ilmuwan komputer mempelajari mesin Turing karena mudah dirumuskan,
dianalisis dan digunakan untuk pembuktian, dan karena mesin ini mewakili model komputasi yang dianggap
sebagai model paling masuk akal yang paling ampuh yang dimungkinkan. Kapasitas memori tidak terbatas
mungkin terlihat sebagai sifat yang tidak mungkin terwujudkan, namun setiap permasalahan yang
“terputuskan” (decidable) yang dipecahkan oleh mesin Turing selalu hanya akan memerlukan jumlah memori
terhingga. Jadi pada dasarnya setiap masalah yang dapat dipecahkan (diputuskan) oleh mesin Turing dapat
dipecahkan oleh komputer yang memiliki jumlah memori terbatas.

Turing Machine
Mesin Turing adalah model komputasi teoretis yang ditemukan oleh Alan Turing, berfungsi sebagai model
ideal untuk melakukan perhitungan matematis. Walaupun model ideal ini diperkenalkan
sebelum komputer nyata dibangun, model ini tetap diterima kalangan ilmu komputer sebagai model komputer
yang sesuai untuk menentukan apakah suatu fungsi dapat selesaikan oleh komputer atau tidak
(menentukan computable function). Mesin Turing terkenal dengan ungkapan " Apapun yang bisa dilakukan
oleh Mesin Turing pasti bisa dilakukan oleh komputer."
Sebuah mesin turing terdiri atas barisan sel tersusun berupa pita yang dapat bergerak maju mundur, komponen
aktif baca/tulis pita yang memiliki status perhitungan serta dapat mengubah/menulisi sel aktif yang ada di pita
tadi, dan suatu kumpulan instruksi bagaimana komponen baca/tulis ini harus melakukan modifikasi terhadap sel
aktif pada pita, serta bagaimana menggerakkan pita tersebut. Pada setiap langkah dalam komputasi, mesin ini
akan dapat mengubah isi dari sel yang aktif, mengubah status dari komponen baca/tulis, dan mengubah posisi
pita ke kiri atau ke kanan

Linear Bounded Automata


Otomat berbatas linier adalah mesin Turing nondeterministik yang memenuhi tiga kondisi berikut:
Alfabet masukannya mencakup dua simbol khusus, berfungsi sebagai penanda akhir kiri dan kanan.
Transisinya mungkin tidak mencetak simbol lain di atas penanda akhir.
Transisinya tidak boleh berpindah ke kiri penanda akhir atau ke kanan penanda akhir kanan. [1] : 225
Dengan kata lain: alih-alih memiliki pita yang berpotensi tidak terbatas untuk menghitung, komputasi dibatasi
pada bagian pita yang berisi masukan ditambah dua pita persegi yang menahan penanda akhir.
Definisi alternatif yang tidak terlalu ketat adalah sebagai berikut:
Seperti mesin Turing , LBA memiliki pita yang terdiri dari sel yang dapat berisi simbol dari alfabet terbatas ,
kepala yang dapat membaca dari atau menulis ke satu sel pada pita pada satu waktu dan dapat dipindahkan, dan
sejumlah terbatas negara bagian.
Sebuah LBA berbeda dari mesin Turing karena sementara pita pada awalnya dianggap memiliki panjang tak
terbatas, hanya sebagian kecil pita yang berdekatan, yang panjangnya merupakan fungsi linier dari panjang
masukan awal, dapat diakses oleh read / kepala tulis; maka nama robot berbatas linier . [1] : 225
Batasan ini membuat LBA menjadi model yang agak lebih akurat dari komputer dunia nyata daripada
mesin Turing, yang definisinya mengasumsikan pita tidak terbatas.
Definisi yang kuat dan yang lebih lemah mengarah pada kemampuan komputasi yang sama dari masing-masing
kelas robot, 

Push Down Automata (PDA)


PDA adalah mesin otomata dari TBBK (tata bahasa bebas konteks) yang diimplementasikan dengan stack
sehingga hanya terdapat operasi “push” dan “pop” Stack (tumpukan) adalah suatu struktur data yang
menggunakan prinsip LIFO (Last In First Out). Sebuah stack selalu memiliki top of stack dan elemen-elemen
stack itu yang akan masuk ke dalam stack dengan method “push” dan akan keluar dari stack dengan method
“pop”.
Definisi : PDA adalah pasangan 7 tuple M = (Q, Σ, , q 0 , Z 0 , δ, A), dimana :
Q : himpunan hingga stata, Σ : alfabet input, : alfabet stack, q 0 ∈ Q : stata awal, Z 0 ∈ : simbol awal stack, A ⊆
Q : himpunan stata penerima,
fungsi transisi δ : Q  (Σ ∪ {ε})     → 2 Q    *  (himpunan bagian dari Q    *)
Untuk stata q ∈ Q, simbol input a ∈ Σ, dan simbol stack X∈ , δ(q, a, X) = (p, α) berarti : PDA bertransisi ke
stata p dan mengganti X pada stack dengan string α.
Konfigurasi PDA pada suatu saat dinyatakan sebagai triple (q, x, α), dimana :
q ∈ Q : stata pada saat tersebut, x ∈ Σ* : bagian string input yang belum dibaca, dan α ∈ * : string yang
menyatakan isi stack dengan karakter terkiri menyatakan top of stack.
Misalkan (p, ay, Xβ) adalah sebuah konfigurasi, dimana : a ∈ Σ, y ∈ Σ*, X ∈ , dan β ∈ *. Misalkan pula δ(p, a,
X) = (q, γ) untuk q ∈ Q dan γ ∈ *. Dapat kita tuliskan
bahwa : (p, ay, Xβ) ⇒ (q, y, γβ).
Sebuah PDA dinyatakan dengan :
Q         = himpunan state
Σ          = himpunan simbol input
T          = simbol stack
S          = state awal
F          = state akhir
Z          = top of stack
PDA memiliki 2 jenis transisi, yaitu yang merima simbol input, simbol top of stack, dan state. Setiap pilihan
terdiri dari state berikutnya dan simbol- simbol. Penggantian isi stack dilakukan dengan opersi push dan pop.
Jenis transisi yang kedua adalah transisi ε. Transisi ε tidak melakukan pembacaan input namun hanya menerima
simbol top of stack dan state. Transisi ini memungkinkan PDA untuk memanipulasi isi stack dan berpindah
antar state tanpa membaca input.
[Ginanjar] Deterministik Push Down Automata (PDA)
 Push Down Automata (PDA)  merupakan mesin otomata dari bahasa bebas konteks.  PDA di gambarkan
sebagai tempat penyipanan yang tidak terbatas berupa stack/ 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). Prinsip pada stack adalah LIFO.  Pengambilan
elemen dari stack dinyatakan dengan operasi pop, sedang memasukkan elemen ke dalam stack dengan operasi
push.
Contoh stack :
perasi pop :
Jika dilakukan operasi push B, maka kondisi stack akan menjadi :

Definisi : PDA adalah pasangan 7 tuple.


M = (Q, S, q, F, d, G, Z), dimana :
Q : himpunan hingga state,
S : alfabet input,
G : alfabet/simbol stack,
q: state awal, qÎ Q
Z : simbol awal stack,  ZÎ G
F : himpunan state penerima, F Í Q
d : fungsi transisi , d : Q ´ (S È {e}) ´ G ® 2 (himpunan bagian dari Q ´ G*)
d(q, a, Z) = (q, AZ).     Push/insert
d(q, a, A) = (q1, e).               Pop /delete
Untuk state q Î Q, simbol input a Î S, dan simbol stack XÎ G, d(q, a, X) = (p, a) berarti : PDA bertransisi ke state
p dan mengganti X pada stack dengan string a.
Konfigurasi PDA pada suatu saat dinyatakan sebagai triple (q, x, a), dimana :
q Î Q : state pada saat tersebut, x Î S* : bagian string input yang belum dibaca, dan a Î G* : string yang
menyatakan isi stack dengan karakter terkiri menyatakan top of stack.
Misalkan (p, ay, Xb) adalah sebuah konfigurasi, dimana : a Î S, y Î S*, X Î G, dan b Î G*. Misalkan pula d(p, a,
X) = (q, g) untuk q Î Q dan g Î G*. Dapat kita tuliskan bahwa : (p, ay, Xb) Þ (q, y, gb).

Finite State Automata (FSA)


Finite state automata adalah mesin abstrak berupa sistem model matematika dengan masukan dan keluaran
diskrit yang dapat mengenali bahasa paling sederhana (bahasa reguler) dan dapat diimplementasikan secara
nyata.
Finite State Automata (FSA) adalah model matematika yang dapat menerima input dan mengeluarkan output
yang memiliki state yang berhingga banyaknya dan dapat berpindah dari satu state ke state lainnya berdasarkan
input dan fungsi transisi. Finite state automata tidak memiliki tempat penyimpanan/memory, hanya bisa
mengingat state terkini.
Finite State Automata dinyatakan oleh pasangan 5 tuple, yaitu:
M=(Q , Σ , δ , S , F )
Q = himpunan state
Σ = himpunan simbol input
δ = fungsi transisi δ : Q × Σ
S = state awal / initial state , S ∈ Q
F = state akhir, F ⊆ Q
Deterministic Finite Automata (DFA) :
dari suatu state ada tepat satu state berikutnya untuk setiap simbol masukan yang diterima.
Deterministik artinya tertentu/sudah tertentu fungsi transisinya.
Notasi matematis DFA:
• M = nama DFA
• Q = himpunan keadaan DFA
• S = himpunan alfabet
• d = fungsi transisi
• q0 = keadaan awal
• F = keadaan akhir
M = (Q, S, d, q0, F)
Contoh : Pengujian untuk menerima bit string dengan banyaknya 0 genap, serta banyaknya 1 genap.
0011 : diterima
10010 : ditolak, karena banyaknya 0 ganjil
Diagram transisi-nya :

DFA nya:
Q = {q0 , q1 , q2 , q3 }
Σ = {0,1}
S = q0
F = { q0}
fungsi transisi adalah:
δ( q0,011)= δ( q2,11) =δ( q3,1)= q2  Ditolak
δ( q0,1010)= δ( q1,010) =δ( q3,10)=δ( q2,0)= q0 Diterima

Non-deterministic Finite Automata (NFA) : dari suatu state ada 0, 1 atau lebih state    berikutnya
untuk setiap simbol masukan yang diterima.
Non-Deterministic Finite Automata:
• Otomata berhingga yang tidak pasti untuk setiap pasangan state input, bisa memiliki 0 (nol) atau lebih
pilihan untuk state berikutnya.
• Untuk setiap state tidak selalu tepat ada satu state berikutnya untuk setiap simbol input yang ada.
• Dari suatu state bisa terdapat 0,1 atau lebih busur keluar (transisi)
berlabel simbol input yang sama.
• Untuk NFA harus dicoba semua kemungkinan yang ada sampai
terdapat satu yang mencapai state akhir.
• Suatu string x dinyatakan diterima oleh bahasa NFA, M= (Q, _, d, S, F) bila {x | d (S,x) memuat
sebuah state di dalam F}
Kedua finite automata di atas mampu mengenali himpunan reguler secara presisi. Dengan demikian kedua
finite automata itu dapat mengenali string-string yang ditunjukkan dengan ekspresi reguler secara tepat.
DFA dapat menuntun recognizer(pengenal) lebih cepat dibanding NDFA. Namun demikian, DFA berukuran
lebih besar dibanding NDFA yang ekivalen dengannya. Lebih mudah membangun NDFA dibanding DFA
untuk suatu bahasa, namun lebih mudah mengimplementasikan DFA dibanding NDFA.

Anda mungkin juga menyukai