Mesin Abstrak
Mesin : mekanisme yang terdefinisi dan mengerti serta mampu untuk mengeksekusi aksi-aksi primitif yang terdefinisi untuk mesin tersebut Mesin Abstrak : mesin yang dianggap ada, dan diasumsikan mampu melakukan mekanisme yang didefinisikan untuk mesin tersebut.
Mesin Abstrak
Dalam pemrograman, seringkali pemrogram harus mendefinisikan mesin-mesin abstrak sebelum menuliskan kode program karena mesin abstrak memungkinkan pemrogram untuk melakukan pemecahan masalah secara bertahap. Mendefinisikan mesin abstrak berarti mendefinisikan: sekumpulan state yang mungkin sekumpulan aksi primitif
Mesin Abstrak
Sebenarnya, bahasa tingkat tinggi adalah "mesin abstrak" bagi assembler, dan lebih abstrak bagi mesin riil yaitu komputer.
Mesin Abstrak
Macam mesin abstrak :
mesin gambar mesin karakter mesin integer mesin rekam
Dalam kuliah ini akan dibahas mesin karakter Selain mesin karakter akan dibahas pula mesin couple dan mesin kata, yang juga merupakan mesin abstrak yang memanfaatkan primitif-primitif dari mesin karakter
Mesin Karakter
Mesin karakter adalah mesin abstrak yang terdiri dari:
Pita berisi deret karakter, yang diakhiri dengan . (titik), pita yang hanya berisi . disebut sebagai pita kosong Tombol START, ADV Sebuah lampu EOP (End Of Pita) Jendela yang ukurannya sebesar satu karakter. karakter yang sedang pada jendela dinamakan CC (Current Character)
Mesin Karakter
Lampu EOP menyala jika CC = . Tombol START dan ADV digunakan untuk mengubah state mesin Mesin hanya dapat dioperasikan jika EOP tidak menyala
Mesin Karakter
STUDI KASUS
Deretan aksi (penekanan tombol) pada mesin karakter dan mesin integer untuk menghitung banyaknya huruf pada pita : START;RESET {CC=I;CI=0} ADV;INC {CC= ;CI=1} ADV;INC {CC=L;CI=2} ADV;INC {CC=O;CI=3}
Bagaimana jika urutan penekanan tombol dirubah menjadi INC dulu, baru ADV ?
Kamus :
Algoritma : RESET {Inisialisasi, CI = 0} START {First_Elmt} while (CC .} do {not EOP} INC {Proses : CI=CI+1} ADV {Next_Elmt} {CC = .} Output (CI) {Terminasi}
Program COUNT_A {SKEMA PEMROSESAN DENGAN MARK : Menghitung banyaknya huruf A pada pita karakter} Kamus : Algoritma : RESET {Inisialisasi, CI = 0} START {First_Elmt} while (CC .} do {not EOP} depend on CC {Proses} CC = A : INC CC A : ADV {Next_Elmt} {CC = .} Output (CI) {Terminasi}
Kamus :
Algoritma :
START {First_Elmt} depend on CC CC = . : Output (Pita kosong} CC . : RESET {Inisialisasi, CI = 0} repeat depend on CC {Proses} CC = A : INC CC A : ADV {Next_Elmt} until CC =. Output (CI) {Terminasi}
while (CC .) do CPT_KAR CPT_KAR + 1 depend on CC CC = A : CPTA CPTA + 1 CC A : ADV {Next_Elmt} {CC = . : semua karakter pada pita sudah dibaca, mungkin CPT_KAR = 0} {Terminasi} depend on CPT_KAR CPT_KAR 0 : Output (CPT_A/CPT_KAR) CPT_KAR = 0 : Output (Frekuensi tidak terdefinisi)
Program FREKA-2 {SKEMA PEMROSESAN DENGAN MARK, dengan penanganan kasus kosong Kamus : CPT-KAR : Integer {banyaknya karakter pada pita yang sudah dibaca} CPTA : Integer {banyaknya huruf A yang muncul pada bagian pita yang sudah dibaca} Algoritma : START {First_Elmt} if CC = . then output (Pita kosong)
else
{CC .) CPT_KAR 0 {Inisialisasi} CPTA 0 {Inisialisasi} repeat CPT_KAR CPT_KAR + 1 if (CC = A) then CPTA CPTA + 1 {else (CC .) do nothing} ADV {Next_Elmt} until (CC = .) output (CPTA/CPT_KAR) {Terminasi, CPT_KAR pasti tidak nol)