Kode antara merupakan tahapan kedua setelah analisis sintaks dalam kompilasi yang menghasilkan kode mesin independen berupa notasi postfix atau triples untuk mempermudah proses optimalisasi dan pembangkitan kode target. Kode antara berfungsi sebagai antarmuka antara bagian front-end dan back-end kompiler.
3. z
Kode Antara ?
Merupakan tahapan kedua setelah hasil dari tahapan analisis yang
dibuat oleh kompilator pada saat mentranslasikan dari bahasa
tingkat tinggi.
Kode antara atau dalam bahasa inggrisnya intermediate code
merupakan pembangkit kode berdasarkan hasil parsing.
Pohon parse selanjutnya diterjemahkan oleh suatu penerjemah
yang dinamakan penerjemah berdasarkan sintak (syntax-directed
translator). Hasil penerjemahan ini biasanya merupakan perintah
tiga alamat (three-address code) yang merupakan representasi
program untuk suatu mesin abstrak. Perintah tiga alamat bisa
berbentuk quadruples (op, arg1, arg2, result), tripels (op, arg1,
arg2). Ekspresi dengan satu argumen dinyatakan dengan
menetapkan arg2 dengan – (strip, dash)
5. z
Fungsi Kode Antara
Memperkecil bagian-bagian dalam proses
kompilasi dari sejumlah bahasa ke sejumlah
mesin.
Hasil dari kode antara dapat digunakan lagi pada
mesin lainnya.
Membuat proses optimalisasi menjadih mudah
dan mudah dipahami dari pada bahasa mesin.
6. z
Jenis – Jenis Kode Antara
Triples, quadruples, indirect triples, abstract syntax trees
merupakan bentuk klasik yang biasa digunakan dalam optimasi
mesin independen dan pembangkitan kode mesin.
Static Single Assignment form (SSA) adalah bentuk terbaru dan
mengadakan optimasi yang lebih efektif.
Program Dependence Graph (PDG) berguna pada paralesasi
otomatis, penjadawalan instruksi, dan pipelining perangkat
lunak.
7. z
Notasi Kode Antara
Terdapat dua macam kode antara yaitu notasi postfix dan n-
tuple
Notasi postfix
<operand> <operand> <operator>
contohnya
( x + y ) * ( p + q )
maka hasil dari notasi postfixnya adalah
xy+ pq+ *
8. z
Notasi Postfix
Semua pada instruksi kontrol program yang ada akan diubah
menjadi notasi postfix, misalnya
IF <expr> THEN <stmt1> ELSE <stmt2>
Diubah ke postfix menjadi ;
<expr> <label1> BZ <stmt1> <label2> BR < stmt2>
BZ : Branch if zero (salah) BR: melompat tanpa harus ada
kondisi yang ditest
Contoh : IF a > b THEN c := d ELSE c := e
9. z
Notasi Triples
Notasi pada triple dengan format
<operator> <operand> <operand>
Contoh:
A := D * C + B / E Jika dibuat intermidiate code triple: 1. * , D, C 2. /, B, E
3. +, (1), (2) 4. :=, A, (3)
Pada contoh tersebut perlu diperhatikan presedensi (hirarki) dari operator,
operator perkalian dan pembagian mendapatkan prioritas lebih dahulu dari
oada penjumlahan dan pengurangan.
Kelemahan dari notasi triple adalah sulit pada saat melakukan optimasi, maka
dikembangkan Indirect triples yang memiliki dua list; list instruksi dan list
eksekusi. List Instruksi berisikan notasi triple, sedangkan list eksekusi
mengatur eksekusinya
10. z
Referensi
Bergmann, Seth D., "Compiler Design: Theory, Tools, and
Examples" (2016).
https://www.geeksforgeeks.org/intermediate-code-generation-in-
compiler-design/
https://www.tutorialspoint.com/compiler_design/compiler_design
_intermediate_code_generations.htm
https://en.wikipedia.org/wiki/Code_generation_%28compiler%29