Teori Bahasa
o) Automata
Automata adalah mesin abstrak yang dapat mengenali (recognize),
menerima (accept), atau membangkitkan (generate) sebuah kalimat dalam
bahasa tertentu.
String hampa adalah sebuah string dengan nol buah simbol. String hampa
dinyatakan dengan simbol (atau ^) sehingga = 0. String hampa dapat
dipandang sebagai simbol hampa karena keduanya tersusun dari nol buah
simbol.
Alfabet adalah himpunan hingga (finite set) simbol-simbol.
Postfix (atau Sufix) string w adalah string yang dihasilkan dari string w dengan
menghilangkan nol atau lebih simbol-simbol paling depan dari string w tersebut.
Contoh : abc, bc, c, dan adalah semua Postfix(x)
Tail string w adalah string yang dihasilkan dari string w dengan menghilangkan
simbol paling depan dari string w tersebut.
Contoh : bc adalah Tail(x)
Alternation adalah pilihan satu di antara dua buah string. Operator alternation
adalah alternate atau .
Contoh : alternate(xy) = xy = abc atau 123
PITA
a
Read Head
Pada saat Automata Hingga mulai membaca Pita, ia harus selalu mulai dengan berada
pada suatu stata, yang ditunjuk sebagai stata awal. Sebuah Automata Hingga
Deterministik (AHD) terdiri atas 5 tupel (K, VT, f, q0, Z).
Dimana :
1.
2.
3.
4.
5.
Contoh :
VT = (a,b) adalah himpunan simbol input.
K = (q0, q1, q2) adalah himpunan stata.
Z = (q0, q1) adalah himpunan stata penerima.
q0 adalah stata awal.
Fungsi Next-State f : K x VT K didefinisikan sebagai tabel berikut :
f
q0
a
q0
b
q1
q1
q0
q2
q2
q2
q2
Automata Hingga Deterministik dapat dinyatakan dalam diagram berupa Graph
Berarah. Pada graph berarah tersebut terdapat sebuah simpul sebagai stata awal q0.
Lingkaran berlapis dua digunakan untuk menyatakan stata penerima.
Bila f(q0, a) = q0, maka terdapat busur dari q0 ke q0 dengan label a.
Graph berarah dari Automata Hingga Deterministik di atas terlihat pada gambar berikut:
Akhir
merupakan Stata Penerima. Himpunan semua string yang dapat diterima oleh Automata
M dinotasikan dengan L (M).
Sebagai contoh, Automata M di atas dapat menerima untai :
aabababa
aaa
baab
serta menolak untai berikut :
bbaaaa
aababb
babbaa
Ada tiga tipe Automata Hingga, yaitu :
1. Automata Hingga Deterministik (AHD)
2. Automata Hingga Non-Deterministik (AHN)
3. Automata Hingga Non-Deterministik dengan transisi hampa
Dari definisi pertama, terlihat bahwa sebuah AHD tidak bisa mengubah stata tanpa
membaca sebuah karakter masukan. Definisi kedua adalah sebuah definisi yang bersifat
rekursif, yang menunjukkan di stata mana AHD berada pada saat di mulai di stata q
dengan mendapat input berupa string w = tT.
Sebuah string w adalah diterima oleh sebuah F = (K, V T, M, S, Z) jika M(S, W) =
p, sedemikian hingga w adalah anggota VT dan p anggota Z.
Atau dengan kata lain, string w diterima oleh AHD jika setelah membaca habis semua
karakter dari untai, AHD berada pada sebuah Stata Akhir. Himpunan semua untai w
anggota VT yang diterima oleh AHD F dinotasikan sebagai L(F).
AHD pada contoh ini merupakan sebuah AHD yang menerima untai yang terdiri dari
simbol 0 dan 1. AHD tersebut dapat dinyatakan sebagai berikut :
F = ( {S, A, B, C}, {0, 1}, M, S, {S} ) dimana fungsi next state M adalah :
M(S, 0) = B
M(S, 1) = A
M(A, 0) = C
M(A, 1) = S
M(B, 0) = S
M(B, 1) = C
M(C, 0) = A
M(C, 1) = B
Fungsi stata berikut dari AHD kadang-kadang lebih mudah disajikan dalam bentuk
tabel. Untuk contoh di atas tabel yang terbentuk adalah :
INPUT
STATA
S
A
B
C
Contoh dari string yang diterima AHD di atas adalah 110101 dan contoh string yang
tidak dapat diterima adalah 11101. Bagan operasi AHD pada kedua untai di atas adalah
sebagai berikut :
Penelusuran string 110101 :
= M(S, 0101)
= M(S, 101)
= M(B, 101)
= M(A, 01)
= M(C, 01)
= M(C, 1)
= M(A, 1)
= M(B, ^)
= M(S, ^)
= B (ditolak)
= S (diterima)
Sebuah untai akan diterima AHN, jika sedikitnya satu urutan transisi state berakhir pada
Stata Akhir. Untuk AHN di atas terlihat bahwa jika AHN menerima sebuah string, maka
penelusuran akan tetap di Stata A sampai dengan karakter a yang terakhir selesai dibaca.
AHN kemudian berubah mencapai stata B dan tetap pada stata B tersebut sampai
karakter b yang terakhir selesai dibaca. Selanjutnya terjadi transisi ke stata C.
AHN terdiri dari 5 tupel (K, VT, M, S, Z) dengan :
1.
2.
3.
4.
5.
Tabel transisi yang ekuivalen dengan graph di atas adalah sebagai berikut :
STATA
q0
INPUT
b
{q1,q4}
{q1}
{q1}
q2
{q2}
{q2,q4}
{q2}
q3
{q3}
{q3}
{q3,q4}
q4
Sebagai contoh, dengan input aca, nilai dari M(q0, aca) dapat ditentukan sebagai
berikut :
Karena diketahui
M(q0, a) = {q0, q1}
Maka
M(q0, aca) = M(q0, ca) M(q1, ca)
Dan karena
M(q0, c) = {q0, q3}
M(q1, c) = {q1}
Maka
M(q0, ca) = M(q0, a) M(q3, a)
= {q1,q2} M(q3)
= {q0, q1, q3}
M(q1, ca) = M(q1, a) = {q1, q4}
Sehingga
M(q0, aca) = {q0,q1,q3} {q1,q4}
= {q0,q1,q3,q4}
dan karena stata yang tercapai memuat q4 yaitu stata akhir, maka untai aca diterima.
Jadi, perbedaan antara AHD dan AHN adalah bahwa AHD banyaknya lintasan
penelusuran untuk suatu untai adalah unik. Sementara pada AHN banyaknya lintasan
mungkin lebih dari satu. Pada kenyataannya AHN dapat dikonversi menjadi AHD yang
ekuivalen.
Berikut ini sebuah contoh AHN F(K, V T , M, S, Z), dimana :
K = {q 0 , q1, q 2 ,q 3 , q 4 } M diberikan dalam tabel berikut :
VT = {a, b,c} a b c
S = q 0 q0 {q 0 , q1} {q 0 , q 2 } {q 0 , q 3 }
Z = {q 4 } q1 {q1, q 4} {q1} {q1}
q 2 {q2} {q 2 , q 4} {q2 }
q 3 {q3} {q 3} {q3 , q 4 }
q4
Ilustrasi graf untuk AHN F adalah sebagai berikut :
a, b, c a, b, c
a
q0 q1
cba
b
q3 q2 q4
a, b, c a, b, c
c
Contoh kalimat yang diterima AHN di atas : aa, bb, cc, aaa, abb, bcc, cbb
Contoh kalimat yang tidak diterima AHN di atas : a, b, c, ab, ba, ac, bc
Fungsi transisi M sebuah AHN dapat diperluas sebagai berikut :
1.
M(q, ) = {q} untuk setiap q K
2.
M(q, t T) = M(p i , T) dimana t V T , T adalah V T *, dan M(q, t) = {p i }
3.
M({q1, q 2 , , q n }, x) = M(q i ,x), untuk x V T *
Sebuah kalimat di terima AHN jika :
salah satu tracing-nya berakhir di stata penerima, atau
himpunan stata setelah membaca string tersebut mengandung stata penerima
Contoh :
Telusurilah, apakah kalimat-kalimat berikut diterima AHN : ab, abc, aabc, aabb
Jawab :
i) M(q0 ,ab) M(q 0 ,b) M(q1 ,b) {q 0 , q 2 } {q1} = {q 0 , q1, q 2 }
Himpunan stata tidak mengandung stata penerima kalimat ab tidak diterima
ii) M(q0 ,abc) M(q 0 ,bc) M(q1 ,bc) {M(q 0 ,c) M(q 2 ,c)} M(q1, c)
{{ q 0 , q 3}{ q 2 }}{ q1} = {q 0 , q1, q 2 ,q 3 }
Himpunan stata tidak mengandung stata penerima kalimat abc tidak diterima
iii) M(q0 ,aabc) M(q 0 ,abc) M(q1 ,abc) {M(q 0 ,bc) M(q1 ,bc)} M(q1 ,bc)
{{M(q 0 , c) M(q 2 ,c)} M(q1, c)} M(q1, c)
{{{ q 0 , q 3} { q 2 }} {q1}} {q1} = {q 0 , q1, q 2 ,q 3 }
Himpunan stata tidak mengandung stata penerima kalimat aabc tidak diterima
iv) M(q0 ,aabb) M(q 0 ,abb) M(q1 ,abb) {M(q 0 ,bb) M(q1 ,bb)} M(q1 ,bb)
{{M(q 0 , b) M(q 2 ,b)} M(q1, b)} M(q1, b)
{{{ q 0 , q 2 } { q 2 , q 4 }} {q1}} {q1} = {q 0 , q1, q 2 , q 4 }
Himpunan stata tidak mengandung stata penerima kalimat aabb diterima
Equivalensi 2 AHD
Dua buah AHD dikatakan equivalen jika keduanya dapat menerima bahasa yang
sama. Misalkan kedua AHD tersebut adalah A dan A. Misalkan pula bahasa yang
diterima adalah bahasa L yang dibangun oleh alfabet V T = {a1, a2, a3, ..., an}.
Berikan nama kepada semua stata masing-masing AHD dengan nama berbeda.
Misalkan nama-nama tersebut adalah : S, A1, A2, ... untuk AHD A, dan : S,
A1, A2, ... untuk AHD A.
2.
3.
Isikan (S, S) pada baris pertama kolom (v, v), dimana S dan S masingmasing adalah stata awal masing-masing AHD.
4.
Jika terdapat edge dari S ke A1 dengan label a1 dan jika terdapat edge dari S
ke A1 juga dengan label a1, isikan pasangan terurut (A1, A1) sebagai pada
baris pertama kolom (v a 1 , v a 1 ). Lakukan hal yang sama untuk kolomkolom berikutnya.
5.
Perhatikan nilai-nilai pasangan terurut pada baris pertama. Jika terdapat nilai
pasangan terurut pada kolom (v a 1 , v a 1 ) s/d (v a n , v a n ) yang tidak
sama dengan nilai pasangan terurut (v, v), tempatkan nilai tersebut pada
kolom (v, v) baris-baris berikutnya. Lakukan hal yang sama seperti yang
dilakukan pada langkah (4). Lanjutkan dengan langkah (5).
6.
Jika selama proses di atas dihasilkan sebuah nilai pada kolom (v, v), dengan
komponen v merupakan stata penerima sedangkan komponen v bukan, atau
sebaliknya, maka kedua AHD tersebut tidak ekuivalen. Proses dihentikan.
7.
Jika kondisi (6) tidak dipenuhi dan jika tidak ada lagi pasangan terurut baru
yang harus ditempatkan pada kolom (v, v) maka proses dihentikan dan kedua
AHD
tersebut ekuivalen.
Contoh :
Periksalah ekuivalensi kedua AHD berikut :
a
b
1a45
a
baba
aa
23b76b
aa
AHD A AHD A
Jawab :
Dengan menggunakan menggunakan algoritma di atas maka dapat dibentuk tabel
berikut :
(v, v) (v a , v a ) (v b , v b ) Keterangan :
(1, 4) (1, 4) (2, 5) (2, 5) adalah pasangan terurut baru
(2,5) (3, 6) (1, 4) (3, 6) adalah pasangan terurut baru
(3, 6) (2, 7) (3, 6) (2, 7) adalah pasangan terurut baru
(2, 7) (3, 6) (1, 4) tidak adal lagi pasangan terurut baru
Jawab :
Grammar diatas terdiri dari produksi berbentuk :
dengan . Dimana ialah string dan ialah panjang dari
string demikian juga ialah string dan ialah panjang dari string . String disini
adalah merupakan deretan simbol baik terminal maupun non terminal.
POHON DERIVASI
Pohon derivasi pada ekspresi aritmatika
Ada beberapa ketentuan yang sering dipakai dalam suatu penyusunan
pohon derivasi untuk ekspresi aritmatika
Rumus :
<ekspresi> <ekspresi> <asop> <suku> <suku>
A.
<suku>
<faktor>
<asop>
+ -
<mdop>
* div
<ekspresi>
) operand
( x y * 2 + z ) div ( x div z )
KETERANGAN :
<ekspresi>
<suku>
<faktor>
<asop>
+ -
<mdop>
* div
<ekspresi>
DERIVASI
<ekspresi> <ekspresi>
<suku> <mdop> <faktor>
<Faktor> <mdop> <faktor>
) operand
div( <ekspresi> )
x div z
B.
a*(2*cb)*2
<ekspresi>
<suku>
<suku>
<mdop>
<faktor>
<faktor>
a
( <ekspresi> )
<faktor>
b
C.
x * ( y 5 ) * ( y div 4 + x )
<ekspresi>
<suku>
<suku>
<faktor>
<mdop>
<faktor>
( <ekspresi> )
( <ekspresi> )
<suku>
X
<ekspresi> <asop> <suku>
<suku>
<faktor>
y
<faktor>
5
<ekspresi>
<asop>
<suku>
<faktor>
x
D.
( x * 2 * y ) ( ( z + 32 ) div y )
Jawab :
K = {q0, q1, q2}
VT = {a, b}
S = q0
Z = {q0, q2}
Tabel
q0
q1
q2
a
q0
q2
q2
B
q1
q1
q1
abbbaab
M(q0, abbbaab)
= M(q0,bbbaab)
= M(q1,bbaab )
= M(q1,baab)
= M(q1,aab)
= M(q2,ab)
= M(q2,b)
= M(q1,^)
= q1 ( Ditolak )