TEORI BAHASA DAN AUTOMATA
I. PENDAHULUAN
Teori Bahasa
Teori Bahasa
Teori bahasa membicarakan
bahasa formal (formal language), terutama untuk kepentingan
perancangan kompilator (compiler) dan pemroses naskah (text
processor). Bahasa formal adalah kumpulan kalimat. Semua kalimat
dalam sebuah bahasa dibangkitkan oleh sebuah tata bahasa (grammar) yang sama.
Sebuah bahasa formal bisa dibangkitkan oleh dua atau lebih tata bahasa berbeda.
Dikatakan bahasa formal karena grammar diciptakan mendahului pembangkitan setiap
kalimatnya. Bahasa manusia bersifat sebaliknya; grammar diciptakan untuk
meresmikan kata-kata yang hidup di masyarakat. Dalam pembicaraan selanjutnya
‘bahasa formal’ akan disebut ‘bahasa’ saja.
Automata
Automata adalah mesin abstrak yang dapat
mengenali (recognize), menerima (accept), atau
membangkitkan (generate) sebuah kalimat dalam bahasa tertentu.
Beberapa Pengertian Dasar
• Simbol adalah sebuah entitas abstrak (seperti
halnya pengertian titik dalam geometri). Sebuah huruf atau sebuah
angka adalah contoh simbol.
• String adalah deretan terbatas (finite)
simbol-simbol. Sebagai contoh, jika a, b, dan c adalah tiga
buah simbol maka abcb adalah sebuah string yang dibangun dari ketiga
simbol tersebut.
• Jika w adalah sebuah string maka panjang
string dinyatakan sebagai \w\ dan didefinisikan sebagai cacahan (banyaknya)
simbol yang menyusun string tersebut. Sebagai contoh,
jika w = abcb maka \ w \ = 4.
• String hampa adalah sebuah string dengan nol
buah simbol. String hampa dinyatakan dengan simbol s (atau A)
sehingga \s\ = 0. String hampa dapat dipandang sebagai simbol hampa karena
keduanya tersusun dari nol buah simbol.
• Alfabet adalah hinpunan hingga (finite
set) simbol-simbol
Operasi Dasar String
Diberikan dua string : x
= abc, dan y = 123
• Prefik string w adalah string yang
dihasilkan dari string w dengan menghilangkan nol atau
lebih simbol-simbol paling belakang dari string w tersebut.
Contoh : abc, ab, a, dan s adalah
semua Prefix(x)
• ProperPrefix string w adalah string
yang dihasilkan dari string w dengan
menghilangkan satu atau lebih simbol-simbol paling belakang dari
string w tersebut.
Contoh : ab, a, dan s adalah semua
ProperPrefix(x)
• 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 s adalah semua
Postfix(x)
• ProperPostfix (atau PoperSufix)
string w adalah string yang dihasilkan dari string w dengan
menghilangkan satu atau lebih simbol-simbol paling depan dari
string w tersebut.
Contoh : bc, c, dan s adalah semua
ProperPostfix(x)
• Head string w adalah simbol paling
depan dari string w.
Contoh : a adalah Head(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)
• Substring string w adalah string yang
dihasilkan dari string w dengan menghilangkan nol atau
lebih simbol-simbol paling depan dan/atau simbol-simbol paling belakang dari
string w tersebut.
Contoh : abc, ab, bc, a, b, c,
dan s adalah semua Substring(x)
• ProperSubstring string w adalah string
yang dihasilkan dari string w dengan
menghilangkan satu atau lebih simbol-simbol paling depan dan/atau
simbol- simbol paling belakang dari string w tersebut.
Contoh : ab, bc, a, b, c, dan s adalah
semua Substring(x)
• Subsequence string w adalah string
yang dihasilkan dari string w dengan menghilangkan nol atau
lebih simbol-simbol dari string w tersebut.
Contoh : abc, ab, bc, ac, a,
b, c, dan s adalah semua Subsequence(x)
• ProperSubsequence string w adalah
string yang dihasilkan dari string w dengan
menghilangkan satu atau lebih simbol-simbol dari string w tersebut.
Contoh : ab, bc, ac,
a, b, c, dan s adalah semua Subsequence(x)
• Concatenation adalah penyambungan dua buah
string. Operator concatenation adalah concate atau tanpa lambang
apapun.
Contoh : concate(xy)
= xy = abc123
• Alternation adalah pilihan satu di antara dua
buah string. Operator alternation adalah alternate atau |.
Contoh : alternate(xy) = x
| y = abc atau 123
• Kleene Closure : x* = s| x | xx
| xxx | ... = s| x | x 2 | x3 |
...
• Positive Closure : x + = x | xx
| xxx | . = x | x2 | x3 | .
Beberapa
Sifat Operasi
• Tidak selalu berlaku : x = Prefix(x)Postfix(x)
• Selalu berlaku : x = Head(x)Tail(x)
• Tidak selalu berlaku : Prefix(x) = Postfix(x)
atau Prefix(x) ^ Postfix(x)
• Selalu berlaku : ProperPrefix(x) ^
ProperPostfix(x)
• Selalu berlaku : Head(x) ^ Tail(x)
• Setiap Prefix(x), ProperPrefix(x), Postfix(x),
ProperPostfix(x), Head(x), dan Tail(x) adalah Substring(x), tetapi tidak
sebaliknya
• Setiap Substring(x) adalah Subsequence(x),
tetapi tidak sebaliknya
• Dua sifat aljabar concatenation :
♦ Operasi concatenation bersifat asosiatif
: x(yz) = (xy)z
♦ Elemen identitas operasi concatenation adalah s
: sx = xs = x
• Tiga sifat aljabar alternation :
♦ Operasi alternation bersifat komutatif : x
| y = y | x
♦ Operasi alternation bersifat asosiatif : x
| (y | z) = (x |y) | z
♦ Elemen identitas operasi alternation adalah
dirinya sendiri : x | x = x
• Sifat distributif concatenation terhadap
alternation : x (y | z) = xy^z
• Beberapa kesamaan :
♦ Kesamaan ke-1 : (x*)* = (x*)
♦ Kesamaan ke-2 : s| x + = x + |s = x*
♦ Kesamaan ke-3 : (x | y)* = s| x | y |
xx | yy | xy | yx | ... = semua string yang
merupakan concatenation dari nol atau lebih x, y, atau keduanya.
Konsep
Dasar
1. Dalam pembicaraan grammar, anggota alfabet dinamakan simbol
terminal atau token.
2. Kalimat adalah deretan hingga simbol-simbol
terminal.
3. Bahasa adalah himpunan kalimat-kalimat. Anggota bahasa bisa tak
hingga kalimat.
4. Simbol-simbol berikut adalah simbol terminal :
• huruf kecil awal alfabet, misalnya : a, b, c
• simbol operator, misalnya : +, -, dan x
• simbol tanda baca, misalnya : (, ), dan ;
• string yang tercetak tebal, misalnya
: if, then, dan else.
5. Simbol-simbol berikut adalah simbol non terminal
:
• huruf besar awal alfabet, misalnya : A, B, C
• huruf S sebagai simbol awal
• string yang tercetak miring, misalnya
: expr dan stmt.
6. Huruf besar akhir alfabet melambangkan simbol terminal atau non
terminal, misalnya : X, Y, Z.
7. Huruf kecil akhir alfabet melambangkan string yang tersusun atas
simbol-simbol terminal, misalnya : x, y, z.
8. Huruf yunani melambangkan string yang tersusun atas simbol-simbol
terminal atau simbol-simbol non terminal atau campuran keduanya, misalnya : a,
P, dan y.
9. Sebuah produksi dilambangkan sebagai a ^ P, artinya :
dalam sebuah derivasi dapat dilakukan penggantian simbol a dengan
simbol p.
10. Simbol a dalam produksi berbentuk a ^ P
disebut ruas kiri produksi sedangkan simbol P disebut ruas kanan produksi.
11. Derivasi adalah proses pembentukan sebuah kalimat atau sentensial.
Sebuah derivasi dilambangkan sebagai : a ^ p.
12. Sentensial adalah string yang tersusun atas simbol-simbol terminal
atau simbol- simbol non terminal atau campuran keduanya.
13. Kalimat adalah string yang tersusun atas simbol-simbol terminal.
Jelaslah bahwa kalimat adalah kasus khusus dari sentensial.
14. Pengertian terminal berasal dari
kata terminate (berakhir), maksudnya derivasi berakhir jika
sentensial yang dihasilkan adalah sebuah kalimat (yang tersusun atas
simbol-simbol terminal itu).
15. Pengertian non terminal berasal dari kata not terminate (belum/tidak
berakhir), maksudnya derivasi belum/tidak berakhir jika sentensial yang
dihasilkan mengandung simbol non terminal.
Grammar
dan Klasifikasi Chomsky
Grammar G didefinisikan
sebagai pasangan 4 tuple : VT, VN, S, dan Q, dan
dituliskan sebagai G(VT , VN, S, Q), dimana :
VT : himpunan simbol-simbol
terminal (atau himpunan token -token, atau alfabet)
V N : himpunan
simbol-simbol non terminal S e VN : simbol awal (atau simbol
start)
Q : himpunan produksi
Berdasarkan komposisi
bentuk ruas kiri dan ruas kanan produksinya (a ^ P), Noam Chomsky
mengklasifikasikan 4 tipe grammar :
1. Grammar tipe ke-0 : Unrestricted Grammar (UG)
Ciri : a, P e (VT I VN )*, |a|
> 0
2. Grammar tipe ke-1 : Context Sensitive Grammar
(CSG)
Ciri : a, P e (VT I VN )*, 0
< | a | < | P |
3. Grammar tipe ke-2 : Context Free Grammar (CFG)
Ciri : a e V n j P e (VT |VN)*
4. Grammar tipe ke-3 : Regular Grammar (RG)
Ciri : a e Vn j P
e {VT ’ VT VN } atau a e VN ’ P
e {VT ’ VN VT }
Mengingat ketentuan simbol-simbol (hal. 3 no. 4
dan 5), ciri-ciri RG sering dituliskan sebagai : a e VN, P e {a, bC} atau a e VN, P e {a,
Bc}
Tipe sebuah grammar (atau bahasa) ditentukan
dengan aturan sebagai berikut :
A language is said to be type-i (i = 0, 1, 2, 3) language if it
can be specified by a type-i grammar but can’t be specified any type-(i+1)
grammar.
Contoh
Analisa Penentuan Type Grammar
1. Grammar G1 dengan Q1 = {S ^ aB, B ^ bB, B ^ b}. Ruas kiri semua produksinya terdiri
dari sebuah VN maka G1 kemungkinan tipe CFG atau RG. Selanjutnya karena semua ruas
kanannya terdiri dari sebuah VT atau string VTVN maka G1 adalah
RG.
2. Grammar G2 dengan Q2 = {S ^ Ba, B ^ Bb, B ^ b}. Ruas kiri semua produksinya terdiri
dari sebuah VN maka G2 kemungkinan tipe CFG atau RG. Selanjutnya karena semua ruas
kanannya terdiri dari sebuah VT atau string V N V T maka
G 2 adalah RG.
3. Grammar G3 dengan Q3 = {S ^ Ba, B ^ bB, B ^ b}. Ruas kiri semua produksinya terdiri
dari sebuah VN maka G3 kemungkinan tipe CFG atau RG. Selanjutnya karena ruas kanannya
mengandung string VT VN (yaitu bB) dan juga string VN VT (Ba) maka G3 bukan RG, dengan kata lain G3 adalah
CFG.
4. Grammar G4 dengan Q4 = {S ^ aAb, B ^ aB}. Ruas kiri semua produksinya terdiri dari
sebuah VN maka G4 kemungkinan tipe CFG atau RG. Selanjutnya karena ruas kanannya
mengandung string yang panjangnya lebih dari 2 (yaitu aAb) maka G4 bukan RG,
dengan kata lain G4 adalah CFG.
5. Grammar G5 dengan Q5 = {S ^ aA, S ^ aB, aAb ^ aBCb}. Ruas kirinya mengandung string
yang panjangnya lebih dari 1 (yaitu aAb) maka G5 kemungkinan tipe CSG atau UG. Selanjutnya karena semua ruas
kirinya lebih pendek atau sama dengan ruas kananya maka G5 adalah
CSG.
6. Grammar G6 dengan Q6 = {aS ^ ab, SAc ^ bc}. Ruas kirinya mengandung string yang panjangnya
lebih dari 1 maka G6 kemungkinan tipe CSG atau UG. Selanjutnya karena terdapat ruas
kirinya yang lebih panjang daripada ruas kananya (yaitu SAc) maka G6 adalah
UG.
Tentukan bahasa dari
masing-masing gramar berikut :
1. G1 dengan Q1 =
{1. S ^ aAa, 2. A ^ aAa, 3. A ^ b}.
Jawab :
Derivasi kalimat terpendek
: Derivasi
kalimat umum :
S ⇒ aAa
(1) S ⇒ aAa (1)
⇒ aba
(3) aaAaa
(2)
^ an Aan (2)
^ anban (3)
Dari pola kedua kalimat disimpulkan : L1 (G1)
= { anban | n > 1}
2. G2 dengan Q2 = {1. S ^ aS, 2. S ^
aB, 3. B ^ bC, 4. C ^ aC, 5. C ^ a}. Jawab :
Derivasi kalimat terpendek
: Derivasi
kalimat umum :
S ^ aB
|
(2)
|
S ^ aS
|
(1)
|
^ abC
|
(3)
|
||
^ aba
|
(5)
|
^ an-1S
|
(1)
|
^ anB
|
(2)
|
||
^ anbC
|
(3)
|
||
^ anbaC
|
(4)
|
||
^ anbam-1C
|
(4)
|
||
^ anbam
|
(5)
|
||
Dari pola kedua kalimat disimpulkan
|
: L2 (G2)
= { anbam
|
| n > 1, m > 1}
|
1. Tentukan sebuah gramar regular untuk bahasa L1 =
{ an | n > 1}
Jawab :
Q1(L1) = {S ^ aS | a}
2. Tentukan sebuah gramar bebas konteks untuk
bahasa :
L2 : himpunan bilangan bulat non
negatif ganjil Jawab :
Langkah kunci : digit terakhir bilangan harus
ganjil.
Buat dua buah himpunan bilangan terpisah : genap
(G) dan ganjil (J)
Q2(L2) = {S ^ J | GS | JS,
G ^ 0 | 2 | 4 | 6 | 8, J ^ 1 | 3 | 5 | 7 | 9}
3. Tentukan sebuah gramar bebas konteks untuk
bahasa :
L3 = himpunan semua identifier
yang sah menurut bahasa pemrograman Pascal
dengan batasan : terdiri dari simbol huruf kecil
dan angka, panjang identifier boleh lebih dari 8 karakter Jawab :
Langkah kunci : karakter pertama identifier
harus huruf.
Buat dua buah himpunan bilangan terpisah : huruf
(H) dan angka (A)
Q3(L3) = {S ^ h|hT, T ^ At|ht|h|a, H ^ a|b|c|..., A ^ 0 | 1 | 2 | _}
4. Tentukan gramar bebas konteks untuk bahasa L4(G4)
= {anbm | n,m > 1, n ^ m} Jawab :
Langkah kunci : sulit untuk mendefinisikan L4(G4)
secara langsung. Jalan keluarnya adalah dengan mengingat bahwa x ^ y berarti x
> y atau x < y.
L4 = La u Lb, La ={anbm |
n > m > 1}, LB = {anbm | 1
< n < m}.
Qa (La ) = {A ^
aA | aC, C ^ aCb | ab}, Q(LB) = {B ^ Bb | Db, aDb | ab} Q4(L4)
= {S^ A | B, A ^ aA | aC, C ^ aCb | ab, B ^ Bb | Db, D^ aDb | ab}
5. Tentukan sebuah gramar bebas konteks untuk
bahasa :
L5 = bilangan bulat non negatif
genap. Jika bilangan tersebut terdiri dari dua digit
atau lebih maka nol tidak boleh muncul sebagai
digit pertama.
Jawab :
Langkah kunci : Digit terakhir bilangan harus
genap. Digit pertama tidak boleh nol. Buat tiga himpunan terpisah : bilangan
genap tanpa nol (G), bilangan genap dengan nol (N), serta bilangan ganjil (J).
Q5(L5) = {S ^ N | GA | JA,
A ^ N | NA | JA, G^ 2 | 4 | 6 | 8, N^ 0 | 2 | 4 | 6 | 8,
J ^ 1 | 3 | 5 | 7 | 9}
III.
Ilustrasi TM sebagai sebuah ‘mesin’:
Pita TM. Terbatas di kiri. Setiap sel berisi sebuah karakter dari
kalimat yang akan dikenali. Di kanan kalimat terdapat tak hingga simbol hampa.
FSC : otak dari TM, diimplementasikan dari algoritma pengenalan kalimat.
Ilustrasi TM sebagai sebuah
graf berarah :
1. Sebagaimana graf, TM terdiri dari
beberapa node dan beberapa edge. Dari satu node mungkin
terdapat satu atau lebih edge yang menuju node lainnya atau dirinya sendiri.
2. Sebuah node menyatakan sebuah stata
(state). Dua stata penting adalah stata awal S (start) dan stata
penerima H (halt). Sesaat sebelum proses pengenalan sebuah kalimat,
TM berada pada stata S. Jika kalimat tersebut dikenali maka, setelah selesai
membaca kalimat tersebut, TM akan akan berhenti pada stata H.
3. Sebuah edge mempunyai ‘bobot’ yang dinotasikan
sebagai triple : (a, b, d). a adalah karakter acuan bagi karakter dalam sel pita
TM yang sedang dibaca head. Jika yang dibaca head adalah karakter a maka a
akan di-overwrite dengan karakter b dan head akan berpindah satu sel
ke arah d (kanan atau kiri).
4. Kondisi crash akan terjadi jika
ditemui keadaan sebagai berikut :
TM sedang berada pada stata
i. Jika TM sedang membaca simbol ax ^ a1 ^ a2 ^ ... ^ an maka TM tidak mungkin
beranjak dari stata i. Jadi pada kasus ini penelusuran (tracing) TM
ber- akhir pada stata i.
Contoh :
Rancanglah sebuah mesin turing pengenal bahasa L
= {anbn | n > 0).
Jawab :
L tersebut terdiri dari 2
kelompok kalimat yaitu s dan non-s. Kelompok non-s adalah : ab, aabb, aaabbb,
dan seterusnya. Untuk dapat menerima kalimat s TM harus mempunyai edge dari S
ke H dengan bobot (s ,s , R). TM menerima kalimat-kalimat : ab, aabb, aaabbb,
dan seterusnya, dengan algoritma sebagai berikut :
1. Mulai dari S, head membaca simbol a.
2. Head membaca simbol a. Tandai simbol a yang sudah dibaca tersebut,
head bergerak ke kanan mencari simbol b pasangannya.
3. Head membaca simbol b. Tandai simbol b yang sudah dibaca tersebut,
head bergerak ke kiri mencari simbol a baru yang belum dibaca/ditandai.
4. Ulangi langkah 2 dan 3.
5. Head sampai ke H hanya jika semua simbol a dan simbol b dalam
kalimat anbn selesai dibaca.
Algoritma di atas lebih diperinci lagi sebagai
berikut :
1. Mulai dari S, head membaca simbol a.
2. Overwrite a tersebut dengan suatu simbol (misalkan A) untuk
menandakan bahwa a tersebut sudah dibaca. Selanjutnya head harus bergerak
ke kanan untuk mencari sebuah b sebagai pasangan a yang sudah dibaca
tersebut.
i) Jika yang ditemukan adalah simbol a maka a
tersebut harus dilewati (tidak boleh dioverwrite), dengan kata lain
a dioverwrite dengan a juga dan head bergerak
ke kanan.
ii) Jika TM pernah membaca simbol b ada kemungkinan ditemukan simbol
B. Simbol B tersebut harus dilewati (tidak boleh
dioverwrite), artinya B diover-write dengan B juga dan
head bergerak ke kanan.
3. Head membaca simbol b, maka b tersebut harus dioverwrite dengan
simbol lain (misalnya B) untuk menandakan bahwa b tersebut (sebagai pasangan
dari a) telah dibaca, dan head bergerak ke kiri untuk mencari simbol
A.
i) Jika ditemukan B maka B tersebut harus
dilewati (tidak boleh dioverwrite), dengan kata lain
B dioverwrite dengan B juga dan head bergerak ke kiri.
ii) Jika ditemukan a maka a tersebut harus dilewati (tidak boleh
dioverwrite), dengan kata lain a dioverwrite
dengan a juga dan head bergerak ke kiri.
4. Head membaca simbol A, maka A tersebut harus dilewati (tidak
boleh dioverwrite), dengan kata lain A dioverwrite
dengan A juga dan head bergerak ke kanan.
5. Head membaca simbol a, ulangi langkah 2 dan 3.
6. (Setelah langkah 3) head membaca simbol A, maka A tersebut harus
dilewati (tidak boleh dioverwrite), dengan kata lain
A dioverwrite dengan A juga dan head bergerak
ke kanan.
7. Head membaca simbol B, maka B tersebut harus dilewati (tidak
boleh dioverwrite), dengan kata lain B dioverwrite dengan A juga dan
head bergerak ke kanan.
8. Head membaca simbol s, maka s dioverwrite dengan s dan head
bergerak ke kanan menuju stata H.
Skema graf Mesin Turing di
atas adalah :
(s, e, R)
]
|
Contoh :
Lakukan tracing dengan
mesin turing di atas untuk kalimat-kalimat : aabb, aab.
Jawab :
i) (S,aabb) ^ (1,Aabb) ^ (1,Aabb) ^ (2,AaBb) ^
(3,AaBb) ^ (S,AaBb)
^ (1,AABb) ^ (1,AABb) ^ (2,AABB) ^ (2,AABB) ^
(4,AABB) ^ (4,AABB) ^ (4,AABBs) ^ (H,AABBss)
ii) (S,aab) ^ (1,Aab) ^ (1,Aab) ^ (2,AaB) ^ (3,AaB) ^ (S,AaB) ^
(1,AAB)
^ (1,AAbs) ^ crash, karena dari node 1 tidak ada
edge dengan bobot komponen pertamanya hampa (s)
IV. AUTOMATA HINGGA (AH)
• AH didefinisikan sebagai pasangan 5 tupel : (K,
VT, M, S, Z).
K : himpunan hingga stata,
VT : himpunan hingga simbol
input (alfabet)
M : fungsi transisi, menggambarkan transisi
stata AH akibat pembacaan simbol input.
Fungsi transisi ini biasanya diberikan dalam
bentuk tabel.
S e K : stata awal Z e K : himpunan stata
penerima
• Ada dua jenis automata hingga : deterministik
(AHD, DFA = deterministic finite automata) dan non deterministik
(AHN, NFA = non deterministik finite automata).
- AHD : transisi stata AH akibat pembacaan sebuah
simbol bersifat tertentu.
M(AHD) : K x VT ^ K
- AHN : transisi stata AH akibat pembacaan sebuah
simbol bersifat tak tentu.
M(AHN) : K x VT ^
2K
Berikut ini sebuah
contoh AHD F(K, VT,
M, S, Z), dimana :
Ilustrasi graf untuk AHD F adalah sebagai berikut : Lambang stata awal adalah node dengan anak panah. Lambang stata awal adalah node ganda.
Contoh kalimat yang diterima AHD : a, b, aa, ab,
ba, aba, bab, abab, baba Contoh kalimat yang tidak diterima AHD : bb, abb, abba
AHD ini menerima semua kalimat yang tersusun
dari simbol a dan b yang tidak mengandung substring bb.
Contoh :
Telusurilah, apakah
kalimat-kalimat berikut diterima AHD : abababaa, aaaabab,
aaabbaba Jawab :
i) M(q0,abababaa) ^ M(q0,bababaa) ^ M(q1,ababaa) ^
M(q0,babaa)
^ M(q1,abaa) ^ M(q0,baa) ^ M(q1,aa) ^ M(q0,a) ^
q0 Tracing berakhir di q0 (stata penerima) ^ kalimat abababaa diterima
ii) M(q0, aaaabab) a M(q0,aaabab) a M(q0,aabab) a
M(q0,abab)
^
M(q0,bab) ^ M(q1,ab) ^ M(q0,b) a q1
Tracing
berakhir di q1 (stata penerima) ^ kalimat aaaababa diterima
iii) M(q0, aaabbaba) ^ M(q0, aabbaba) ^ M(q0, abbaba)
^ M(q0, bbaba)
^
M(q1,bbaba) ^ M(q2,baba) ^ M(q2,aba) ^ M(q2,ba) ^ M(q2,a) a q2 Tracing berakhir
di q2 (bukan stata penerima) ^ kalimat aaabbaba ditolak Kesimpulan : sebuah
kalimat diterima oleh AHD jika tracingnya berakhir di salah satu stata
penerima.
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 VT = {a1, a2, a3, ..., an}.
Berikut ini algoritma untuk menguji equivalensi
dua buah AHD.
1. 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. Buat tabel (n+1) kolom, yaitu kolom-kolom : (v,
v’), (va 13 va 1’), ..., (van, v a
n ’), yaitu pasangan terurut (stata AHD A, stata AHD A’).
3. Isikan (S, S’) pada baris pertama kolom (v, v’),
dimana S dan S’ masing-masing 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 (va 13 va
1’). Lakukan hal yang sama untuk kolom-kolom berikutnya.
5. Perhatikan nilai-nilai pasangan terurut pada
baris pertama. Jika terdapat nilai pasangan terurut pada kolom (va 13 va
1’) s/d (va n, va 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 :

Jawab :
Dengan menggunakan menggunakan algoritma di atas
maka dapat dibentuk tabel
Keterangan :
(2, 5) adalah pasangan terurut baru (3, 6)
adalah pasangan terurut baru (2, 7) adalah pasangan terurut baru tidak adal
lagi pasangan terurut baru
• MSH atau FSM (Finite State
Machine) adalah sebuah varians automata hingga. MSH sering juga disebut
sebagai automata hingga beroutput atau mesin sekuensial.
• MSH didefinisikan sebagai pasangan 6 tupel F(K,
VT, S, Z, f, g) dimana :
K : himpunan hingga stata,
VT : himpunan hingga simbol
input (alfabet)
S e K : stata awal Z : himpunan hingga simbol output
f : K x VT ^ K disebut fungsi next state g : K x VT ^ Z disebut
fungsi output
Contoh :
Berikut ini adalah contoh
MSH dengan 2 simbol input, 3 stata, dan 3 simbol output : K = {q0, q1,
q2} fungsi
f
: fungsi
g :
S =
q0 f(q0,a) = q1 f(q0,b)
= q2 f(q0,a)
= x f(q0,b) = y
Vt = {a,
b} f(q1,a) = q2 f(q1,b)
= q1 f(q1,a)
= x f(q1,b) = z
Z = {x, y,
z} f(q2,a) = q0 f(q2,b)
= q1 f(q2,a) = z f(q2,b)
= y
a
|
b
|
|
q0
|
q1, x
|
q2, y
|
q1
|
q2, x
|
q1, z
|
q2
|
q0, z
|
q1, y
|
Jika MSH di atas mendapat untai masukan “aaba” maka akan dihasilkan :
- untai keluaran : xxyx
- untai stata : q0 q1 q2 q1 q2
MSH dapat disajikan sebagai
penjumlah biner. Sifat penjumlahan biner bergantung pada statusnya : carry atau
not carry.
Pada status not carry berlaku
: 0 + 0 = 0, 1 + 0 = 0 + 1 =
1, 1 + 1 = 0
Pada status carry
berlaku : 0 +
0 = 1, 1 + 0 = 0 + 1 =
0, 1 + 1 = 1
Pada status not carry blank
(b) menjadi b, sedangkan pada status carry menjadi 1.
Nilai setiap tupel untuk MSH ini
adalah :
|
Graf MSH penjumlah biner :
|
Jawab :
Input = pasangan digit
kedua bilangan, mulai dari LSB (least significant bit)
= 11,
11, 00, 11, 01, 11, 11, b
Output
= 0, 1,
1, 0, 0, 1, 1,
1 (jawab : dibaca dari kanan)
Stata =
N, C, C,
N, C, C, C, C,
S
Periksa
: 1 1 0 1 0 1
1
0 1 1 1 0 1 1 +
1 1 1 0 0 1 1 0
• Bahasa regular dapat dinyatakan sebagai ekspresi
regular dengan menggunakan 3 operator : concate, alternate, dan closure.
• Dua buah ekspresi regular adalah ekuivalen jika
keduanya menyatakan bahasa yang sama
Contoh :
L1 = {anbam | n > 1, m > 1} o er 1 =
a + b a +
L2= {anbam | n > 0, m > 0} o er 2 =
a* b a*
Perhatikan bahwa kita tidak
bisa membuat ekspresi regular dari bahasa
L3 = {anban | n > 1} atau L4 = {anban | n > 0}, karena keduanya tidak dihasilkan
dari grammar regular.
(a b)* a = a (b a)*
Bukti :
(a b)* a = (s| (ab) I (abab)l...) a =
(s a I (aba) I (ababa)l...) = (a I (aba) I (ababa) I...)
= a (sI (ba) I (baba) I .) = a (b a)*
Latihan 2. Buktikan
kesamaan ekspresi regular berikut :
1. (a* I b)* =
(a I b)*
2. (a|b*)* = (a Ib)*
3. (a* b)* a* = a* (b a*)*
4. (a a*)(sI a) = a*
5. a(b aIa)* b = a
a* b(a a* b)*
Berikut ini sebuah contoh
AHN F(K, VT, M, S, Z), dimana :
K = {Qo, Qn q2,Q3. q4}
Vt = {a, b,c}
S = q0 Z = {q4}
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, s) = {q} untuk setiap q e K
2. M(q, t T) = u M(pi, T) dimana t e VT, T adalah VT *, dan
M(q, t) = {pi}
3. M({qi, q2, qn}, x) = u M(qi,x),
untuk x e Vt*
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(qo,b) u M(qj ,b) ^ {qo, q2} u {qj =
{qo, qi, q2}
Himpunan stata tidak mengandung stata
penerima ^ kalimat ab tidak diterima
ii) M(qo ,abc) ^ M(qo ,bc) u M(qj ,bc) ^ {M(qo ,c) u M(q2 ,c)} u M(qj, c)
^ {{ qo. q3}u{ q2}}u{ qi} = ^, q^ q2^3}
Himpunan stata tidak mengandung stata
penerima ^ kalimat abc tidak diterima
iii) M(q0 ,aabc) ^ M(q0 ,abc) u M(q1 ,abc) ^ {M(q0 ,bc) u M(q1 ,bc)} u M(q1 ,bc)
^ {{M(q o , c) u M(q2,c)} u M(q^ c)} u M(q^ c)
^ {{{ qo> q3}u { q2}} u {qi}} u {qi} = ^, q^ q2^3}
Himpunan stata tidak mengandung stata
penerima ^ kalimat aabc tidak diterima
iv) M(q0 ,aabb) ^ M(q0 ,abb) u M(qi ,abb) ^ {M(q0 ,bb) u M(qi ,bb)} u M(qi ,bb)
^ {{M(q o , b) u M(q2,b)} u M(q^ b)} u M(q^ b)
^ {{{ qo, q2}u { q25 q4}} u {qi}} u {qi} = ^, q^ q25 q4}
Himpunan stata tidak mengandung stata penerima ^ kalimat
aabb diterima
AHN Dengan Transisi Hampa Perhatikan AHN berikut. i
8
AHN di atas mengandung ruas dengan bobot 8. AHN demikian dinamakan AHN dengan transisi 8, atau singkatnya AHN-8. AHN-8 di atas menerima bahasa L = {i
Pembentukan AHD dari AHN
Diberikan
sebuah AHN F = (K, VT, M, S, Z). Akan dibentuk sebuah AHD F’ = (K’,
VT M’, S’, Z’) dari AHN F tersebut. Algoritma pembentukannya
adalah sbb. :
1. Tetapkan : S’ = S dan VT’ = VT
2. Copykan tabel AHN F sebagai tabel AHD F’. Mula-mula K’ = K dan M’
= M
3. Setiap stata q yang
merupakan nilai (atau peta) dari fungsi M dan q £ K,
ditetapkan sebagai elemen baru dari K’. Tempatkan q tersebut pada kolom Stata
M’, lakukan pemetaan berdasarkan fungsi M.
4. Ulangi langkah (3) sampai tidak diperoleh stata
baru.
5. Elemen Z’ adalah semua stata yang mengandung
stata elemen Z.
Contoh :
Berikut
ini diberikan sebuah AHN F = (K, VT, M, S, Z) dengan :
K = {A,
B, C}, VT = {a, b}, S = A, Z = {C}, dan M didefinisikan sebagai
berikut :
Stata K AHN F
|
Input
|
|
a
|
b
|
|
A
|
[A,B]
|
C
|
B
|
A
|
B
|
C
|
B
|
___ [AB____
|
Tentukan
AHD hasil transformasinya.
Jawab :
Berdasarkan
algoritma di atas, maka :
1. S’ = S = A, VT ’ = VT =
{a, b}.
2. Hasil copy tabel AHN F menghasilkan tabel AHD F’
berikut :

M([A,B],b) = M(
|
A,b) u M(B,b) =
C u B = [
|
|
Stata
K’
|
Input
|
|
dari AHD F’
|
a
|
b
|
A
|
[A,B]
|
C
|
B
|
A
|
B
|
C
|
B
|
[A,B]
|
____ [AB_____
|
[AB]
|
___ [BC]____
|
[B,C] diperoleh tabel berikut :
|
Langkah
(3) di atas menghasilkan stata baru yaitu [B,C]. Setelah pemetaan terhadap
Stata
K’ dari AHD F’
|
Input
|
|
a
|
b
|
|
A
|
[A,B]
|
C
|
B
|
A
|
B
|
C
|
B
|
[A,B]
|
[A,B]
|
[A,B]
|
[B,C]
|
[B,C]
|
[A,B]
|
[A,B]
|
Setelah langkah (4) di atas tidak
terdapat lagi stata baru.
|
5.
Dengan demikian AHD F’ yang dihasilkan adalah :
AHD F’ = (K’, VT ’, M’, S’, Z’), dimana : K’ = {A, B, C, [A,B],
[B,C]}, VT ’ = {a, b}, S’ = A, Z’ = {C, [B,C]}. Fungsi transisi
M’ serta graf dari AHD F’ adalah sebagai berikut :
Pembentukan GR dari AHD
Diketahui sebuah AHD F =
(K, VT, M, S, Z). Akan dibentuk GR G = (VT ’,VN,
S’, Q). Algoritma pembentukan GR dari AHD adalah sebagai berikut :
1. Tetapkan VT’ = VT, S’ = S,
VN = S
2. Jika A p, A q e
K dan a e V T, maka :
\Ap ^ aAq, jika Aq £ Z M(A p, a) = A q ekuivalen
dengan produksi : <
K p ' q [Ap ^ a, jika Aq eZ
Dengan algoritma di atas
maka diperoleh Q(GR) sbb. :
M(S,1) = Ao S ^ 1A M(A,1) = So A ^ 1 M(B,1) = Co B^ 1C M(C,1) = Bo
C ^ 1B
GR yang dihasilkan adalah G(VT ’,VN,
S’, Q), dengan VT ’ = {0,1}, VN = {S, A, B, C},
S’ = S, dan Q = {S ^ 0B, S ^ 1A, A ^ 0C, B^ 1C, C ^ 0A, C ^ 1B, A ^ 1, B ^ 0}
Pembentukan AHN dari GR
Diketahui GR G = (VT ,VN,
S, Q). Akan dibentuk AHN F = (K,VT ’, M, S’, Z). Algoritma
pembentukan AHN dari GR :
1. Tetapkan VT ’ = VT,
S’ = S, K = VN
2. Produksi A p ^ a A q ekuivalen
dengan M(A p , a) = A q Produksi Ap ^
a ekuivalen dengan M(Ap, a) = X, dimana X £ VN
3. K = K u {X}
4. Z = {X}
Contoh
Diketahui GR G = (VT ,VN, S, Q) dengan
: VT = {a, b}, VN= {S, A, B}, S = S, dan Q = {S ^
aS, S ^ bA, A ^ aA, A ^ aB, B ^ b}
Terapkan algoritma di atas
untuk memperoleh AHN F sebagai berikut :
1. Vt’ = Vt = {a, b},
S’ = S, K = Vn = {S, A, B}
2. S ^ aS o M(S,a) = S, S ^ bA o M(S,b) = A,
A ^ aA o M(A,a) = A, A ^ aB o M(A,a) = B,
B ^ b o M(B,b) = X
AHN yang diperoleh : F(K,VT ’,
M, S’, Z), dengan K = {S, A, B, X}, Vt’ = {a,
b}, S’ = S, Z = {X},
|
Contoh :
Tentukan AHN untuk ekspresi
regular r = 0(1 | 23)* Jawab :
|
|||||||||||||||||
|
|||||||||||||||||
|
|||||||||||||||||
|
|||||||||||||||||
|
|||||||||||||||||
|
|||||||||||||||||
|
|||||||||||||||||
|
|||||||||||||||||
|
|||||||||||||||||
|
|||||||||||||||||





Bentuk umum produksi CFG
adalah : a ^ P, a e VN, P e (VN | VT)*
Analisis sintaks adalah
penelusuran sebuah kalimat (atau sentensial) sampai pada simbol awal grammar.
Analisis sintaks dapat dilakukan melalui derivasi atau parsing. Penelusuran
melalui parsing menghasilkanpohon sintaks.
Contoh 1 :
Diketahui grammar G1 =
{I ^ H 11 H | IA, H ^ a | b | c |... | z, A ^ 0 | 1 | 2 | ... | 9} dengan I
adalah simbol awal. Berikut ini kedua cara analisa sintaks untuk kalimat x23b.
cara 2 (parsing)
Sebuah kalimat yang
mempunyai lebih dari satu pohon sintaks disebut kalimat ambigu
(ambiguous). Grammar yang menghasilkan paling sedikit sebuah kalimat
ambigu disebut grammar ambigu.
5.1. Metoda Parsing
Ada 2 metoda parsing
: top-down dan bottom-up.
Parsing top-down
: Diberikan kalimat x sebagai input. Parsing dimulai dari simbol awal S
sampai kalimat x nyata (atau tidak nyata jika kalimat x memang tidak bisa
diturunkan dari S) dari pembacaan semua leaf dari pohon parsing jika
dibaca dari kiri ke kanan.
Parsing bottom-up : Diberikan kalimat
x sebagai input. Parsing dimulai dari kalimat x yang nyata dari pembacaan
semua leaf pohon parsing dari kiri ke kanan sampai tiba di simbol
awal S (atau tidak sampai di S jika kalimat x memang tidak bisa diturunkan dari
S)
Parsing
Top-down
Ada 2 kelas metoda
parsing top-down, yaitu kelas metoda dengan backup dan
kelas metoda tanpa backup. Contoh metoda kelas dengan
backup adalah metoda Brute-Force, sedangkan contoh metoda
kelas tanpa backup adalah metoda recursive descent.
Metoda Brute-Force
Kelas metoda dengan
backup, termasuk metoda Brute-Force, adalah kelas metoda parsing
yang menggunakan produksi alternatif, jika ada, ketika hasil penggunaan sebuah
produksi tidak sesuai dengan simbol input. Penggunaan produksi sesuai dengan
nomor urut produksi.
Contoh 3 :
Diberikan grammar G = {S ^
aAd | aB, A ^ b | c, B ^ ccd | ddc}. Gunakan metoda Brute-Force untuk
melakukan analisis sintaks terhadap kalimat x =
accd._____________________________________


S
Metoda Brute-Force tidak
dapat menggunakan grammar rekursi kiri, yaitu grammar yang mengandung
produksi rekursi kiri (left recursion) : A ^ Ax. Produksi rekursi
kiri akan menyebabkan parsing mengalami looping tak hingga.
|
Contoh 4 :
• Kelas metoda tanpa backup, termasuk
metoda recursive descent, adalah kelas metoda parsing yang tidak
menggunakan produksi alternatif ketika hasil akibat penggunaan sebuah produksi
tidak sesuai dengan simbol input. Jika produksi A mempunyai dua buah ruas kanan
atau lebih maka produksi yang dipilih untuk digunakan adalah produksi
dengan simbol pertama ruas kanannya sama dengan input yang sedang dibaca. Jika
tidak ada produksi yang demikian maka dikatakan bahwa parsing tidak dapat dilakukan.
• Ketentuan produksi yang digunakan
metoda recursive descent adalah : Jika terdapat dua atau lebih
produksi dengan ruas kiri yang sama maka karakter pertama dari semua ruas kanan
produksi tersebut tidak boleh sama. Ketentuan ini tidak melarang adanya
produksi yang bersifat rekursi kiri.
Contoh 5 :
Diketahui grammar G = {S ^ aB | A, A
^ a, B ^ b | d}. Gunakan metoda recursive
|
Salah satu contoh menarik dari
parsing bottom-up adalah parsing pada grammar preseden
sederhana (GPS). Sebelum sampai ke parsing tersebut, akan dikemukakan
beberapa pengertian dasar serta relasi yang ada pada GPS.
Pengertian Dasar
• Jika a dan x keduanya diderivasi dari simbol
awal grammar tertentu, maka a disebut sentensialjika a e (VT |
VN)*, dan x disebut kalimatjika x e (VT)*
• Misalkan a = Q 1 p Q 2 adalah
sentensial dan A e VN :
- p adalah frase dari
sentensial a jika : S ^ ... ^ QiA Q2 dan A^ ... ^ p
- p adalah simple frase dari
sentensial a jika : S ^ ... ^ Q1A Q2 dan A^ p
- Simple frase terkiri dinamakan handel
- frase, simple frase, dan handel adalah string
dengan panjang 0 atau lebih..
Contoh 6 :
(1) I ^ I H Hb adalah sentensial dan b adalah
simple frase
^ H H (dibandingkan dengan
Q1 p Q 2 maka Q1 = H, p = b, dan Q 2 = s)
^ H b
Perhatikan : simple frase (b) adalah yang terakhir diturunkan
(2) I ^ I
H Hb adalah sentensial dan
H adalah simple frase
^ I
b (dibandingkan dengan
Q l p Q 2 maka Q l =
s, p = H, dan Q 2 = b)
^ H b Perhatikan : simple frase (H) adalah yang
terakhir diturunkan Sentensial Hb mempunyai dua simple frase (b dan H),
sedangkan handelnya adalah H.
Relasi Preseden dan Grammar
Preseden Sederhana
• Relasi preseden adalah relasi antara 2 simbol
grammar (baik VT maupun VN) dimana paling tidak
salah satu simbol tersebut adalah komponen handel.
• Misalkan S dan R adalah 2 simbol. Ada 3 relasi
preseden yang : o, dan —

![]() |
I handel ~"^I I handel I handel I
Relasi : R —
S Relasi
: R o
S Relasi
: R ^ S
Perhatikan : komponen
handel selalu ‘menunjuk’ yang simbol lainnya.
Contoh 7 :
Diketahui grammar dengan G
= {Z — bMb, M — (L I a, L — Ma)}. Dari 3 sentensial : bab, b(Lb, b(Ma)b,
tentukan handel dan relasi yang ada.
bab
Z
bMb
|
( L
Handel : (L Relasi : b ^ (, (o L, L — b
Secara umum : jika A — aBc adalah sebuah
produksi maka :
- aBc adalah handel dari sentensial yang
mengandung string “aBc”
- relasi preseden antara a, B, dan c adalah : a o
B, B o c
Dengan memperhatikan ruas kanan produksi yang
ada serta berbagai sentensial yang
Z
|
b
|
M
|
L
|
a
|
(
|
)
|
|
Z
|
|||||||
b
|
|||||||
M
|
|||||||
L
|
—
|
—
|
|||||
a
|
—
|
—
|
|||||
(
|
|||||||
)
|
—
|
Grammar G
disebut grammar preseden sederhana jika :
1. paling banyak terdapat satu relasi antara setiap dua simbolnya
2. tidak terdapat dua produksi produksi dengan ruas kanan yang sama
Parsing Grammar Preseden
Sederhana
Prosedur parsing :
1. Buat tabel 3 kolom dengan label : sentensial dan relasi, handel,
dan ruas kiri produksi.
2. Tuliskan kalimat (atau sentensial) yang diselidiki pada baris
pertama kolom pertama.
3. Dengan menggunakan tabel relasi preseden cantumkan relasi preseden
antara setiap dua simbol yang bertetangga.
4. Tentukan handel dari sentensial tersebut. Handel adalah string
yang dibatasi “—“ terakhir dan “— “ pertama jika dilakukan penelusuran dari
kiri atau yang saling mempunyai relasi “o“. Handel tersebut pastilah merupakan
ruas kanan produksi, karena itu tentukan ruas kiri dari handel tersebut.
5. Ganti handel dengan ruas kiri produksinya. GOTO 3.
6. Kalimat yang diselidiki adalah benar dapat diderivasi dari simbol
awal jika kolom
“ruas kiri produksi” menghasilkan
simbol awal.
Contoh 8 :
Lakukan parsing atas kalimat x =
b(aa)b berdasarkan grammar G di atas.
Prosedur parsing sampai di simbol
awal (Z). Maka kalimat “b(aa)b” memang dapat diderivasi dari simbol awal Z
dengan menggunakan grammar G.
|
• Bentuk normal Chomsky (Chomsky Normal Form,
CNF) adalah grammar bebas konteks (CFG) dengan setiap produksinya
berbentuk : A ^ BC atau A ^ a.
• Transformasi CFG ke CNF adalah trnasformasi
berikut :
• 4 langkah konversi CFG - CNF adalah sebagai
berikut :
1. Eliminir semua produksi hampa
2. Eliminir semua produksi unitas
3. Terapkan prinsip batasan bentuk ruas
kanan produksi
4. Terapkan prinsip batasan panjang ruas kanan produksi
• Penjelasan Tentang 4 Langkah Konversi
1. Eliminasi produksi hampa
Produksi hampa dikaitkan dengan pengertian nullable Suatu
simbol A e VN dikatakan nullable jika :
(a) terkait dengan produksi berbentuk : A ^ s, atau
(b) terkait dengan derivasi berbentuk :
A s
Eliminasi yang dilakukan
terhadap simbol nullable adalah :
(a) Buang produksi hampa
(b) Tambahkan produksi lain yang merupakan produksi lama tetapi
simbol nullable- nya yang di ruas kanan produksi dicoret.
Contoh 9 :
Lakukan eliminasi produksi hampa terhadap
himpunan produksi berikut :
Q = { S ^ a | Xb | aYa, X ^ Y |s, Y ^ b | X}
Solusi :
• Simbol nullable adalah X (karena X ^
s) dan Y (karena Y ^ X ^ s)
• Dua langkah eliminasi
simbol nullable adalah :
- langkah (a) menghilangkan produksi X ^ s
- langkah (b) menambahkan produksi S ^ b
(pencoretan simbol nullable X pada produksi S ^ Xb) dan produksi S ^
aa (pencoretan simbol nullable Y pada produksi S ^ aYa)
• Himpunan produksi setelah dilakukan eliminasi
produksi hampa adalah :
Q = {S ^ a | Xb | aYa | b | aa, X ^ Y, Y ^ b |
X}
2. Eliminasi produksi unitas
Produksi unitas berbentuk A ^ B, dimana A,B e VN
• Jika ada produksi berbentuk : A ^ B , atau
derivasi A ^ Xi ^ X2 ^ ... ^ B
, dan jika ada produksi non-unitas dari B berbentuk : B ^ |a2 |... |an, maka eliminasi yang dilakukan akan menghapus
produksi A ^ B dan menghasilkan produksi : A ^ ai |a2 |... |an.
• Tidak dilakukan eliminasi terhadap derivasi
tertutup karena tidak akan menghasil- kan produksi baru. Bentuk derivasi
tertutup adalah : A ^ Xj ^ X2 ^ ... ^ A Contoh 10 :
Lakukan eliminasi produksi unitas terhadap
himpunan produksi berikut :
Q = {S ^ A | bb, A ^ B | b, B ^ S | a}
Solusi :
Untuk memudahkan, pisahkan produksi unitas dan
non-unitas :
Produksi unitas : S ^ A, A ^ B, B ^ S Produksi
non unitas : S ^ bb, A ^ b, B ^ a Proses eliminasi yang dilakukan adalah :
S ^ A dan A ^ b menghapus S ^ A dan menghasilkan
S ^ b S ^ A ^ B dan B ^ a menghasilkan S ^ a A ^ B dan B ^ a menghapus A ^ B
dan menghasilkan A ^ a A ^ B ^ S dan S ^ bb menghasilkan A ^ bb B ^ S dan S ^
bb menghapus B ^ S dan menghasilkan B ^ bb B ^ S ^ A dan A ^ b menghasilkan B ^
b Perhatikan bahwa derivasi S ^ A ^ B ^ S (derivasi tertutup) dan produksi S ^
bb akan menghasilkan produksi S ^ bb yang jelas bukan merupakan produksi baru.
Karena itu terhadap derivasi ini tidak dilakukan eliminasi.
3. Penerapan batasan bentuk ruas kanan produksi
Penerapan batasan bentuk ruas kanan produksi
adalah mengubah semua bentuk produksi ke dalam 2 bentuk berikut : A ^ a dan A ^ B1 B2 ... Bn, n > 2.
Contoh 11:
Terapkan batasan bentuk ruas kanan
produksi terhadap himpunan produksi berikut :
Q = {S ^ Aa, A ^ bAa}
Solusi :
- produksi S ^ Aa diubah menjadi : S ^ AX a ,
X a ^ a
- produksi A ^ bAa diubah menjdi : A ^ X^ A Xa ,
Xa ^ a, X^ ^ b sehingga himpunan produksi menjadi :
Q = {S ^
AX a, A ^ X b A X a ,
X a ^ a’ X b ^ b}
4. Penerapan batasan panjang ruas kanan produksi
Penerapan batasan panjang ruas kanan produksi
adalah mengubah semua bentuk produksi sehingga panjang untai ruas kanannya
< 2.
Contoh 12 :
Terapkan batasan panjang ruas kanan
produksi terhadap himpunan produksi berikut : Q = {S ^ ABCD | ABC, B ^ XbB
Xa }
Solusi :
- produksi S ^ ABCD diubah menjadi : S ^ AT1 , T1 ^ BT2 , T2 ^ CD
- produksi S ^ ABC diubah menjadi : S ^ AT3 , T3 ^ BC
- produksi B ^ Xb B X a diubah
menjadi : B ^ Xb T4 , T4 ^ B
X a
sehingga himpunan produksi menjadi :
sehingga himpunan produksi menjadi :
Q = {S — ATj , Tj — BT2 , T2 — CD, S —
AT3
T4 — B
X a }
• Contoh 13
: Penyelesaian Konversi CFG ke CNF
Diberikan Q = {S —■ AACD , A —■ aAb |s , C —■ aC
| a , D —■ aDa | bDb |s } Transformasikan himpunan produksi tersebut ke dalam
bentuk CNF-nya.
1. Eliminasi Produksi Hampa
Dari bentuk Q di atas, maka
simbol nullable adalah A dan D. Dua langkah eliminasi yang dilakukan
adalah :
- penghilangan produksi hampa A —■ s dan D —■ s
- pembentukan produksi hampa dari produksi yang
mengandung simbol nullable :
• dari S — AACD dibentuk : S — ACD | AAC | AC | CD
| C
• dari A —■ aAb dibentuk : A —■ ab
• dari D —■ aDa | bDb dibentuk : D —■ aa | bb
Dengan demikian Q berubah menjadi :
Q = {S — AACD | ACD | AAC | AC | CD | C ,
A —■ aAb | ab , C —■ ac | a , D —■ aDa | bDb | aa | bb }
2. Eliminasi Produksi Unitas
Q hasil langkah pertama di atas mengandung satu
produksi unitas : S —■ C. Proses eliminasi yang dilakukan adalah :
S —■ C dan C —■ ac | a menghapus S —■ C dan
menghasilkan S —■ ac | a Dengan demikian Q berubah menjadi :
Q = {S — AACD | ACD | AAC | AC | CD | ac | a ,
A —■ aAb | ab , C —■ ac | a , D —■ aDa | bDb | aa | bb }
3. Penerapan Batasan Bentuk Ruas Kanan
Setelah langkah 2, ternyata Q masih mengandung
produksi-prosuksi yang tidak ber-bentuk A —■ a dan A —■ B1 B2 ... Bn(n > 2).
Produksi-produksi tersebut
adalah :
S —■ aC, A —■ aAb | ab, C —■ aC, D —■ aDa | bDb
| aa | bb. Bentuk-bentuk produksi ini diubah sebagai berikut :
S —■ aC menjadi S —■ X a C dan Xa —■
a
A —■ aAb | ab menjadi A —■ Xa A
X b | X a X b dan Xa —■ a, Xb —■ b C —■ aC
menjadi C —■ Xa C dan X a —■ a
D — aDa | bDb | aa | bb menjadi D — X a D
X a | Xb D Xb | X a X a |
Xb Xb dan X a —— a, X b —— b
Bentuk Grammar sampai langkah 3 ini adalah :
Q = { S — AACD | ACD | AAC | AC | CD | X a C|a
, A — X a A X b | X a X b ,
C — X a C | a , D — X a D X a | X b D
X b | X a X a | X b X b ,
X a — a , X b — b}
4. Penerapan Batasan Panjang Ruas Kanan
Bentuk Q terakhir masih mengandung
produksi-produksi dengan panjang untai ruas kanan > 2. Produksi-produksi
tersebut adalah : S — AACD | ACD | AAC ,
A — XaAXb,
D — XaDXa |XbDXb. Bentuk-bentuk produksi ini diubah
sebagai berikut :
S —— AACD menjadi : S —— A T1 , T1 —— A T2 , T2 —— CD S —— ACD menjadi : S —— A T2 , T 2 —— CD S —— AAC menjadi : S —— A T 3 , T 3 —— AC A —— X a AX b menj adi : A —— X a T 4, T 4 —— AX b D — X a DX a menjadi : D — X a
T 5 , T 5 — DX a D
— X b DX b menjadi : D — X b T g, T g — DX b
Bentuk grammar sampai langkah 4 ini adalah
bentuk CNF, yaitu :
Q = {S — A T1 | A T2 | A T 3 | AC|CD|Xa C | a,
T1 — A
T2, T2 —
CD , T 3 — AC ,
A — X a T 4 | X a X b ’ T 4 —
A X b ’
C — X a C| a,
D — X a T 5 | X b T g | X a X a I X b X b • T 5
— DX a. T 6 — DX b •
X a — a’ X b —
b }
• Definisi : PDA adalah pasangan 7 tuple M = (Q,
Z, r, q0, Z0,5, A), dimana :
Q : himpunan hingga stata, Z : alfabet input, r
: alfabet stack, q0 e Q : stata awal,
Z 0 e r : simbol
awal stack, A e Q : himpunan stata penerima,
Q xT*
fungsi transisi 5 : Q x (Z u {s}) x r ^ 2
(himpunan bagian dari Q x r*)
• Untuk stata q e Q, simbol input a e Z, dan
simbol stack Xe r, 5(q, a, X) = (p, a) berarti : PDA bertransisi ke
stata p dan mengganti X pada stack dengan string a.
• Konfigurasi PDA pada suatu saat dinyatakan
sebagai triple (q, x, a), dimana :
q e Q : stata pada saat tersebut, x e Z* :
bagian string input yang belum dibaca, dan a e r* : string yang menyatakan
isi stack dengan karakter terkiri menyatakan top of stack.
• Misalkan (p, ay, XP) adalah sebuah konfigurasi,
dimana : a e Z, y e Z*, X e r, dan P e r*. Misalkan pula 5(p, a, X) = (q, y)
untuk q e Q dan y e r*. Dapat kita tuliskan bahwa : (p, ay, XP) ^ (q, y, yP).
Contoh 14 (PDA Deterministik):
PDA M = (Q, Z, r, q0, Z0,
5, A) pengenal palindrome L = {xcxT |x e (a|b)*}, dimana xT adalah
cermin(x), mempunyai tuple : Q = {q0, q1, q2},
A = { q2},
Z = {a, b, c}, r = {a, b, Z 0},
dan fungsi transisi 5 terdefinisi melalui tabel berikut :
Sebagai contoh, perhatikan bahwa
fungsi transisi No. 1 dapat dinyatakan sebagai : 5(q0, a, Z0)
= (q0, aZ0). Pada tabel transisi tersebut terlihat
bahwa pada stata q0 PDA akan melakukan PUSH jika mendapat
input a atau b dan melakukan transisi stata ke stata q1 jika
mendapat input c. Pada stata q1 PDA akan melakukan POP.
Berikut ini pengenalan dua string oleh PDA di atas :
|
1.
abcba : (q 0, abcba, Z 0) ^ (q 0,
bcba, aZ 0)
|
(1)
|
^
(q0,
cba, baZ0)
|
(4)
|
^ (q1, ba, baZ0)
|
(9)
|
^ (q1,
a, aZ0)
|
(11)
|
^ (q 1, s, Z 0 )
|
(10)
|
^ (q2,
s, Z0)
|
(12) (diterima)
|
2. acb : (q0, acb, Z0) ^ (q0, cb, aZ0)
|
(1)
|
^ (q1,
b, aZ0)
|
(8), (crash ^ ditolak)
|
3. ab : (q0, ab, Z0) ^
^ b aZ0) (1)
^ (q 0, s, baZ 0 ) (4) (crash ^ ditolak)
|
Penerimaan dan penolakan
tiga string di atas dapat dijelaskan sebagai berikut :
1. string abcba diterima
karena tracing sampai di stata penerima (q 2 )
dan string
“abcba” selesai dibaca (string yang belum dibaca
= s)
2. string acb ditolak karena konfigurasi akhir (q1, b, a Z0)
sedangkan fungsi transisi
5(q 1, b, a) tidak terdefinsi
3.
string ab ditolak karena konfigurasi akhir (q0, s, baZ 0 ) sedangkan fungsi transisi 5(q0, s, b) tidak terdefinsi
• Notasi (p, ay, XP) ^ (q, y, yP) dapat diperluas menjadi : (p, x, a) ^* (q, y, P), yang berarti
konfigurasi (q, y, P) dicapai melalui sejumlah (0 atau lebih) transisi.
• Ada dua cara penerimaan sebuah kalimat oleh PDA,
yang masing-masing terlihat dari konfigurasi akhir, sebagaimana penjelasan
berikut :
Jika M = (Q, Z, r, q0, Z 0,5,
A) adalah PDA dan x eZ*, maka x diterima dengan stata akhir (accepted by
final state) oleh PDA M jika : (q0, x, Z0) ^* (q, s,
a) untuk a e r * dan q e A. x diterima dengan stack hampa (accepted by
empty stack) oleh PDA M jika : (q0, x, Z 0 )
^* (q, s, s) untuk q e Q.
Contoh 15 (PDA
Non-Deterministik):
PDA M = (Q, Z, r, q0, Z0, 5, A) pengenal palindrome L = {xxT |x e (a|b)*} mempunyai komponen tuple berikut : Q = {q0, q1, q2}, A = { q2 }, Z = {a, b}, r = {a, b, Z0}, dan fungsi transisi 5 terdefinisi melalui tabel berikut :
Pada tabel transisi tersebut terlihat
bahwa pada stata q0 PDA akan melakukan PUSH jika mendapat
input a atau b dan melakukan transisi stata ke stata q1 jika
mendapat input s. Pada stata q1 PDA akan melakukan POP.
Contoh 14 dan 15 menunjukkan bahwa PDA dapat dinyatakan sebagai mesin
PUSH-POP.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
VI. PENGANTAR KOMPILASI 6.1. Translator
Translator (penerjemah) adalah sebuah program yang menerjemahkan sebuah program sumber (source program) menjadi program sasaran (targetprogram).
Jenis
Translator
|
Bahasa
Pemrograman
|
|
Input
|
Output
|
|
Assembler
|
Bahasa Rakitan
|
Bahasa mesin
|
Compiler (Kompilator)
|
Bahasa tingkat tinggi
|
Bahasa tingkat rendah
|
Jenis-jenis translator berdasarkan
bahasa pemrograman yang bersesuaian dengan input dan outputnya adalah :
|
6.2. Kompilator dan komponennya
Black box sebuah kompilator dapat digambarkan melalui diagram berikut :
pesan-pesan kesalahan
(error messages)
Proses kompilasi
dikelompokkan ke dalam dua kelompok besar :
1. analisa : program sumber dipecah-pecah dan
dibentuk menjadi bentuk antara (inter
mediate representation)
2. sintesa : membangun program sasaran yang diinginkan dari
bentuk antara
Program sumber merupakan
rangkaian karakter. Berikut ini hal-hal yang dilakukan oleh setiap fase pada
proses kompilasi terhadap program sumber tersebut :
1. Penganalisa leksikal :
membaca program sumber, karakter demi karakter.
Sederetan (satu atau lebih) karakter dikelompokkan menjadi satu kesatuan
mengacu kepada pola kesatuan kelompok karakter (token) yang
ditentukan dalam bahasa sumber. Kelompok karakter yang membentuk
sebuah token dinamakan lexeme untuk token tersebut. Setiap token yang
dihasilkan disimpan di dalam tabel simbol. Sederetan karakter yang
tidak mengikuti pola token akan dilaporkan sebagai token tak dikenal
(unidentified token). Contoh : Misalnya pola token
untuk identifier I adalah : I = huruf(huruf \ angka)*.
Lexeme ab2c dikenali sebagai token
sementara lexeme 2abc atau abC tidak dikenal.
2. Penganalisa sintaks :
memeriksa kesesuaian pola deretan
token dengan aturan sintaks yang ditentukan dalam bahasa
sumber. Deretan token yang tidak sesuai aturan sintaks akan dilaporkan
sebagai kesalahan sintaks (sintax error). Secara logika deretan token
yang berse- suaian dengan sintaks tertentu akan dinyatakan sebagai pohon
parsing (parse tree). Contoh : Misalnya sintaks untuk
ekspresi if-then E adalah : E ^ if L then, L ^
IOA, I = huruf(huruf \ angka)*, O ^ < \ = \ > \ <= \ >=,
A ^ 0 \ 1 \... \ 9. Ekspresi if a2 < 9 then adalah
ekspresi sesuai sintaks; se^nentara ekspresi if a2 < 9
do atau if then a2B < 9 tidak sesuai. Perhatikan
bahwa contoh ekspresi terakhir juga mengandung token yang tidak dikenal.
3. Penganalisa semantik :
memeriksa token dan ekspresi dengan acuan
batasan-batasan yang ditetapkan. Batasan-batasan tersebut misalnya :
a. panjang maksimum token identifier adalah 8 karakter,
b. panjang maksimum ekspresi tunggal adalah 80 karakter,
c. nilai bilangan bulat adalah -32768 s/d 32767,
d. operasi aritmatika harus melibatkan operan-operan yang bertipe
sama.
4. Pembangkit kode (atau pembangkit kode antara):
membangkitkan kode antara (intermediate code)
berdasarkan pohon parsing. Pohon parse selanjutnya diterjemahkan oleh suatu
penerjemah, misalnya oleh penerjemah berdasarkan sintak (syntax-directed
translator). Hasil penerjemahan ini biasanya merupakan perintah tiga
alamat (three-address code) yang merupakan representasi program untuk
suatu mesin abstrak. Perintah tiga alamat bisa berbentuk quadruples
(op, argl, arg2, result), tripels (op, argl, arg2). Ekspresi dengan satu
argumen dinyatakan dengan menetapkan arg2 dengan -
(strip, dash).
5. Pengoptimal kode :
melakukan optimasi
(penghematan space dan waktu komputasi), jika mungkin,
terhadap kode antara.
Tidak ada komentar:
Posting Komentar