T U J U A N
Mengetahui Penerapan konsep ilmu komputer pada perilaku komputer yaitu
algoritma, arsitektur komputer, stuktur data maupun penerapan teori
bahasa dan automata
Compiler adalah merupakan konstruksi inti dari ilmu komputer
ARTI KATA TEKNIK KOMPILASI
Teknik : Metode atau Cara
Kompilasi : Proses mengabungkan serta menterjermahkan sesuatu
(source program) menjadi bentuk lain
Compile : To translate a program written in a high-level programming language into machine language.
Translator : Compiler & Interpreter
Translator : Adalah suatu program dimana mengambil input sebuah program
yang ditulis pada satu bahasa program (source language) ke bahasa lain
(The object on target language)
Jika source language adalah high level language, seperti cobol,
pascal, fortran maka object language adalah low-level language atau
mesin language. Translator seperti ini disebut COMPILER
Kenapa perlu Translator ?
-Dengan bahasa mesin adalah bahasa bentuk bahasa terendah komputer,
berhubungan langsung dengan bagian bagian komputer seperti bits,
register & sangat primitive
-Jawaban atas pertanyaan ini akan membingungkan bagi programmer yang membuat program dengan bahasa mesin.
-Bahasa mesin adalah tidak lebih dari urutan 0 dan 1
-Instruksi dalam bahasa mesin bisa saja dibentuk menjadi micro-code, semacam prosedur dalam bahasa mesin
-Bagaimana dengan orang tidak mengerti bahasa mesin
Ada Beberapa Translator
1. Assembler
Source code adalah bahasa assembly, Object code adalah bahasa mesin
*.asm –>assembler–>object code (*.exe/*.com)
2. Compiler
Source code adalah bahasa tingkat tinggi, object code adalah bahasa
mesin atau bahasa assembly. Source code dan data diproses berbeda
3. Interpreter
Interpreter tidak menghasilkan bentuk object code, tetapi hasil
translasinya hanya dalam bentuk internal, dimana program induk harus
selalu ada-berbeda dengan compiler
COMPILER vs INTERPRETER
Compiler bisa menangkap berbagai kesalahan dalam 1 program kode sumber
secara sekaligus. Kalau Interpreter cuma bisa menangkap beberapa
kesalahan pada 1 baris kode sumber pada suatu saat
Biasanya program yang dihasilkan compiler lebih cepat dari waktu pelaksanaan program dengan interpreter.
Kalau compiler menghasilkan kode antara (misal object code) dan harus
digabungkan / dilink menjadi bentuk yang dapat dijalankan mesin /
komputer (executable). Kalau Interpreter biasanya tidak menghasilkan
kode antara.
Kalau hendak menjalankan program hasil kompilasi bisa dilakukan tanpa kode sumber. Kalau interpreter butuh kode sumber
Kalau dengan kompiler, maka pembuatan kode yang bisa dijalankan mesin
dilakukan dalam 2 tahap terpisah, yaitu parsing / pembuatan kode objek
dan linking / penggabungan kode objek dengan library. Kalau interpreter
tidak ada proses terpisah.
Kalau compiler membutuhkan linker untuk menggabungkan kode objek
dengan berbagai macam library demi menghasilkan suatu kode yang bisa
dijalankan oleh mesin. Kalau interpreter tidak butuh linker.
Interpreter cocok untuk membuat / menguji coba modul / sub-routine /
program-program kecil. Kalau compiler agak repot karena untuk mengubah
suatu modul / kode objek kecil, maka harus dilakukan proses linking /
penggabungan kembali semua objek dengan library yang diperlukan.
Pada kompiler bisa dilakukan optimisasi / peningkatan kwalitas kode
yang bisa dijalankan. Ada yang dioptimasi supaya lebih cepat, ada yang
supaya lebih kecil, ada yang dioptimasi untuk sistem dengan banyak
processor. Kalau interpreter susah / tidak bisa dioptimasikan
Proses kompilasi dikelompokkan ke dalam dua kelompok besar :
1.analisa : program sumber dipecah-pecah dan dibentuk menjadi bentuk antara (inter-mediate representation)
2.sintesa : membangun program sasaran yang diinginkan dari bentuk
Penganalisa Leksikal
membaca program sumber, karakter demi karakter. Sederetan (satu atau
lebih) karakter dikelompokkan menjadi satu kesatuan mengacu kepada pola
kesatuan kelompok karakter (token) yang ditentukan dalam bahasa sumber.
Kelompok karakter yang membentuk sebuah token dinamakan lexeme untuk
token tersebut. Setiap token yang dihasilkan disimpan di dalam tabel
simbol. Sederetan karakter yang tidak mengikuti pola token akan
dilaporkan sebagai token tak dikenal (unidentified token)
Penganalisa Sintaks
memeriksa kesesuaian pola deretan token dengan aturan sintaks yang
ditentukan dalam bahasa sumber. Sederetan token yang tidak mengikuti
aturan sintaks akan dilaporkan sebagai kesalahan sintaks (sintax error).
Secara logika deretan token yang bersesuaian dengan sintaks tertentu
akan dinyatakan sebagai pohon parsing (parse tree)
Penganalisa Semantik
memeriksa token dan ekspresi dari batasan-batasan yang ditetapkan. Batasan-batasan tersebut misalnya :
a. panjang maksimum token identifier adalah 8 karakter,
b. panjang maksimum ekspresi tunggal adalah 80 karakter,
c. nilai bilangan bulat adalah -32768 s/d 32767,
d. operasi aritmatika harus melibatkan operan-operan yang bertipe sama
Pembangkit Kode Antara
membangkitkan kode antara (intermediate code) berdasar-kan pohon
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)
Pengoptimal kode
melakukan optimasi (penghematan space dan waktu komputasi), jika mungkin, terhadap kode antara
Pembangkit Kode Mesin
membangkitkan kode dalam bahasa target tertentu (misalnya bahasa mesin)
Pembuatan compiler
Bahasa mesin
-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
-Fasilitas yang dimiliki terbatas
Bahasa Tingkat Tinggi (high level language)
-Lebih mudah dipelajari
-Fasilitas yang dimiliki lebih baik (banyak)
-Memiliki ukuran yang relatif besar, misal membuat compiler pascal dengan menggunakan bahasa C
-Untuk mesin yang berbeda perlu dikembangkan tahapan-tahapan tambahan.
-Misal membuat compiler C pada Dos bedasarkan compiler C pada unix
Bahasa Tingkat Tinggi (Pemrograman )
-Bahasa yang lebih dikenal oleh manusia, maksudnya adalah statement yang
digunakan menggunakan bahasa yang dipakai oleh manusia (inggris),
-Bahasa pemrograman didefinisikan dengan menentukan bentuk programnya (sintak) dan arti programnya (semantik)
-Memberikan fasilitas yang lebih banyak, seperti struktur kontrol
program yang terstruktur, blok-blok serta prosedur dan fungsi-fungsi
-Progam mudah untuk di koreksi (debug)
-Tidak tergantung pada salah satu mesin
-Kontrol struktur seperti : kondisi (if .. Then.. Else ),
perulangan (For, while ), Struktur blok (begin.. End { .. } )
Tingkatan Bahasa Pemrograman
-4GL Language
-High level Language
-Assembly Language
-Machine Language
SKENARIO PERANCANGAN BAHASA PEMROGRAMAN
-Tentukan apa yang diinginkan.
-Tentukan feature yang mungkin
-Tentukan desain dan sesuaikan dengan featurenya
-Tentukan rincian, parsing, dan error checking.
-Tuliskan user manual dan help.
-Evaluasilah, jika salah mulai lagi dari langkah 3.
-Jika sudah benar, optimisasilah dan uji segala kemungkinan.
-Cobakan kepada pengguna, tunggu reaksinya.
-Perbaiki bug dan mulai versi baru.
Tools Bantu Compiler
-Free Compiler Construction Tools
http://www.thefreecountry.com/developercity/compiler.html
-TASSKAF. Bahasa TASSKAF ini merupakan subset dari Java. Dapat
disusun suatu program ke byte code yang dapat dijalankan di Java Virtual
Machine (JVM).
Pada site tersebut juga tersedia informasi materi kuliah dengan LEX, YACC
http://rw4.cs.uni-sb.de/~martin/COMP/TK/
-GENTLE. Gentle ini merupakan perangkat bantu (toolkit) modern untuk
menulis compiler dan mengimplemntasikannya pada bahasa tertentu.
Perangkat bantu ini mendukung semua proses translasi, dari definisi tree
sintaks abstrak, pater matching, smart traversal dan lain sebagainya.
Toolkit ini telah digunakan secara luas di riest dan industri .
http://www.first.gmd.de/gentle/
-ELI. Merupakan suatu lingkungan pemrograman yang memungkinkan
membuat suatu implementasi bahasa pemrograman secara lengkap dari suatu
sepsifikasi. Perangkat bantu ini menangani struktural analisis, analisis
nama, type, value dlsb dan akan menghasilkan kode C.
http://www.cs.colorado.edu/~eliuser/
creative by : https://3onoikom.wordpress.com/materi-kuliah/teknik-kompilasi-2/
refren lain...
Teknik Kompilasi
Merupakan Teknik dalam melakukan pembacaan
suatu program yang ditulis dalam bahasa sumber, kemudian diterjemahkan
ke dalam suatu bahasa lain yang disebut bahasa sasaran.
Dalam melakukan proses penerjemahan tersebut, sudah barang tentu
kompilator akan melaporkan adanya keanehan-keanehan atau kesalahan yang
mungkin ditemukannya. Proses penerjemahan yang dilakukan oleh kompilator
ini disebut proses kompilasi (compiling).
Bila dipandang sepintas lalu, maka akan timbul beranekaragam kompilator yang dapat dibuat,
- Bahasa Sumber seperti bahasa FORTRAN, PASCAL, C dan juga bahasa-bahasa
lainnya yang sifat dan pemakaiannya agak spesifik atau khusus, seperti
bahasa untuk program DBASE, SPSS dan lain sebagainya.
- Bahasa Sasaran dapat berupa bahasa sumber lain seperti C, FORTRAN dan
lain sebagainya atau Bahasa Mesin (Machine Language) yang digunakan oleh
suatu prosessor mikro atau sumber komputer besar maupun komputer super.
Sejarah perkembangan suatu kompilator sudah dimulai sejak lama, yaitu pada saat mulai ditemukannya komputer pada awal 1950-an.
Sejak waktu tersebut teknik dan cara pembentukan suatu kompilator telah
berkembang dengan sangat pesat dan pembentukkan suatu kompilator dapat
dilakukan makin mudah.
Demikian pula program bantu (tools) untuk membuat suatu kompilator sudah
dapat diperoleh sehingga pembentukan suatu kompilator dapat dilakukan
dengan cepat.
Kompilator pertama yang dibuat adalah kompilator untuk bahasa FORTRAN
yang pada saat itu dikembangkan dengan memakan sejumlah tenaga ahli yang
setara dengan pekerjaan yang dilakukan oleh 18 orang.
Dengan adanya program bantu dan tata cara pembentukan yang sistematis
dan tertata dengan baik serta pendefinisian struktur bahasa yang cermat,
maka suatu kompilator untuk bahasa yang terstruktur seperti PASCAL atau
C dapat dikembangkan.
Proses kompilasi dari suatu kompilator pada dasarnya dapat dibagi ke
dalam 2 bagian utama yaitu bagian analisis dan bagian sintesis.
- Tahap analisis program yang ditulis dalam bahasa sumber dibagi dan
dipecah ke dalam beberapa bagian yang kemudian akan dipresentasikan ke
dalam suatu bentuk antara dari program sumber.
Operasi-operasi yang dilakukan oleh program sumber ditentukan dan
dicatat dalam suatu struktur pohon (tree) yang disebut dengan nama pohon
sintaks (sintax tree) Dalam hal ini setiap nodal pada tree tersebut
menyatakan suatu operasi, sedangkan anak dari nodal (titik) tersebut
memberikan argumen yang diperlukan
Secara umum proses dalam tahap analis terdiri dari 3 bagian utama, yaitu
a. Proses analisis leksikal
b. Proses analisis sintaktik
c. Proses analisis semantik
- Tahap sintesis yang berikutnya program sasaran dibentuk berdasarkan representasi antara yang dihasilkan pada tahap analisis.
Untuk tahap sintetis terdiri dari 2 bagian utama, yaitu
a. Proses yang menghasilkan kode (code generator)
b. Proses optimasi kode (code optimizer)
Sebelum Bahasa sasaran dapat dihasilkan, dalam melakukan ini tiap bagian
utama akan berhubungan dan berkomunikasi dengan suatu berkas tabel yang
disebut tabel simbol (symbol table) yaitu suatu tabel yang berisi semua
simbol yang digunakan dalam bahasa sumber.
Selain kompilator masih diperlukan beberapa program lainnya sebelum
dapat dibentuk bahasa sasaran yang dapat dijalankan. Seperti suatu
bahasa sumber dapat dituliskan dalam beberapa modul yang terpisah dan
disimpan dalam beberapa file yang terpisah.
Untuk menanggulangi hal ini, maka suatu program khusus yang disebut
dengan suatu praprosesor digunakan untuk mengumpulkan modul-modul yang
saling lepas ini ke dalam suatu program baru. Praposesor dapat pula
melengkapi singkatan-singkatan atau ungkapan-ungkapan maupun
kependekan-kependekan yang digunakan dalam bahasa sumber seperti
pendefinisian makro dan lain sebagainya.
http://www.globalkomputer.com/Bahasan/Teknik-Kompilasi.html