Kompilator
Kompilatorataukompiler(Inggris:compiler) adalah sebuahprogram komputeryang berguna untuk menafsirkan program komputer yang ditulis dalam bahasa pemrograman tertentu (bahasaasal) menjadi program yang ditulis dalam bahasa pemrograman lain (bahasasasaran).
Terlepas dari pengertiannya yang demikian relatif luas, istilahkompilatorbiasa digunakan untuk program komputer yang menafsirkan program yang ditulis dalambahasa pemrograman tingkat tinggi(semacambahasa Pascal,C++,BASIC,FORTRAN,Visual Basic,Visual C#,Java,xBase,atauCOBOL) menjadibahasa mesin,biasanya dengan bahasaAssemblysebagai perantara.
Kompilator melakukan proses kompilasi dengan cara menganalisiskode sumbersecara keseluruhan, sehingga waktu yang dibutuhkan untuk melakukan kompilasi lebih lama, tetapi hasilnya lebih cepat dalam proses eksekusi daripada program yang dibuat dengan menggunakan teknik penafsiran denganinterpreter(penafsir).
4 jenis compiler yang biasa digunakan, diantaranya adalah:cross compiler, bootstrap compiler, source-to-source / transcompiler, dan decompiler.[1]
Arsitektur kompilator
[sunting|sunting sumber]Arsitekturkompilatormodern biasanya bukan lagi merupakan program tunggal namun merupakan rangkaian komunikasi antara program dengan tugas spesifik masing-masing. Program-program tersebut beserta tugasnya secara umum terdiri dari:
- Compiler(kompilator) itu sendiri, yang menerima kode sumber dan menghasilkan bahasa tingkat rendah (assembly)
- Assembler(perakit), yang menerima keluaran kompilator dan menghasilkan berkas objek dalam bahasa mesin
- Linker(penaut), yang menerima berkas objek keluaranassembleruntuk kemudian digabungkan dengan pustaka-pustaka yang diperlukan dan menghasilkan program yang dapat dieksekusi (executable)
Compileryang menggunakan arsitektur ini misalnyaGCC,ClangdanFreeBASIC.
Beberapakompilatortidak menggunakan arsitektur di atas secara gamblang, dikarenakan komunikasi antara program jauh lebih lambat dibandingkan jika komunikasi dilakukan secara internal di dalam satu program. Sehinggakompilator-kompilatortersebut mengintegrasikanassemblerdanlinkerdi dalamkompilator.Namun, biasanya arsitektur yang digunakan pun tidak kaku dan mengizinkan penggunaanassemblermaupunlinkereksternal (berguna jikaassemblerdanlinkerinternal bermasalah atau memiliki galat). Kompilator yang menggunakan arsitektur ini salah satunya adalahFree Pascal.
ProfesorNiklaus Wirthdalam bukunyaCompiler Construction[2]menyatakan bahwa penggunaanassemblersebagai bahasa perantara sering kali tidak memberikan keuntungan yang signifikan, sehingga dia menyarankan agar kompilator langsung menghasilkan bahasa mesin. Kompilator dengan arsitektur seperti ini dapat berjalan dengan sangat cepat, seperti yang ditunjukkan pada kompilator orisinilPascal,Modula-2danOberonyang dibuat oleh sang profesor.
Tahap-tahap dalam kompilasi
[sunting|sunting sumber]Suatukompilatorharus menganalisis kode asal terlebih dahulu untuk memahami seluruh kode tersebut. Hasil dari analisis itu berbentuk representasi dari kode asal, yang nanti akan ditafsirkan olehkompilatorke dalam bahasa sasaran. Oleh karena itu,kompilatorterdiri dari beberapa tahap. Setiap tahap memiliki tugas masing-masing dalam proses kompilasi.[3]
Analisis leksikal
[sunting|sunting sumber]Analisis leksikal adalah tahap di manakompilatormenganalisis setiap karakter (seperti huruf, tanda kurung, dsb.) dalam kode asal dan menghasilkan deretan simbol yang masing-masing dinamakantoken.[3]Biasanya simbol-simbol tadi disimpan dalam bentuklarik.[4]
Analisis sintaksis
[sunting|sunting sumber]Analisis sintaksis atauparsingadalah tahap di manakompilatormenganalisistoken-tokenyang dihasilkan dalam proses analisis leksikal dan mengelompokkan mereka menjadi suatupohon uraiberdasarkan struktur bahasa asal.[3]
Analisis semantik
[sunting|sunting sumber]Analisis semantik adalah tahap atau proses yang menggunakan pohon uraian hasil dari analisis sintaksis tadi untuk memastikan konsistensi semantik dari program, dan juga mengoptimalkan struktur dari program. Proses ini juga mengumpulkan dan menganalisis informasi mengenaitipe datadarivariabel-variabelyang ada di dalam program. Informasi tentang tipe data ini disimpan dalamtabel simbolatau langsung di dalam pohon uraiparsing,yang nanti akan dimanfaatkan dalam penghasilan kode sasaran (target code).[5]
Menghasilkan kode sasaran
[sunting|sunting sumber]Pada tahap ini, kompilator menggunakan semua informasi mengenai kode asal yang telah dikumpulkan dalam tahap-tahap sebelumnya, untuk menghasilkan kode sasaran[5].Kode sasaran dapat beruparepresentasi perantara,yang nanti dapat diproses oleh komponen lain (seperti assembler, LLVM, Java, dsb.), atau bisa jadi langsung berupa kode mesin. Dalam proses ini, kompilator juga melakukan pengoptimalan kode sasaran agar kinerja program menjadi lebih baik.[2]
Kompilatorsingle passdan kompilatormulti-pass
[sunting|sunting sumber]Metode yang digunakan kompilator dalam menggunakan tahap-tahapnya terbagi menjadi dua. Kompilator dapat memproses kode asal secara keseluruhan dalam suatu tahap lalu mengopor hasil dari proses tersebut ke tahap berikutnya, di mana tahap berikutnya kembali memproses kode asal secara keseluruhan, inilah yang dinamakan kompilatormulti-pass,yaitu kompilator tersebut memproses kode asal dalam dua kali jalan atau lebih.
Sedangkan, kompilatorsingle passmemproses hanya sebagian dari kode asal dalam suatu tahap lalu mengoper hasil dari proses tersebut kepada tahap berikutnya, jika semua tahap sudah dilalui, maka kompilator lanjut kepada bagian berikutnya dari kode asal. Dengan begini, kompilatorsingle passmemproses kode asal hanya dalam satu kali jalan.[3]
Sering ditafsirkan bahwa kompilatorsingle-passlebih cepat daripada kompilatormulti-pass.Tafsiran ini tidaklah benar.[3]Selama tahap-tahap dalam kedua jenis kompilator itu sama, dan kode asal yang diproses juga sama, maka kedua jenis kompilator tersebut tetap saja mengerjakan jumlah pekerjaan yang sama. Sehingga kecepatan dari keduanya juga sama.
Lihat pula
[sunting|sunting sumber]Referensi
[sunting|sunting sumber]- ^Nurchaliza, Rachmatia (2024-01-26)."Memahami Fungsi Program Compiler dan Ragam Jenisnya".D3 Rekayasa Perangkat Lunak Aplikasi.Diakses tanggal2024-02-26.
- ^abCompiler Construction,(updateJuni 2011)
- ^abcdeBornat, Richard (1979)."Understanding and Writing Compilers".doi:10.1007/978-1-349-16178-2.
- ^"Scanning · Crafting Interpreters".web.archive.org.2023-06-18.Diakses tanggal2023-07-15.
- ^abAho, Alfred V.; Sethi, Ravi; Ullman, Jeffrey D. (2002).Compilers: principles, techniques, and tools.Addison-Wesley series in computer science (edisi ke-Reprinted, with corr., [36. Druck]). Reading, Mass.: Addison-Wesley.ISBN978-0-201-10088-4.