TEKN TEKN IK KOM PILASI ILASI Tony Tony Darm Darma anto nto,ST / Smt Smt V – S1 – TI / STM STM IK WI D YA DH ARM A/ H al 1 1. PENDA ENDAHUL HULUAN UAN Arti K ata Teknik Teknik K ompilas mpilasi v v
Teknik adalah suatu Metode atau Cara Kompil Kompilasi asi adalah adalah suatu suatu Prose Prosess mengabu engabung ngkan kan serta serta menterj menterjem emahk ahkan an sesuat sesuatu u (sourc (sourcee program) menjadi bentuk lain.
Bahasa Bahasa Pemr Pemrog ogrraman Bahasa pemrograman berdasarkan tingkat ketergantungannya dengan mesin bisa meliputi jenis bahasa berikut ini. •
Bahasa Assembly Bahasa Bahasa Assembly Assembly merupak merupakan an bentuk bentuk simbolik simbolik dari bahasa bahasa mesin. mesin. Setiap Setiap kode operasi operasi memili memiliki ki kode kode simbol simbolik ik,, misal misalnya nya ADD ADD untuk untuk penjum penjumlah lahan an dan MUL untuk untuk perkal perkalian ian.. Sekumpulan Sekumpulan instruksi instruksi dalam bahasa bahasa assembly assembly dapat dibentuk dibentuk menjadi menjadi makroins makroinstruksi truksi.. Pada bahsa bahsa assem assembly bly tersedi tersediaa alat alat bantu bantu untuk untuk diagn diagnost ostik ik atau atau debug debug yang yang tidak tidak terdapa terdapatt pada pada bahasa mesin. Contoh : Turbo Assembler, Macro Assembler, DEBUG dan Turbo Debugger.
•
Bahasa Tingkat Tinggi (User Oriented) Diseb Disebut ut bahasa bahasa tingk tingkat at tinggi tinggi karena karena lebih lebih dekat dekat dengan dengan bahas bahas manu manusia sia.. Bahas Bahasaa ini memberikan fasilitas yang lebih banyak, kontrol program yang terstruktur, block dan prosedur. Contohnya Pascal, Basic dan lain-lain.
•
Bahasa Problem Oriented Bahasa ini memungkinkan penyelesaian untuk suatu masalah atau aplikasi yang spesifik. Contohnya : SQL (Stuctured Query Language) untuk aplikasi database, COGO untuk aplikasi teknik sipil. Bahasa Problem Oriented kadang dimasukkan sebagai bahasa tingkat tinggi.
K euntung untungan an bahas bahasa ting ti ngkat kat ting t ingg gi dibanding dibandingkan kan bahas bahasa ting ti ngkat kat re r endah ndah : Translator Suatu program dimana mengambil input sebuah program yang ditulis pada suatu bahasa program (source language ke bahasa lain (object or target language). Ada beberapa macam translator : 1. Assembler Source Source code adalah bahasa bahasa Assembly Assembly,, object object code adalah bahasa bahasa mesin. mesin. Contohny Contohnyaa : Turbo Assembler dan Macro Assembler.
2. Compiler Sourc Sourcee code code adal adalah ah bahas ahasaa tingk tingkat at ting tinggi gi,, obje object ct code adal adalah ah baha bahasa sa mesi mesin n atau atau bahas ahasaa assembly. Source code dan data diproses pada saat yang berbeda. Contoh Turbo Pascal.
TEKN TEKN IK KOM PILASI ILASI Tony Tony Darm Darma anto nto,ST / Smt Smt V – S1 – TI / STM STM IK WI D YA DH ARM A/ H al 2 nter preter preter 3. I nter Interp Interpre reter ter tidak tidak memb membang angki kitkan tkan objec objectt code, code, hasil hasil transl translasi asi hanya hanya dalam dalam bentuk bentuk intern internal. al. Contoh interpreter : Basic / GW-Basic, LISP, SmallTalk. Source code dan data diproses pada saat yang sama.
M odel del K ompilato mpilatorr Pen Pengemba gembang ngan an kompil kompilato atorr untuk untuk seb sebuah baha bahasa sa meru merupa paka kan n peke pekerj rjaa aan n yang yang kompl kompleks eks.. Kompl ompleeksi ksitas tas kom kompil pilator tor bisa bisa dik dikuran urangi gi bila ila peran rancang ang bahas ahasaa pemro emrog gram raman memp memperti ertimb mban angka gkan n berma bermacam cam-ma -macam cam faktor faktor peran perancan cangan gan.. Sebuah Sebuah kompil kompilator ator umumn umumnya ya memiliki dua tugas pokok sebagai berikut : •
Fungsi Analisis Fungsi Fungsi Analisis Analisis biasa biasa disebut disebut sebagai sebagai Front Front End. Tugasny Tugasnyaa melakuk melakukan an dekomposi dekomposisi si program sumber menjadi bagian-bagian bagian-bagian dasarnya. dasarnya.
•
Fungsi Sintesis Fungsi Sintesis biasa disebut sebagai Back End. Tugasnya melakukan pembangkitan dan optimasi program objek.
Program sumber merupakan rangkaian karakter. Berikut ini hal-hal yang dilakukan oleh setiap fase pada proses kompilasi terhadap program sumber tersebut : • Penganalisa Penganalisa Leksikal Membac Membacaa program sumber, sumber, karakter karakter demi demi karakter. karakter. Sedereta Sederetan n (satu atau lebih) lebih) karakter karakter dikelom dikelompokka pokkan n menjadi menjadi satu kesatuan kesatuan mengacu mengacu kepada kepada pola kesatuan kelompok karakter (token ) yang ditentukan dalam bahasa sumber . Kelompok karakter yang membentuk sebuah token dinama d inamakan kan lexeme untuk token tersebut. tersebut. Setiap token yang yang dihasilkan dihasilkan disimpan di tabell si mbol . Sederetan dalam tabe Sederetan karakter karakter yang yang tidak mengikuti engikuti pola token akan dila d ilaporka porkan n token n tak di kenal kenal (unidentified token ). sebagai toke ). a ngka )*. Contoh : Misalnya pola token untuk identifier I adalah : I = huruf (huruf )*. Lexeme angka ab2c dikenali sebagai token sementara lexeme 2abc atau abC tidak dikenal. dikenal.
TEKN TEKN IK KOM PILASI ILASI Tony Tony Darm Darma anto nto,ST / Smt Smt V – S1 – TI / STM STM IK WI D YA DH ARM A/ H al 3
•
Peng Penganalis analisa a Sintaks int aks der etan toke token n dengan Memeriksa Memeriksa kesesuaian pola der dengan aturan aturan sinta sintaks ks yang yang diten ditentuka tukan n dalam dalam bahasa sumber . Sederetan token yang tidak mengikuti aturan sintaks akan dilaporkan sebagai kes kesalahan si ntaks (sintax err or ). ). Secara Secara logika ogika dereta deretan n token token yang yang berse bersesua suaian ian dengan dengan tr ee ). sintaks tertentu akan dinyatakan sebagai pohon parsing ( parse tre ). Contoh : Misalnya sintaks untuk ekspresi if-then E adalah : E → i f L then , L → IOA, I = huruf (huruf a ngka )*, )*, O → < | = | > | <= | >=, A → 0 | 1 | ... | 9. Ekspresi if a2 < 9 then adalah angka ekspresi sesuai sintaks; sementara ekspresi if a2 < 9 do atau if then a2B < 9 tidak sesuai. Perhatikan bahwa contoh ekspresi terakhir juga mengandung token yang tidak dikenal.
•
Penga Penganali nalis sa Semanti Semantik k Memeri Memeriksa ksa token token dan ekspres ekspresii dari batas batasan an-ba -batas tasan an yang yang diteta ditetapka pkan. n. Batas Batasanan-bat batas asan an tersebut misalnya : a. panjang panjang maksimum maksimum token identifier adalah 8 karakter, b. panjang maksimum maksimum ekspresi tunggal adalah 80 karakter, karakter, c. nilai bilangan bilangan bulat bulat adalah adalah -32768 -32768 s/d 32767, 32767, d. operasi aritmatika aritmatika harus harus melibatkan melibatkan operan-operan operan-operan yang yang bertipe sama. sama.
•
Pemba Pembang ngkit kit K ode Antara Antar a Membangkitkan kode antara ( intermediate code ) berdasarkan pohon parsing. Pohon parse penerj emah berda berdassarkan selanjutnya diterjemahkan oleh suatu penerjemah yang dinamakan penerj sintak (syntax-directed translator ). Hasil penerjemahan ini biasanya merupakan perintah tiga alamat (thre thr ee-addre -addr ess code ) yang yang merup merupak akan an repres represen entasi tasi program program untuk untuk suatu 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 )
•
Peng Pengo optimal K ode komputasi i ), Melakukan optimasi (penghematan space dan waktu komputas ), jika jika mungkin mungkin,, terhadap terhadap kode antara.
•
Pembang Pembangki kitt K ode Membangkitkan kode dalam bahasa target tertentu (misalnya bahasa mesin).
Berikut Berikut ini akan diberikan diberikan sebuah contoh skema penerjemahan penerjemahan suatu ekspresi ekspresi dalam bahasa bahasa sumber, yaitu : position := initial + rate * 60 .
TEKN TEKN IK KOM PILASI ILASI Tony Tony Darm Darma anto nto,ST / Smt Smt V – S1 – TI / STM STM IK WI D YA DH ARM A/ H al 4 Lexical analyzer harus memproses blank dan komentar, meskipun keduanya bukan merupakan bagian executable. executable.
Scanner memberikan token ke syntax analyzer. Token-token bisa berbentuk pasangan item. Item pertam pertamaa memb memberi erikan kan alama alamatt dari dari token token pada pada tabel tabel simbol simbol.. Item kedua kedua adala adalah h repres represen entasi tasi internal dari token.
Syntax analyzer lebih kompleks dari scanner. Fungsinya adalah untuk menentukan bagaimana dekom dekomposi posisin sinya ya.. Dalam Dalam anali analisi siss sinta sintaksi ksiss dilaku dilakuka kan n pengel pengelomp ompoka okan n token token ke dala dalam m kelas kelas sintaksis, seperti expression, statement dan procedure.
Syntax Analyze Analyzerr / Pars Parser memberikan suatu pohon sintaks, yang mana daunnya adalah token dan setiap elemen non-daun merepresentasikan suatu kelas sintaksis. Sekumpulan Sekumpulan aturan yang disebut disebut grammar dipergunakan untuk mendefinisikan/ mendefinisikan/ menentukan menentukan struktur dari program sumber.
Semantic analyzer adalah adalah untuk menentuka menentukan n ‘maksud’ ‘maksud’ dari suatu program program sumber. sumber. Analisi Analisiss Semanti Semantik k merup merupaka akan n proses proses yang yang unik unik pada pada suatu suatu kompil kompilator ator.. Seman Semantic tic analy analyze zerr harus harus menentukan aksi apa yang ditentukan oleh operator aritmatika. Rutin ini akan memeriksa apakah operan telah dideklarasikan. Analisis semantik bisa menghasilkan intermediate form dari program sumber. Misalkan ekspresi (A+B)*(C+D), kode antaranya bisa berupa kuadrupel berikut : (+, A, B, T1) (+, C, D, T2) (*, T1, T2, T3) Suatu ekspresi infix bisa saja diubah ke bentuk antara dalam notasi Polish, maka ekspresi infix (A+B)*(C+D) akan dikonversi ke notasi Polish-sufix : AB+CD+*
ener ator . Pada tahap ini bentuk antara dari Keluaran dari semantic analyzer diberikan ke code gene program sumber, biasanya ditranslasikan ke dalam bahasa assembly atau bahasa mesin. Contoh translasi translasi dari kuadrapel kuadrapel sebelumny sebelumnyaa bisa bisa menghasi menghasilkan lkan instruksi instruksi bahasa bahasa assembly assembly format1format1alamat berikut : LDA A ADD B STO T1 LDA C ADD D STO T2 LDA T1 MUL T2 STO T3 Kelua eluaran ran dari dari code code gener generat ator or dib diberika erikan n ke code code opti optimi mize zer. r. Pros Proses es ini ini bertuj ertujua uan n untuk untuk mengh menghasi asilka lkan n program program objek objek yang yang lebih lebih efisien efisien seperti seperti mengev mengevalu aluasi asi ekspre ekspresi si konsta konstan, n, pem pemakai akaian an prope propert rtii oper operat ator or terte tertent ntu u (aso (asosi siati atiff, komuta komutati tiss dan dan distr distrib ibuti utiff) dan detek deteksi si subekspresi. Contoh : LDA A ADD B STO T1 LDA C ADD D MUL T1 STO T2
TEKN TEKN IK KOM PILASI ILASI Tony Tony Darm Darma anto nto,ST / Smt Smt V – S1 – TI / STM STM IK WI D YA DH ARM A/ H al 5 Optim Optimasi asi global global lebih lebih lanju lanjutt bisa bisa dilaku dilakukan kan.. Optim Optimasi asi ini termas termasuk uk optima optimasas sasii machi machineneindepen independent. dent. Alokasi Alokasi register register secara secara optimal optimal merupak merupakan an salah satu contoh contoh optimasa optimasasi si yang machin machine-de e-dependen pendent. t. Suatu Suatu code optimizer optimizer yang yang baik baik bisa menghasilkan menghasilkan kode yang yang lebih lebih baik daripada pemrogram assembler yang yang berpengalaman. berpengalaman. Pada beberapa kompilator, fase-fase kompilasi bisa dikombinasika. Interaksi antara scanner dan parser terdapat dua kemungkinan sebagai berikut : Beberapa kompilator membuat pass sesedikit mungkin. Faktor yang mempengaruhi jumlah pass yang akan dilakukan tergantung pada : Mutu Kompilator Kompilator Mutu sebuah kompilator tergantung dari beberapa faktor sebagai berikut : •
Mutu Program Objek Mutu suatu program objek (hasil kompilasi) ditentukan oleh ukuran dan kecepatan eksekusi dari program objek.
•
Integrated Environment Environment Integrated environment merupakan fasilitas-fasilitas terintegrasi yang dimiliki oleh kompilator tersebut. Biasa disebut juga sebagai IDE (Integrated Development Environment). Misal Turbo Pasca bisa untuk kompilasi dan debug dalam satu lingkungan pemrograman.
Pembu Pembuatan atan K ompilator mpilator Bahasa M esin •
Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler dengan bahasa ini, karena manusia susah mempelajari bahasa mesin,
•
Sangat tergantung pada mesin,
•
Bahasa mesin kemungkinan digunakan pada saat pembuatan Assembler.
Assembly •
Hasil dari program mempunyai ukuran yang relatif kecil
•
Sulit dimengerti karena statement/ perintahnya singkat-singkat, butuh usaha yang besar untuk membuat compiler dengan bahasa ini
•
Fasilitas yang dimiliki terbatas
Bahas Bahasa T ingkat ingkat Ting Ti ngg gi (Hig (H igh h L evel vel L ang anguag uage) •
Lebih mudah dipelajari
•
Fasilitas yang dimiliki lebih baik (banyak)
•
Memiliki Memiliki ukuran yang yang relatif relatif besar, besar, misal misal membua membuatt compile compilerr pascal dengan mengguna menggunakan kan bahasa C
•
Untuk mesin yang berbeda perlu dikembangkan tahapan-tahapan tambahan. Misal membuat compiler C pada DOS berdasarkan compiler C pada Unix
BootStrap •
•
Untuk Untuk memb membang angun un sesua sesuatu tu yang ang besar besar,, diba dibangu ngun/ n/dib dibua uatt dulu dulu bagian intinya (Niklaus Wirth-saat membuat Pascal Compiler) P0 dibuat dengan Assembly, P1 dibuat dari P0, dan P2 dibuat dari P1, jadi compiler untuk bahasa P dapat dibuat tidak harus dengan menggunakan menggunakan assembly a ssembly secara keseluruhan. keseluruhan.
TEKN TEKN IK KOM PILASI ILASI Tony Tony Darm Darma anto nto,ST / Smt Smt V – S1 – TI / STM STM IK WI D YA DH ARM A/ H al 6 Conto Contoh h Source urce Prog Program ke dalam dalam K odeM de M esin: