MODUL 1 MESIN KARAKTER TUJUAN PRAKTIKUM 1. Mahasiswa dapat memahami salah satu contoh aplikasi otomata yaitu mesin karakter 2. Mahasiswa mampu mengimplementasikan mesin karaketer dalam program pengolahan teks LANDASAN TEORI 1. Mesin Abstrak Kajian dari kuliah teori bahasa formal dan otomata adalah mempelajari bahasa, grammar serta dikaitkan dengan mesin (otomata) yang mengenali atau menerima bahasa tersebut. Mempelajari otomata sama dengan mempelajari mesin. Mesin adalah mekanisme yang terdefinisi serta mampu untuk mengesksekusi aksi-aksi primitif yang terdefinisi untuk mesin tersebut. Mesin abstrak adalah mesin yang dianggap ada, dan diasumsikan mampu melakukan mekanisme yang didefinisikan untuk mesin tersebut. Mesin abstrak memodelkan suatu semesta (universe) tertentu. Dalam pemrograman, seringkali pemrogram harus mendefinisikan mesin-mesin abstrak sebelum menuliskan kode program karena dengan mesin abstrak memungkinkan permrogram untuk melakukan pemecahan secara bertahap. Mesin abstrak yang diciptakan pada tahap konseptual bahkan memungkinkan pemrogram untuk berpikir tahap demi tahap samapi akhirnya dijabarkan dalam mesin riiil. mesin abstrak mesin riil (komputer) mesin abstrak Modul 1 Mesin Karakter 1
Sebetulnya bahasa tingkat tinggi adalah mesin abstrak bagi assembler dan lebih abstrak bagi mesin riil yaitu komputer. Mendefinisikan mesin abstrak, berarti mendefinisikan : - sekumpulan status yang mungkin - sekumpulan aksi primitif yang diasumsikan dapat dimengerti dan dieksekusi mesin yang bersangkutan Pada modul ini akan dibahas salah satu contoh mesin abstrak yaitu mesin karakter. 2. Mesin Karakter Definisi : Mesin karakter adalah mesin abstrak yang terdiri dari : - pita karakter yaitu pita yang berisi deretan karakter, yang diakhiri dengan. (titik), pita yang hanya berisi. disebut dengan pita kosong - tombol start dan adv - sebuah lampu EOP ( End of Pita) - jendela yang ukurannya sebesar satu karakter, hanya karakter yang posisinya pada jendela yang dapat dikonsultasi (dibaca); karakter lain tidak kelihatan. Karakter yang sedang ada di jendela disebut dengan cc (curent caracter) Mesin mempunyai mekanisme untuk mengubah posisi pita dan menyalakan lampu EOP jika karakter yang ada pada jendela adalah titik. Keadaan (status) dari mesin setiap saat ditentukan oleh cc dan lampu EOP. Tombol start dan adv digunakan untuk mengubah status mesin. Mesin hanya dapat dioperasikan jika EOP tidak menyala. Modul 1 Mesin Karakter 2
EOP start adv Primitif untuk mengubah posisi pita procedure reset { mesin siap dioperasikan. pita disiapkan untuk dibaca. karakter pertama ada pada pita posisinya ada pada jendela} i.s. : sembarang f.s. : cc adalah karakter pertama pada pita; jika cc. maka EOP tidak menyala (false); jika cc =. maka EOP akan menyala (true) } procedure adv { pita dimajukan satu karakter} i.s. : karakter pada jendela = cc; cc. f.s. : cc adalah karakter berikutnya dari cc yang lama cc mungkin =.. Jika cc =. maka EOP akan menyala (true) } 3. Implementasi Mesin karakter Dalam pemrograman, model mesin karakter dikenal dengan model pengaksesan beruntun (sekuensial). Salah satu implementasinya adalah dalam hal pemrosesan terhadap teks. Misal, pada program pengolah kata (text editor) fungsi yang ada antara lain proses pencarian (search) sebuah karakter atau string, menghitung jumlah karakter, memperbaiki kata yang salah secara otomatis (autocorrect) dan sebagainya. Implementasi lain dari mesinkarakter adalah kompiler bahasa pemrograman. Tugas pertama suatu kompiler adalah membaca program sumber untuk mengambil simbol-simbol (keyword, konstanta, variabel, dsb). Komponen kompiler yang melakukan tugas ini disebut dengan scanner. Modul 1 Mesin Karakter 3
Dalam pemrograman,pita karakter (teks) direalisasikan dalam file teks. Misalkan nama file tersebut contoh.txt. Akhir teks harus diakhiri dengan tanda. (titik) sehingga pemrosesan teks dilakukan sebelum mencapai titik. Implementasi mesin karakter dalam bahasa PASCAL sebagai berikut : 1. Deklarasi global var P : text; { pita karakter yang akan diakses} cc : char; {karakter pada posisi jendela mesin} 2. aksi primitif - Proses reset/start procedure reset { mesin siap dioperasikan. pita teks.txt disiapkan untuk dibaca; karakter pertama ada pada pita posisinya ada pada jendela} i.s. : sembarang f.s. : cc adalah karakter pertama pada pita; jika cc. maka EOP tidak menyala (false); jika cc =. maka EOP akan menyala (true) } assign(p, teks.txt ); reset(p); - Proses membaca karakter pada jendela pita kemudian posisi dimajukan {baca karakter pada jendela pita. Karakter yang dibaca disimpan di variabel cc} 3. Contoh program 1. Counthuruf Diberikan sebuah mesin karakter dengan pita berisi karakter (mungkin kosong). Buatlah program untuk menghitung banyaknya huruf yang ada pada pita tersebut (tidak termasuk. ). procedure counthuruf(output n : integer) {menghitung banyaknya karakter pada pita} {k.akhir : n berisi banyaknya karakter dalam pita; n= 0 jika pita kosong} {deklarasi} {deskripsi} n 0 reset_teks Modul 1 Mesin Karakter 4
while cc. do n n + 1 endwhile { cc =. } 2. Count-A menghitung banyaknya karakter A pada pita. procedure count_a(output na : integer) {menghitung banyaknya karakter A pada pita} {k.akhir : na berisi banyaknya karakter A dalam pita; na= 0 jika pita kosong} {deklarasi} {deskripsi} na 0 reset while cc. do if cc = A then na na + 1 endif endwhile { cc =. } contoh 1 : Program Utama Pascal untuk menguji prosedur yang telah dibuat Program Proses_MesinKar; var cc : char; P : text; nkar, na, no_menu : integer; procedure reset_teks; { mesin siap dioperasikan. pita teks.txt disiapkan untuk dibaca; karakter pertama ada pada pita posisinya ada pada jendela} i.s. : sembarang f.s. : cc adalah karakter pertama pada pita; jika cc. maka EOP tidak menyala (false); jika cc =. maka EOP akan menyala (true) } assign(p, teks.txt ); reset(p); procedure count_huruf(var n : integer); {menghitung banyaknya karakter pada pita} {k.akhir : n berisi banyaknya karakter dalam pita; n= 0 jika pita kosong} {deklarasi} {deskripsi} Modul 1 Mesin Karakter 5
n := 0; reset; ; while cc <>. do n := n + 1; ; {endwhile { cc =. }} procedure count_a(var na : integer); {menghitung banyaknya karakter A pada pita} {k.akhir : na berisi banyaknya karakter A dalam pita; na= 0 jika pita kosong} {deklarasi} {deskripsi} na 0 reset while cc. do if cc = A then A na + 1; {endwhile { cc =. }} { deskripsi program utama} repeat writeln( Menu ); writeln( 1. Hitung banyaknya karakter ); writeln( 2. Hitung banyaknya huruf A ); writeln( 0. Keluar program ); writeln( pilihan menu :.. );readln(no_menu); case no_menu of 1: count_huruf(nkar); writeln( Banyaknya huruf karakter =,nkar); 2: count_a(na); writeln( Banyaknya huruf A =,na); 0: writeln( Keluar program ); repeat until keypressed; until no_menu = 0; end. Modul 1 Mesin Karakter 6
TUGAS PRAKTIKUM 1. Ketik dan jalankan program di atas sambil dipahami dan dicamkan skema algoritmanya (karena sebagai dasar untuk pertemuan-pertemuan selanjutnya) 2. Buatlah prosedur berikut kemudian tambahkan ke dalam program utama pada contoh 1. procedure Frek_A(var frek_a: integer) {menghitung frekuensi relatif huruf A yang ada pada pita. Frekuensi relatif huruf A adalah banyaknya huruf A dibagi dengan banyaknya seluruh karakter yang ada pada pita.} ilustrasi hasil : pita aku mhs uin. frek a =2/11 mhs. frek a =0/3 = 0. pita kosong 3. Buatlah prosedur berikut kemudian tambahkan ke dalam program utama pada contoh 1. procedure hit_vokal(var n_vok: integer); {menghitung banyaknya huruf hidup pada pita} Modul 1 Mesin Karakter 7
{k.akhir : n_vok berisi banyaknya huruf hidup dalam pita; n_vok = 0 jika pita kosong} 4. Buatlah prosedur berikut kemudian tambahkan ke dalam program utama pada contoh 1. procedure hit_konsonan(var n_kon: integer); {menghitung banyaknya huruf konsonan pada pita} {k.akhir : n_kon berisi banyaknya huruf konsonan dalam pita; n_kon = 0 jika pita osong} Modul 1 Mesin Karakter 8