Anda di halaman 1dari 10

Teknik Kompilasi

13 / 1 - 10

INTERMEDIATE CODE GENERATION


Detail dari target language diketahui dari back end. Walaupun source program dapat diterjemahkan langsung ke dalam target language. Keuntungan penggunaan dari machineindependent intermediate form adalah : 1. Fasilitas Retargeting yaitu suatu kompiler pada mesin yang berbeda dapat dibuat dengan menempelkan back end pada mesin baru dengan front end yang sudah ada lebih. 2. Machine-independent code optimizer dapat diterapkan dalam intermediate representation.

Teknik Kompilasi

13 / 2 - 10

Posisi dari intermediate code generator dalam kompiler adalah :


Parser Static checker
intermediate code Intermediate

code generator

Code Generator

INTERMEDIATE LANGUAGES
Representasi intermediate terdapat 3 macam yaitu : - Syntax Tree - Postfix Notation - Three-Address Code

SYNTAX TREE
Menggambarkan struktur hirarki dari source program. DAG (Directed acyclic graph) memberi informasi yang sama tetapi lebih ringkas karena sub-ekspresi yang sama dapat diketahui.

Teknik Kompilasi

13 / 3 - 10

Misalnya untuk statemen assignment : a := b * -c + b * -c Maka syntax tree dan DAG-nya adalah sebagai berikut :
assign a + a assign +

*
b uminus b c

*
uminus c b

*
uminus c

Syntax Tree untuk assignment statement dihasilkan oleh syntax-directed definition sebagai berikut :
Production
S id := E E E1 + E2 E E1 * E2 E -E1 E (E1) E id

Semantic Rule
S.nptr :=mknode(assign, mkleaf(id,id.place), E.nptr) E.nptr := mknode (+, E1.nptr, E2.nptr) E.nptr := mknode (*, E1.nptr, E2.nptr) E.nptr := mknode (uminus, E1.nptr) E.nptr := E1.nptr E.nptr := mkleaf (id, id.place)

Teknik Kompilasi

13 / 4 - 10

Dua representasi dari syntax tersebut adalah sebagai berikut :


0 1 2 3 4 5 6 7 8 9 10 11 Id Id Uminus * Id Id Uminus * + Id Assign ... b c 1 0 b c 5 4 3 a 9
assign id a

tree

2
*

+ *
b id uminus c id c b

6 7 8

id uminus id

POSTFIX NOTATION
Representasi linear dari syntax tree yaitu list dari nodes dari tree dimana suatu node muncul segera setelah children-nya. Postfix notationnya adalah a b c uminus * b c uminus * + assign

Teknik Kompilasi

13 / 5 - 10

THREE-ADDRESS CODE
Merupakan sekuens dari statement dengan bentuk : x := y op z dimana : x, y, z = nama, constant atau compiler generated temporaries. op = sembarang operator seperti fixed point atau floating-point operator aritmetika atau logical operator untuk data boolean. Dalam hal ini built-in arithmetic expression tidak diperbolehkan karena hanya ada satu operator pada sisi kanan dari suatu statement. Source Language Expression, seperti: x+y*z dapat diterjemahkan kedalam sekuens : t1 := y * z t2 := x + t1

Teknik Kompilasi

13 / 6 - 10

dimana : t1 dan t2 = compiler-generated temporary names. Penguraian arithmetic expression yang kompleks dan nested flow-of-control statement, membuat three-address code menarik dalam target code generation dan optimization. Penggunaan nama untuk nilai intermediate yang dihasilkan oleh suatu program memudahkan pengaturan kembali three-address code, tidak seperti postfix notation. Perhatikan assignment terdahulu : a := b * -c + b * -c statement

Teknik Kompilasi

13 / 7 - 10

Syntax tree dan DAG Representation dari statement diatas jika dinyatakan dengan three-address code adalah sebagai berikut :
Code untuk Syntax Tree t1 := -c t2 := b * t1 t3 := -c t4 := b * t3 t5 := t2 + t4 a := t5 Code untuk Dag t1 := -c t2 := b * t1 t5 := t2 + t2 a := t5

IMPLEMENTASI THREE-ADDRESS STATEMENT


Diimplementasikan sebagai record yang mana field-fieldnya berupa operator dan operand. Terdapat 3 jenis representasi yaitu : quadruple, triple dan indirect triple.

Teknik Kompilasi

13 / 8 - 10

QUADRATUPLE
Struktur record dengan 4 field yaitu : OP, arg1, arg2 dan result Field Op berisi internal code untuk operator. Misalnya statement : x:=y op z Direpresentasikan dengan menempatkan y dalam arg1, z dalam arg2, dan x dalam result Statement dengan unary operator seperti x:=-y atau x:=y tidak menggunakan arg2.

Teknik Kompilasi

13 / 9 - 10

Contoh statement : a := b * -c + b * -c Maka :


op (0) (1) (2) (3) (4) (5) uminus * uminus * + := Arg1 c b c b t2 t5 arg2 t1 t3 t4 result t1 t2 t3 t4 t5 a

TRIPLE
Untuk menghindari pemasukan yang temporary name di dalam symbol table, kita bisa merefer ke temporary value dari posisi statement yang menghitungnya. Struktur record dengan direpresentasi 3 field yaitu : OP, arg1, arg2 Field arg1 dan arg2 untuk argument OP bisa berupa pointer ke symbol table atau pointer ke triple structure.

Teknik Kompilasi

13 / 10 - 10

Contoh statement : a := b * -c + b * -c Maka :


(0) (1) (2) (3) (4) (5) OP uminus * uminus * + assign arg1 c b c b (1) a arg2 (0) (2) (3) (4)

INDIRECT TRIPLE
Merupakan pengembangan dari triple, dengan menambahkan tabel index Contoh :
(0) (1) (2) (3) (4) (5) Index 0 1 2 3 4 5 (0) (1) (2) (3) (4) (5) OP uminus * uminus * + assign arg1 c b c b (1) a arg2 (0) (2) (3) (4)

Anda mungkin juga menyukai