T EORI BAHASA DAN OT OMATA MAT ERI KULIAH : An Int roduct ion t o Formal Language
Raja Fut sal
ABSTRAK
Automata adalah aktivitas yang mengurusi persoalan formalisasi tatabahasa (grammar) dengan alat bantu
mesin matematis. Finite State Automata (FSA) terdiri dari Non-Deterministic FSA (NFSA) dan Deterministic
FSA (DFA). FSA digunakan untuk mengenali bahasa reguler dengan notasi ekspresi. Dalam automata
mengandung unsur : Grammar (tata bahasa), Parsing (mengurai string-string dalam buffer), Scanning
(membaca data streaming ke dalam buffer)
Dalam paper mencakup bahasan bagaimana proses transformasi reguler expression ke DFA dan NFA
dengan menguraikan tahap demi tahap hingga muncul diagram transisi yang akan digunakan untuk meregulasi
bahasa.
Paper ini akan menghasilkan diagram transisi yang bersifat non deterministik dan deterministik, dan
sebelumnya tabel diagram transisi sudah terbentuk.
Kata Kunci : Buffer, ekspressi, scanning, diagram transisi, non determistik dan deterministik
⎪w⎪
3. Jika w adalah sebuah string maka panjang
2.1 Beberapa Pengertian Dasar string dinyatakan sebagai dan
Proses penerjemahan suatu bahasa sumber didefinisikan sebagai cacahan (banyaknya)
• Head string w adalah simbol paling depan dari a. Operasi concatenation bersifat asosiatif :
adalah ε : εx = xε = x
b. Elemen identitas operasi concatenation
w dengan menghilangkan simbol paling depan
• Tiga sifat aljabar alternation :
• Substring w adalah string dihasilkan dari string
dari string w tersebut. Contoh : bc adalah Tail(x)
a. Operasi alternation bersifat komutatif :
w dengan menghilangkan nol atau lebih simbol x⏐y = y⏐x
paling depan dan/atau simbol paling belakang b. Operasi alternation bersifat asosiatif :
c, dan ε adalah semua Substring (x)
dari string w tersebut. Contoh : abc, ab, bc, a, b, x⏐(y⏐z) = (x⏐y)⏐z
• Proper Substring w adalah string dihasilkan dari
c. Elemen identitas operasi alternation adalah
• Sifat
dirinya sendiri : x⏐x = x
string w dengan menghilangkan satu atau lebih distributif concatenation terhadap
simbol paling depan dan/atau simbol paling
• Beberapa kesamaan :
alternation : x (y⏐z) = xy⏐xz
a, b, c, dan ε adalah semua Substring (x)
belakang dari string w tersebut. Contoh : ab, bc,
ε⏐x⏐x ⏐x ⏐…
konteks automata, string-string yang di-input ke
2 3
+
dalam otomata harus merupakan bahasa yang dapat
• Positive Closure : x = x⏐xx⏐ … = dikenali oleh aturan pada automata. Aturan pada
x⏐x ⏐x ⏐…
2 3 automata ini disebut sebagai fungsi transisi.
Bahasa memiliki aturan yang disebut sebagai
tata bahasa (grammar). Dalam hubungannya
dengan automata, Noam Chomsky melakukan
“Simulasi Transformasi Regular Expression Terhadap Finite State Automata” 3
Oleh : Sinar Sinurat
Pelita Informatika Budi Darma, Volume : IV, Nomor: 1, Agustus 2013 ISSN : 2301-9425
…
(2)
“Simulasi Transformasi Regular Expression Terhadap Finite State Automata” 4
Oleh : Sinar Sinurat
Pelita Informatika Budi Darma, Volume : IV, Nomor: 1, Agustus 2013 ISSN : 2301-9425
L1(G1)={anban⏐n ≥1}
Dari ke dua pola kalimat diperoleh :
2.7 SCANNING BUFFER
S ⇒ aB (2) ⇒
umum :
S aS
⇒ abC (3) …
(1)
⇒ anB
(1) Berikut fragmen program dari bahasa pascal :
type Text_Pos = record {posisi penunjuk karakter}
⇒ anbC
(2) Row_Numb : word;
{baris ke-, bisa ribuan
baris/program_sumber}
⇒ anbaC
(3)
Char_Numb : byte;
{karakter ke-, maksimum 255
…
(4) karakter/baris}
⇒ anbam-1C (4)
end;
⇒ anbam
var Now_Pos : Text_Pos; {posisi sekarang}
(5) Line : string; {baris yang sedang diproses}
L2(G2)={anbam n ≥ ,m ≥
Dari ke dua pola di atas diperoleh : End_of_line : byte;
{posisi akhir baris yang sedang diproses}
procedure Next_Character(var Ft : text); {baca karakter
1}
berikut pada program_sumber}
begin
Contoh 3 : G3 dengan Q3 = {1. S→aSBC, 2. S→ with Now_Pos do { perintah with ... do ?}
3. bB → bb, 4. bC →
abC, begin
if Char_Numb = End_of_line then
bc, begin
5. CB→ BC, 6. List_Line; {menampilkan kembali baris
yang telah dibaca, beserta errornya}
cC→ cc} Next_Line(Ft); {membaca baris berikutnya}
Maka diperoleh : Row_Numb := Row_Numb + 1;
derivasi kalimat terpendek : Derivasi kalimat Char_Numb := 1
S ⇒ abC ⇒
umum : end
(2) S aSBC else
⇒ abc ⇒
(1) Char_Numb := Char_Numb + 1;
(4) aaSBCBC character := Line[Char_Numb]
end
⇒ aaabCBCBC
(1)
end;
Derivasi terpendek 2 : procedure List_Line;
S ⇒ aSBC ⇒ aaabBCCBC
(2) begin
(1) write{Now_Pos.Row_Numb : 3, ‘ ‘);
⇒ aabCBC ⇒ aaabBCBCC
(5) writeln(Line);
(2) List_Error; {menampilkan kesalahan-kesalahan
yang terjadi pada suatu baris}
⇒ aabBCC ⇒ aaabBBCCC
(5)
end
(5) procedure Next_Line(Ft : text);
⇒ aabbCC ⇒ aaabbBCCC
(5) begin
(3) readln(Ft, Line);
⇒ aabbcC ⇒ aaabbbCCC
(3) End_of_line := length(Line) + 1:
(4) Line := Line + #32; {karakter spasi}
end;
⇒ aabbcc ⇒ aaabbbcCC
(3)
(6)
2.8 PENULISAN GRAMMAR
⇒
(4)
aaabbbccC Reguler Expression (RE) Vs Context Free
Grammar (CFG). RE⊆CFG : Setiap bentuk yang
⇒
(6)
aaabbbccc dapat dideskripsikan oleh RE dapat di deskripsikan
(6) oleh CFG CFG dibentuk dari diagram transisi
dengan aturan :
“Simulasi Transformasi Regular Expression Terhadap Finite State Automata” 5
Oleh : Sinar Sinurat
Pelita Informatika Budi Darma, Volume : IV, Nomor: 1, Agustus 2013 ISSN : 2301-9425
A0 → aA0|bA0|aA1
Misalnya : RE : (a|b)*abb maka CFG:
Contoh komponen-komponen sebuah otomata
A1 → bA2 adalah sebagai berikut:
A2 → bA3 M = (Q,∑,δ,q0,F)
A3 → ∈
∑ = {0,1}
Q = {S,A,B,C}
RE digunakan untuk lexical analysis, alasannya
adalah : q0 = S
δ = {δ(S,0)=B,
1. Penulisan RE lebih sederhana F = {S}
δ(S,1)=A, δ(A,0)=C,
2. Notasi RE lebih mudah dimengerti
δ(A,1)=S, δ(B,0)=S,
3. RE dapat menghasilkan scanner yang efisien
δ(B,1)=C, δ(C,0)=A,
4. Modularisasi analisis
Di sisi lain bahwa RE lebih sesuai untuk δ(C,1)=B}
mendeskripsikan token-token yaitu :
“Simulasi Transformasi Regular Expression Terhadap Finite State Automata” 6
Oleh : Sinar Sinurat
Pelita Informatika Budi Darma, Volume : IV, Nomor: 1, Agustus 2013 ISSN : 2301-9425
Diberikan sembarang ekspressi reguler (RE), Simulasi DFA dimaksudkan untuk mengenali
misalkan: r=(a|b)*abb, maka langkah-langkah untuk token.
mengkonversikan adalah sebagai berikut : type Token_Kind = record
1. Tambahkan augmented pada RE yaitu : tipe : byte; nilai : byte
r = ( a | b ) *a b b # end;
2. Berikan indeks untuk masing-masing karakter var Token : array[0..Max_State] of Token_Kind;
yang ada pada RE untuk menyatakan posisi Found_Token : Token_Kind; {token yang
node dalam pohon yaitu : ditemukan}
r = ( a | b )* a b b # Tok_Pos : Text_Pos; {posisi token dalam
1 2 3 4 5 6 program sumber}
3. Buatlah pohon sintaks untuk menyatakan nilai procedure Next_Token(var Ft : text); {digunakan untuk
firstpost, lastpos dan nullable yaitu : mengenali sebuah token}
var state1, state2 : shortint;
begin
state1 := 0;
Tok_Pos := Now_Pos;
repeat
state2 := Next_State(state1, character);
if state2 <> -1 then {-1 bersesuaian dengan x pada
tabel transisi}
begin
state1 := state2;
Next_Character(Ft); {baca karakter berikut
pada program_sumber}
4. Buatlah tabel Followpos dalam Himpunan {di antaranya menghasilkan nilai baru untuk
posisi semua simbol terletak pada sesudah Now_Pos}
symbol pada posisi n masing-masing node pada end;
langkah 2 yaitu : until state2 = -1;
Node Followpos Act_for_Token(state1);
1 {1,2,3} end;
2 {1,2,3} procedure Act_for_Token(state : shortint);
var Tok_Length : byte;
3 {4}
Err : integer;
4 {5}
begin
5 {6} Current_Token(Token[state].tipe,
6 - Token[state].nilai);
Tok_Length := Now_Pos.Char_Numb -
5. Berdasarkan tabel pada langkah 4 dapat dibuat Tok_Pos.Char_Numb;
diagram transisi NFA (Digraph untuk fungsi case Token[state].tipe of
followpos) yaitu : 0 : Error(‘Token tidak dikenal!’, Tok_Pos);
27 : Id := copy(Line, Tok_Pos.Char_Num,
Tok_Length);
28 : val(copy(Line, Tok_Pos.Char_Num,
Tok_Length), IN, Err);
29 : val(copy(Line, Tok_Pos.Char_Num,
6. Buatlah tabel DFA dengan menggunakan tabel Tok_Length), RN, Err);
followpos yaitu : end
end;
catatan :
- copy(string, start, length) mengembalikan substring
- val(string_value, number_variable, error_flag) :
jika string_value = ‘137’ maka number_variable =
137 dan error_flag = 0
7. Bentuklah diagram transisi DFA dari tabel - Token.tipe ∈ {1, 2, 3, ..., 26} dimisalkan bernilai pasti,
langkah 6 yaitu : sehingga tidak perlu penangan-an lebih lanjut
“Simulasi Transformasi Regular Expression Terhadap Finite State Automata” 7
Oleh : Sinar Sinurat
Pelita Informatika Budi Darma, Volume : IV, Nomor: 1, Agustus 2013 ISSN : 2301-9425
“Simulasi Transformasi Regular Expression Terhadap Finite State Automata” 8
Oleh : Sinar Sinurat