Kelas : X TKJ 1
Pengertian Compiler
Compiler adalah sebuah program khusus yang dipakai untuk melakukan konversi kode ke dalam bentuk
natural language processing supaya komputer dapat memahaminya. Proses konversi yang berlangsung
ini dikenal dengan istilah compilation.
Dalam proses tersebut, compiler bertugas untuk mengeksekusi kode dan mengubahnya menjadi sinyal
biner yang dibutuhkan dalam processor, terutama di unit logika aritmatika (ALU).
Terdapat dua jenis compiler yang umumnya dipakai oleh developer, yaitu:
- Source to source compiler atau transcompiler adalah compiler yang bertugas untuk menerjemahkan
sumber kode dengan satu bahasa dan mengubahnya menjadi kode bahasa lain.- Cross compiler
digunakan untuk membuat kode baru agar bisa digunakan pada platform lain.
Di atas sudah disebutkan bahwa compiler bertugas untuk menerjemahkan kode. Namun compiler juga
punya tugas lain seperti:
•Membagi program menjadi beberapa bagian terpisah dan mengaplikasikan struktur tata bahasa pada
setiap bagiannya.
•Menggunakan perantara untuk membangun program target dan membuat tabel simbol.
•Menerjemahkan sumber kode ke dalam objek kode dan menyesuaikannya dengan jenis mesin
yang dipakai.
Langkah-Langkah dalam Language Processing System
Pre-Processor
Di tahap ini, compiler menghapus semua kode berisi instruksi #include kemudian menambahkan inklusi
file. Setelah itu, #define juga digantikan dengan ekspansi makro. Hasil dari proses tersebut dinamakan
assembly language. Bahasa ini ada di antara HLL dan biner.
Assembly language adalah perantara yang dapat mengkombinasikan perintah mesin serta beberapa
data yang akan berguna di proses berikutnya.
Assembler
Semua platform hardware memiliki assembler yang berbeda. Fungsi dari assembler adalah mengubah
kode assembly language menjadi bahasa mesin. File yang dihasilkan oleh assembler disebut sebagai file
objek. File tersebut adalah hasil gabungan antara instruksi mesin dengan data yang diperlukan untuk
menyimpan perintah atau instruksi ke dalam memori.
Interpreter
Interpreter berguna untuk melakukan penerjemahan dari HLL menjadi bahasa mesin. Namun interpreter
berbeda dengan compiler. Interpreter memerlukan waktu lebih lama untuk menerjemahkan kode
karena prosesnya dilakukan pada satu waktu.
Relocatable machine code dapat dijalankan kapan pun sesuai kebutuhan. Proses ini menghasilkan
alamat di dalam program yang akan bekerja sama untuk menggerakkan program.
Linker atau loader berguna untuk menggabungkan semua file objek menjadi satu file yang bisa
dieksekusi. Peran linker sangat penting untuk menyatukan file yang dikompilasi oleh assembler. Linker
bertugas untuk menemukan modul, memanggilnya ke dalam program, dan menemukan lokasi untuk
menyimpan semua modul tersebut
Dalam compiler terdapat dua fase utama, yaitu fase analisis dan fase sintesis.
1. Fase Analisis
Fase analisis atau representasi, dibuat sebagai perantara dari sumber kode berikut:
1. Lexical analyzer untuk membagi program menjadi token-token.
2. Syntax analyzer berguna untuk mengenali kalimat di dalam program menggunakan syntax
bahasa.
3. Semantic analyzer berfungsi untuk memeriksa semantik statis pada masing-masing
konstruksi.
4. Intermediate code generator berguna untuk menghasilkan kode-kode abstrak.
2. Fase Sintesis
Ketika memasuki fase sintesis, target program yang selevel dibuat dari analisis perantara yang terbagi
kedalam dua fase.
1. Code optimizer yang berfungsi untuk mengoptimalkan kode abstrak yang dihasilkan dari
proses terakhir fase pertama.
2. Code generator menerjemahkan intermediate code generator menjadi instruksi mesin yang
lebih spesifik dan siap dieksekusi.
• Parser Generator
Ini menghasilkan penganalisis sintaks (parser) dari input yang didasarkan pada deskripsi gramatikal
bahasa pemrograman atau pada tata bahasa bebas konteks. Ini berguna karena fase analisis sintaks
sangat kompleks dan menghabiskan lebih banyak waktu manual dan kompilasi. Contoh: PIC, EQM
• Scanner Generator
Ini menghasilkan penganalisis leksikal dari input yang terdiri dari deskripsi ekspresi reguler berdasarkan
token bahasa. Ini menghasilkan otomat terbatas untuk mengenali ekspresi reguler. Contoh: Lex
Ini menghasilkan kode perantara dengan tiga format alamat dari input yang terdiri dari pohon parse.
Mesin ini memiliki rutinitas untuk melintasi pohon parse dan kemudian menghasilkan kode perantara.
Dalam hal ini, setiap simpul dari pohon parse dikaitkan dengan satu atau lebih terjemahan.
Ini menghasilkan bahasa mesin untuk mesin target. Setiap operasi bahasa perantara diterjemahkan
menggunakan kumpulan aturan dan kemudian diambil sebagai input oleh pembuat kode. Proses
pencocokan template digunakan. Pernyataan bahasa perantara diganti dengan pernyataan bahasa
mesin yang setara dengan menggunakan templat.
Ini digunakan dalam pengoptimalan kode. Analisis aliran data adalah bagian penting dari pengoptimalan
kode yang mengumpulkan informasi, yaitu nilai yang mengalir dari satu bagian program ke bagian lain.
Lihat – analisis aliran data di Compiler
It provides an integrated set of routines that aids in building compiler components or in the construction
of various phases of compiler.