Tugas Teknik Kompilasi
NAMA : FREDERICHO L. NAHAK BABIRA
NIM : 15 11 03 58
1) Notasi prefix, jika operator
ditempatkan sebelum dua operand
NIM : 15 11 03 58
Definisi mengenai Prefix, infix,
dan postfix
Prefix, infix, dan postfix adalah suatu
cara penulisan ungkapan-ungkapan yang rumit, misalnya pemakaian tanda kurung
dalam operasi matematika.
Prefix
adalah metode penulisan dengan meletakkan operator di depan operand dan tanpa
menuliskan tanda kurung.
Contoh pemakaian prefix adalah +AB, – +ABC, * + AB – CD.
Infix
adalah cara penulisan ungkapan dengan meletakkan operator di antara dua operand
dalam hal ini pemakaian tanda kurung sangat menentukan hasil operasi.
Contoh pemakaian infix adalah A+B,
A+B-C, (A+B)*(C-D).
Postfix
adalah metode penulisan dengan menuliskan operator setelah operand dan tanpa
menuliskan tanda kurung.
Salah satu contoh proses pengubahan
infix menjadi postfix dari karakter:
( A + B ) / (( C – D ) * E ^ F)
Notasi
Infix dan PostfixSuatu perhitungan aritmatika biasanya
berhubungan dengan operand dan operator. Operand merupakan suatu karakter atau
elemen yang nilainya dioperasikan dengan bantuan suatu operator untuik
menghasilkan suatu solusi.Misalkan jika diberikan suatu ekspresi
aritmatika 2 * 3, maka elemen ‘dua’ dan elemen ‘tiga’ merupakan operand dari
ekspresi tersebut dan elemen ‘*’ merupakan operator perkalian atas dua operand
yang menghasilkan suatu solusi. Suatu ekspresi aritmatika dapat dibedakan dalam
tiga bentuk notasi perhitungan yaitu :
2) Notasi infix, jika operator
ditempatkan diantara dua operand
3) Notasi postfix, jika operator
ditempatkan setelah dua operand
Dalam penggunaannya, dalam kehidupan sehari-hari
notasi infix merupakan notasi aritmatika yang paling banyak digunakan untuk
mengekspresikan suatu perhitungan artimatik dibanding dengan dua notasi yang
lain, akan tetapi notasi Postfix merupakan notasi yang digunakan oleh mesin
kompilasi pada komputer dengan maksud untuk mempermudah proses pengkodean,
sehingga mesin kompilasi membutuhkan stack untuk proses translasi ekspresi
tersebut.
Stack
Stack merupakan bagian dari struktur
data yang dikategorikan ke dalam bentuk linear data, dimana operasi pemasukan
maupun pengeluaran data selalu dilakukan pada salah satu sisinya[1]. Dalam
dunia komputer, penggunaan stack (tumpukan) merupakan suatu hal yang umum
digunakan seperti untuk penentuan alamat memory, penempatan ruang data dan
aplikasi lain. Sebagai bagian dari struktur data, aplikasi stack juga digunakan
untuk berbagai macam keperluan seperti pengujian kalimat palindrome, penguji
tanda kurung (matching parentheses), dan juga berfungsi sebagai konversi dari
notasi infix menjadi notasi postfix.
Pada perhitungan aritmatika, notasi
infix adalah notasi yang menempatkan operator ditengah dua operand sedangkan
notasi Postfix adalah notasi yang menempatkan operator setelah dua operand.
Penggunaan notasi infix merupakan hal yang lumrah digunakan dalam perhitungan
aritmatika dibandingkan dengan penggunaan notasi Postfix, akan tetapi bagi
mesin kompilasi notasi Postfix merupakan notasi yang digunakan untuk melakukan
suatu perhitungan.
Tulisan ini dibuat untuk memberikan
gambaran secara jelas proses simulasi konversi atas dua notasi aritmatika
tersebut, berdasarkan studi literatur dari beberapa buku dan dituangkan dengan
bantuan bahasa pemrograman Pascal. Adapun proses konversi ini ditujukan untuk
menjelaskan bagaimana mesin kompilasi dapat merubah notasi infix yang biasa
digunakan oleh berbagai kalangan menjadi notasi Postfix yang dimengerti oleh
mesin kompilasi sehingga suatu proses perhitungan aritmatika dapat dilaksanakan
oleh komputer. Alasan pemilihan bahasa pemrograman Pascal digunakan karena
fleksibilitas bahasa tersebut dalam menerangkan implementasi dan aplikasi dari
struktur data dalam bentuk pemrograman
Sintaks
notasi Postfix :
<operan><operan><operator>
Misalkan ekspresi :
(a + b)*(c + d)
kalau kita nyatakan dalam postfix :
ab + cd + *
Kita dapat mengubah instruksi kontrol
program yang ada ke dalam notasi Postfix. Misal :
IF<exp>THEN<stmt1>ELSE<stmt2>
diubah ke dalam Postfix :
<exp> <label1> BZ
<stmt1> <label2> BR
<stmt2>
label1
label2
Keterangan :
BZ
= branch if zero (zero = salah) {bercabang/meloncat jika kondisi yang
dites salah}
BR
= branch
{bercabang/meloncat tanpa ada kondisi yang dites}
Arti dari notasi Postfix di atas adalah
sebagai berikut.
“Jika kondisi ekspresi salah, maka
instruksi akan meloncat ke Label1dan menjalankan statement2. Bila kondisi
ekspresi benar, maka statement1 akan dijalankan lalu meloncat ke Label2. Label1
dan Label1 dan Label2 sendiri menunjukan posisi tujuan loncatan, untuk Label1
posisinya tepat sebelum statement2, dan Label2 setelah statement2”
Dalam implementasi ke kode antara, label
bisa berupa nomor baris instruksi. Untuk lebih jelasnya bisa dilihat contoh
berikut.
IF a > b
THEN
c := d
ELSE
c := e
Bila diubah ke salam Postfix
11.
a
12.
b
13.
>
14.
22 {menunjuk label1}
15.
BZ
16.
c
17.
d
18.
:=
19.
20.
25 {menunjuk label2}
21.
BR
22.
c
23.
e
24.
:=
25.
Notasi Postfix di atas bisa dipahami
sebagai berikut.
Bila ekspresi (a > b) salah, maka
loncat ke instruksi no.22
Bila ekspresi (a > b) benar, tidak terjadi
loncatan, instruksi berlanjut ke 16 sampai 18, lalu loncat ke 25.
Konversi
notasi infix ke postfix
Berdasarkan teori yang diterangkan
tersebut di atas, proses konversi infix menjadi notasi Postfix dalam
implementasinya membutuhkan stack pada proses konversinya, adapun proses
tersebut memiliki 4 (empat) aturan yang digunakan, yaitu :
Jika ditemukan simbol kurung buka “(“
Operasi push pada stack akan digunakan
untuk menyimpan simbol tersebut ke dalam stack.
Jika ditemukan simbol kurung buka “)”
Operasi pop digunakan untuk mengeluarkan
operator-operator yang berada di dalam stack.
Jika terdapat simbol operator
Jika dalam suatu untai notasi infix
ditemukan simbol operator maka operasi yang dilakukan pada stack terbagi atas :
Jika TOP(S) dari stack tersebut kosong
atau berisi simbol “(“ maka operasi push akan digunakan untuk memasukan
operator tersebut pada posisi di TOP(S)
Jika operator yang berada dipuncak stack
merupakan elemen yang memiliki tingkat yang sama atau lebih tinggi maka operasi
pop digunakan untuk mengeluarkan operator tersebut diikuti operasi push untuk
menyimpan operator hasil scanning untai.
Jika operator yang berada di puncak stack memiliki
tingkat yang lebih rendah dari operator yang discan, maka operator baru akan
langsung dimasukan ke dalam stack dengan operasi push.
1 Defenisi
Triples Notation , Indirect Triples dan Quaduples Notation
Ø Triples Notation
Memiliki format
<operator><operand><operand>
contoh,
instruksi :
A:=D*C+B/E
Bila
dibuat Kode Antara tripel:
1. *,D,C
2. /,B,E
3. +,(1),(2)
4. :=,A,(3)
Kekurangan dari notasi tripel
adalah sulit pada saat melakukan optimasi, maka dikembangkan Indirect Triples
yang memiliki dua list (senarai), yaitu list instruksi dan list eksekusi. List
instruksi berisi notasi tripel, sedangkan list eksekusi mengatur urutan
eksekusinya. Misalnya terdapat urutan instruksi :
A := B+C*D/E
F := C*D
List
Instruksi : List Eksekusi
1. *,C,D
1. 1
2. /, (1), E
2. 2
3. +, B, (2)
3. 3
4. :=, A, (3)
4. 4
5. :=, F, (1)
5. 1
6. 5
Ø Inderec Triples
Inderec triples yang memiliki 2 list
yaitu list isntruksi dan list eksikusi.list instruksi berisi notasi tripel,
sedangkan list eksikusi mengatur urutan eksikusinya misalnya terdapat urutan
instruksi pada gambar berikut:
Ø Quaduples Notation
Format instruksi Quadruples
<operator><operan><operan><hasil>
hasil adalah temporary yang bisa
ditempatkan pada memory atau register
contoh instruksi:
A:=D*C+B/E
Bila dibuat dalam Kode Antara :
1.
*,D,C,T1
2.
/,B,E,T2
3.
+,T1,T2,A
Komentar
Posting Komentar