Teknik Kompilasi
Kompiler (compiler) adalah program yang menerjemahkan bahasa seperti Pascal, C, PL/I, FORTRAN atau COBOL ke dalam bahasa mesin. Disebut kompiler karena dahulu, sebelum dikenal kompiler seperti sekarang ini, ada program yang menggunakan pustaka-pustaka atau subroutine-subroutine untuk keperluan yang sangat khusus. Pustaka-pustaka dikumpulkan menjadi satu, yang diistilahkan dengan Compiled. Setelah penerjemahan otomatis menjadi kenyataan, program tersebut tetap dinamakan kompiler.
Bahasa mesin adalah bahasa asli yang digunakan oleh mesin komputer oleh karena nya bahasa mesin disebut denagan native code.
Bahasa mesin berupa deretan bit hingga membentuk numeric biner atau diringkas menjadi Heksadesimal.
Contoh: Mesin IBM/370
00011000000110101 disebut sebagai biner dan diringkas menjadi heksadesimal menjadi 1815.
Perintah tersebut berarti: komputer menyalin (copy) isi register 5 ke register 3. Perintah tersebut hanya dimengerti oleh mesin dan sulit dimengerti oleh manusia, dan yang dapat mengenali hanya jenis mesin tertentu, yaitu mesin keluarga IBM/370.
Bahasa Assembly adalah bahasa pemrograma pertama yang sudah mampu membuat string dan lebih mudah dimengerti oleh manusia. String tersebut sering disebut Mnemonic.
Contoh: LR 3,5 Copy isi general register 5 ke ke general register 3.
Bahasa-bahasa pemroraman seperti Pascal, C, PL/L, FORTRAN atau COBOL disebut dengan High Level Language.
Contoh: Bahasa Pascal
X:=Y + Z;
Satu kalimat perintah dalam bahasa tingkat tinggi diterjemahkan menjadi beberapa baris kalimat perintah dalam bahasa yang lebih rendah tingkatnya.
L 3, Y Load Y ke register 3
A 3,Z Add Z
ST 3,X Simpan hasilnya ke X
Tujuan bahasa tingkat tinggi adalah memudahkan pemakaiannya dalam membuat program dan kemampuannya dalam mengatasi kerumitan (kompleksitas). Beberapa kalimat bahasa Assembly dapat dinyatakan dengan satu perintah dalam bahasa tingkat tinggi. Kerumitan-kerumitan implementasinya secara hardware disembunyikan dari pemakain (information hiding) dan dikemas dalam perintah yang mudah dimengerti (Encapsulation) serta setiap jenis data dikelompokkan untuk menggambarkan jenis operasi yang dapat menggunakannya (Abstract Data Type).
Istilah Penting
- Source Language. Bahasa (tingkat tinggi) yang menjadi masukan bagi kompiler
- Source Code. Program dalam bahasa sumber yang akan dikompilasi
- Object Language. Bahasa yang digunakan untuk program hasil kompilasi
- Object Code. Program hasil keluaran dari kompiler.
- Object File. Hasil kompilasi biasanya disimpan dalam bentuk file di peranti penyimpanan. File ini berakhiran .OBJ.
- Target Machine. Komputer yang digunakan untuk menjalankan program hasil kompilasi.
- Cross Compiler. Kompiler yang digunakan untuk menghasilkan Object Code yang dijalankan pada jenis komputer yang berbeda. Contohnya, suatu kompiler hanya dapat dijalankan pada komputer VAX, tetapi object code hasil kompilasinya dapat dijalankan pada komputer IBM/PC.
Kompiler dan Interpreter
Program penerjemah dari bahasa Assembly ke dalam bahasa mesin disebut Assembler atau disebut juga Mnemonic. Sedangkan kompiler menerjemahkan bahasa tingkat tinggi ke dalam bahasa assembly.
Interpreter mempunyai pengertian yang mirip dengan kompiler. Inerpreter tidak menerjemahkan semua baris perintah dalam suatu program, tetapi hanya menganalisis dan kemudian langsung mengeksekusi setiap baris perintah tersebut.
Interpreter yang paling terkenal adalah BASIC. Suatu program dalam bahasa BASIC tidak dikompilasi, tetapi BASIC akan menganalisis program baris demi baris dan kemudian mengeksekusinya.
Contoh: 20 x=y+z
BASIC akan menganalisis baris tersebut menggunakan beberapa prosedur yang ada pada interpreter BASIC dan kemudian menjumlahkan nilai y dan z di memori dari hasilnya diletakkan pada x.
Keuntungan interpreter adalah user dapat cepat memperoleh tanggapan. Dengan menulis satu baris perintah, lalu menulis RUN, pemakai bisa langsung mengetahui hasilnya. Sedangkan kerugiannya adalah lambat. Misalnya pada program loop seperti berikut ini:
10 for i = 1 to 100
20 x(i)=y(i) + z(i)
30 next i
Interpreter BASIC akan memnganalisis baris 20 sebanyak 100 kali. Untuk hal-hal semacam ini kompiler akan menunjukkan eksekusi yang lebih cepat.
Berbeda dengan kompiler yang tidak menerjemahkan semua perintah program sumber menjadi object code, tetapi kompiler akan menyediakan subroutine khusus dan subroutine tsb hanya akan digunakan pada saat program hasil kompilasi dijalankan. Kumpulan subroutine tsb dinamakan run-time library.
Contoh: Program Pascal dengan perintah y:=sqrt(x) tidak akan diterjemahkan secara langsung, tetapi kompiler akan mengambil salah satu fungsi dalam run-time-library.
Tahap-tahap kompilasi:
- Analisis Leksikal
- Analisis Sintaktik/Semantik
- Intermediate Code Generation
- Optimization
- Object Code Generation