Anda di halaman 1dari 11

LAPORAN

TEKNIK KOMPILASI
Vending Machine

OLEH :
SHABRINA
MYRATUN FUAH

PENDIDIKAN TEKNIK INFORMATIKA DAN


KOMPUTER
JURUSAN TEKNIK ELEKTRO
FAKULTAS TEKNIK
UNIVERSITAS NEGERI MAKASSAR

A. JUDUL LAPORAN
Vending machine (mesin penjual otomatis)
B. TUJUAN LAPORAN
1. Mahasiswa dapat membuat diagram state dari deskripsi program yang
akan di buat.
2. Mahasiswa dapat membuat tabel transisi dari diagram state yang
telah di buat.
3. Mahasiswa dapat menuangkan diagram state yang telah di buat
kedalam bahasa pemrograman, yaitu bahasa pascal.
4. Mahasiswa dapa menguasai bahasa pemrograman pascal.
C. TEORI DASAR
1. Finite State Automata
Finite State Automata / State Otomata berhingga, selanjutnya kita
sebut

sebagai

FSA,

bukanlah

mesin

fisik

tetapi

suatu

model

matematika dari suatu sistem yang menerima input dan output diskrit.
Finite State Automata merupakan mesin otomata dari bahasa
regular. Suatu Finite State Automata memiliki state yang banyaknya
berhingga, dan dapat berpindah-pindah dari suatu state ke state lain.
Secara formal finite state automata dinyatakan oleh 5 tupel atau
M=(Q, , , S, F), dimana :
Q = himpunan state / kedudukan
= himpunan simbol input / masukan / abjad
= fungsi transisi
S = state awal / kedudukan awal (initial state)
F = himpunan state akhir
Finite State Automata yang memiliki tepat satu state berikutnya
untuk setiap symbol masukan yang diterima disebut Deterministic
Finite Automata.
Sebagai contoh, kita memiliki sebuah otomata seperti pada
gambar di bawah ini.

Konfigurasi Deterministic Finite Automata di atas secara formal


dinyatakan sebagai berikut.
q ,q ,q
Q={ 0 1 2 }
= {a,b}
q0
S =
F ={

q2

Fungsi transisi yang ada sebagai berikut.


d(q 0 , a) = q 0
d(q 0 , b) = q1
d(q1 , a) = q1
d(q1 , b) = q 2
d(q 2 , a) = q1
d(q 2 , b) = q 2
Biasanya fungsi-fungsi transisi ini kita sajikan dalam sebuah tabel
transisi. Tabel transisi tersebut menunjukkan state-state berikutnya
untuk kombinasi state-state dan input. Tabel transisi dari fungsi
transisi di atas sebagai berikut.

q0
q1
q2

a
q0
q1
q1

b
q1
q2
q2

a. Non Deterministic Finite Automata

Non Deterministic Finite Automata didefinisikan pula dengan


lima (5) tupel, sama seperti halnya pada Deterministic Finite
Automata. Perhatikan contoh di bawah ini.

Perhatikan gambar di atas, bila state q

mendapat input a

bisa berpindah ke state q0 atau q1 , yang secara formal


dinyatakan :
(q 0 , a) = {q 0 , q1 }
Maka otomata ini

disebut non-deterministik

(tidak

pasti

arahnya). Bisa kita lihat table transisinya seperti di bawah ini.

q0

A
{q 0

b
{q1 }

q1

,q1}
{q1 }

{q1 }

2. Analisis leksikal
a.
Masukan bagi sebuah compiler/interpreter adalah program
sumber yang strukturnya berupa deretan dari karakter-karakter
b.

or rather unstructured
Pemrosesan individual karakter yang ketidakefisiennya sangat

c.

tinggi Imagine recognizing while as w h i l e


Oleh karenanya, hal pertama yang kita perhatikan adalah

d.

bentuk kode sumbernya


A Lexical Analyzer (scanner) mengubah deretan karakterkarakter

e.

menjadi

deretan

token-token

i.e.

scanner

tokenizes the input


Sebuah token (lexeme or syntactic unit) adalah komponen dasar

leksikal dari program


3. Bahasa pemrograman pascal
Struktur program Pascal dapat dikelompokkan dalam tiga bagian,
yaitu:

a. Kepala Program
b. Bagian Deklarasi
c. Bagian Pernyataan/Statemen
Kepala program terdiri dari kata program dan nama program.
Kepala

program

bisa

tidak

dituliskan.

Bagian

deklarasi

berisi

konstanta dan variabel yang akan dipakai. Bagian statemen berisi


perintah-perintah yang harus harus dikerjakan dan dimengerti oleh
bahasa Pascal.

Suatu bahasa program komputer biasanya mempunyai aturan penulisan programnya


sendiri. Aturan penulisan program Pascal adalah sebagai berikut;
a. Program Pascal boleh ditulis mulai kolom berapa saja dan diakhiri pada kolom
berapa saja
b. Setiap statemen diakhiri dengan ; (titik koma)
c. Beberapa statemen boleh ditulis sekaligus di dalam satu baris

D. DESKRIPSI PROGRAM
Terdapat sebuah program vending machine (mesin jaja) yang menjual suatu
jenis minuman vending machine tersebut hanya dapat menerima uang koin Rp.
500 dan Rp. 1000. Jika koin tersebut dimasukan kedalam mesi maka
keluarannya berupaminuman.

E. DIAGRAM STATE
q0

X
a

X
$ Rp. 500

q1
b
X

Rp.
3000

$ Rp.

2500

$ Rp.
1500

b
a

q5

$ Rp.

2000

a,b

q4

q6

keterangan
a= 500

b=1000

$= transaksi
N= tombol membatalkan transaksi
L= tombol melanjutkan transaksi

F. TABEL TRANSISI
state

q2

q3 a

input

transaksi
x

Q0

a
Q1

b
Q2

Q1

Q2

Q3

Q0

Q2

Q3

Q4

Q0

Q3

Q4

Q5

Q0

Q4

Q5

Q6

Q0

Q5

Q6

Q0

Q6

G. LISTING PROGRAM
uses crt;
var
a,b,c,harga,sisa,temp : longint;

Rp.
1000

input, jenis : char;


minuman : string;
label input_uang, batal, accept, mulai;
BEGIN
mulai:
a := 500;
b := 1000;
harga := 0;
temp := 3000;
textcolor(1);
textbackground(7);
clrscr;
writeln('+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^+');
writeln('|
MINUMAN SEGAR~HARGA TERJANGKAU
|');
writeln('|

^_^ Programnya SHABRINA dan MYRATUN FUAH ^_^

|');
writeln('+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~|');
writeln('|
|');
writeln(#13#10,'|
Harga minuman Rp.3000,-

|',

#13#10 );
writeln('|
|');
writeln('|
Ketentuan Vending Machine Minuman :
|');
writeln('| -------------------------------------------------------| ');
writeln('|
a:500
|');
writeln('|
b:1000
|');
writeln('|--------------------------------------------------------|');
textcolor(4);
writeln('|
Membatalkan transaksi tekan X
|');
textcolor(1);
writeln('======================================
====================');
writeln;
input_uang :
write('Silahkan masukkan kode koin anda : ');
readln(input);
if (input = 'a') then
harga := harga + a

else if (input = 'b') then


harga := harga + b
else if (input = 'x') then
goto batal
else if (input = 's') then
harga := 0 ;
while harga<>0 do
begin
if (input = 'a') then
temp := temp - a
else if (input = 'b') then
temp := temp - b;
if (temp < 0) then
temp := 0
else if harga >= 3000 then
goto accept;
writeln(#13#10, 'Uang yang telah
dimasukkan : ', harga);
writeln('Pembayaran

tersisa

',

temp,

#13#10);
goto input_uang;
end;
writeln('Maaf, kode koin yang anda masukkan salah, silahkan
ulangi transaksi');
readkey;
clrscr();
goto mulai;
batal:
writeln(#13#10,
'---------------------------------------------------------------------------');
writeln('Transaksi dibatalkan. Uang anda akan
dikeluarkan.');

writeln('Uang yang dikembalikan sebesar : Rp ', harga,


',-');
readln();
clrscr();
goto mulai;
accept:
writeln(#13#10,
'---------------------------------------------------------------------------');
writeln('+
Silahkan ambil minuman
+');
writeln('+ Semoga dapat menyegarkan dahaga anda,
terima kasih
+');
writeln('Pembayaran sebesar : Rp ', harga, ',-');
sisa := harga-3000;
writeln('Sisa uang : Rp ', sisa, ',-');
writeln (#13#10, 'Terima Kasih telah membeli',#13#10);
readln();
clrscr();
goto mulai;
END.
H. LANGKAH KERJA PROGRAM
1. Kondisi 1
a. Dibawah ini merupakan tampilan awal ketika program pascal di
jalankan.

b. Masukan koin yang dimiliki a atau b , disini akan diberikan kondisi a

c. Lakukan atau input terus uang sampai mencapai angka 3000,


seperti gmbar dibawah ini.

Pembeli dapat membatalkan transaksinya jika akan di batalkan


tekan x dan mesin akan mengembalikan uang yang telah diinput.

I. ANALISIS DATA
Dibawah ini merupakan penjelasan dari intruksi-instruksi pascal yang
digunakan dalam pembuatan program vending machine. Berikut adalah
penjelasannya:
1. Write = Perintah write digunakan untuk menuliskan output, dengan posisi
cursor penunjuk aktif, terletak pada akhir output yang ditampilkan pada
baris yang sama. Write tidak menambahkan CR setelah menampilkan data
semua argument. Write menampilkan hasil tanpa ganti baris dan tampilan
berikutnya akan disambung dalam baris yang sama.
2. Writeln= Perintah writeln digunakan untuk menuliskan output, dengan posisi
cursor penunjuk aktif, terletak pada awal baris berikutnya. Writeln
menambahkan CR setelah menampilkan data semua argument. Writeln
digunakan untuk menampilkan tampilan perbaris, akan ganti baris untuk
tampilan berikutnya. Argumen perintah writeln boleh berupa ekspresi.

Contoh perintah penyajian writeln(Luas = , luasPSP); bisa dikerjakan


dengan perintah: writeln(Luas = , panjangPSP * lebarPSP);
3. Read=Perintah read digunakan untuk menerima input, dengan posisi cursor
penunjuk aktif, setelah diberi input pada baris berikutnya. Read tidak
membaca end of line marker. Pernyataan ini tidak akan membuang
kelebihan data. Kelebihan data akan diberikan pada read atau readln
berikutnya. Read tidak ganti baris, masih dalam baris yang sama
4. Readln=Perintah readln tidak terlalu jauh berbeda dengan perintah read.
Readln membaca end of line marker. Pernyataan ini menyebabkan kelebihan
data akan dibuang (tidak diberikan ke read atau readln berikutnya). Readln
juga digunakan untuk memasukkan data perbaris, artinya setelah tombol
Enter ditekan, maka akan ganti baris.
J. KESIMPULAN
Jadi dari penjelasan di atas dapat disimpulkan bahwa untukmembuat dan
merancang program vending machine (mesin jaja) harus di mulaidari membuat
deskripsi program tersebut kemudian membuat diagram state berdasarkan
deskripsi yang telah di buat. Selanjutnya membuat diagram transisi dan yang
terakhir rancangan proses vending machine yang dituangkan dalam program
pascal.

Anda mungkin juga menyukai