Kompilator: Perbedaan antara revisi
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 29438643; atribusi sumber disertakan. |
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi |
||
| Baris 1: | Baris 1: | ||
Dalam [[ilmu komputer]], '''kompilator''' atau '''pengompilasi''' () secara umum adalah [[program komputer]] yang menerjemahkan kode program dalam suatu [[bahasa pemrograman]] (bahasa ''sumber'') ke dalam kode program dalam bahasa lainnya yang setara (bahasa ''target'' atau ''objek''). Istilah ini terrutama merujuk pada penerjemahan kode program yang ditulis dalam [[bahasa pemrograman tingkat tinggi]] ke [[bahasa mesin]] yang bisa dipahami [[komputer]]. | Dalam [[ilmu komputer]], '''kompilator''' atau '''pengompilasi'''<ref>[https://pasti.kemdikbud.go.id/istilah_resultdet1.php?id=107534&fasing=compiler&pilih=3&ran=0&page=1 Entri "compiler" dalam Padanan Istilah Kemdikbud]</ref> () secara umum adalah [[program komputer]] yang menerjemahkan kode program dalam suatu [[bahasa pemrograman]] (bahasa ''sumber'') ke dalam kode program dalam bahasa lainnya yang setara (bahasa ''target'' atau ''objek'').<ref>Richard Bornat. [http://www.cs.mdx.ac.uk/staffpages/r_bornat/books/compiling.pdf Understanding and Writing Compilers: A do-it-yourself guide]. ''CS@MDX''.</ref> Istilah ini terrutama merujuk pada penerjemahan kode program yang ditulis dalam [[bahasa pemrograman tingkat tinggi]] ke [[bahasa mesin]] yang bisa dipahami [[komputer]].<ref>Michael L. Scott. [https://archive.org/details/programminglangu0000scot_z7c1 Programming Language Pragmatics]. Morgan Kaufmann. 2006. ISBN 978-0-12-633951-2.</ref> | ||
Kompilator melakukan proses kompilasi dengan cara menganalisis [[kode sumber]] secara 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 dengan [[penerjemah (komputasi)|''interpreter'']] (penafsir). | Kompilator melakukan proses kompilasi dengan cara menganalisis [[kode sumber]] secara 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 dengan [[penerjemah (komputasi)|''interpreter'']] (penafsir). | ||
4 jenis compiler yang biasa digunakan, diantaranya adalah : ''cross compiler, bootstrap compiler, source-to-source / transcompiler, dan decompiler.'' | 4 jenis compiler yang biasa digunakan, diantaranya adalah : ''cross compiler, bootstrap compiler, source-to-source / transcompiler, dan decompiler.'' <ref>Rachmatia Nurchaliza. [https://dif.telkomuniversity.ac.id/fungsi-program-compiler-dan-jenis-jenisnya-yang-wajib-dipahami-programmer/ Memahami Fungsi Program Compiler dan Ragam Jenisnya]. ''D3 Rekayasa Perangkat Lunak Aplikasi''. 2024-01-26.</ref> | ||
== Arsitektur kompilator == | == Arsitektur kompilator == | ||
| Baris 14: | Baris 14: | ||
Beberapa ''kompilator'' tidak menggunakan arsitektur di atas secara gamblang, dikarenakan komunikasi antara program jauh lebih lambat dibandingkan jika komunikasi dilakukan secara internal di dalam satu program. Sehingga ''kompilator-kompilator'' tersebut mengintegrasikan ''assembler'' dan ''linker'' di dalam ''kompilator''. Namun, biasanya arsitektur yang digunakan pun tidak kaku dan mengizinkan penggunaan ''assembler'' maupun ''linker'' eksternal (berguna jika ''assembler'' dan ''linker'' internal bermasalah atau memiliki galat). Kompilator yang menggunakan arsitektur ini salah satunya adalah [[Free Pascal]]. | Beberapa ''kompilator'' tidak menggunakan arsitektur di atas secara gamblang, dikarenakan komunikasi antara program jauh lebih lambat dibandingkan jika komunikasi dilakukan secara internal di dalam satu program. Sehingga ''kompilator-kompilator'' tersebut mengintegrasikan ''assembler'' dan ''linker'' di dalam ''kompilator''. Namun, biasanya arsitektur yang digunakan pun tidak kaku dan mengizinkan penggunaan ''assembler'' maupun ''linker'' eksternal (berguna jika ''assembler'' dan ''linker'' internal bermasalah atau memiliki galat). Kompilator yang menggunakan arsitektur ini salah satunya adalah [[Free Pascal]]. | ||
Profesor [[Niklaus Wirth]] dalam bukunya ''Compiler Construction'' | Profesor [[Niklaus Wirth]] dalam bukunya ''Compiler Construction'' <ref>[https://web.archive.org/web/20110805035946/http://www.inf.ethz.ch/personal/wirth/books/CompilerConstruction/CBE.pdf Compiler Construction], (''update'' Juni 2011)</ref> menyatakan bahwa penggunaan ''assembler'' sebagai 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 orisinal [[Pascal]], [[Modula-2]] dan [[Oberon]] yang dibuat oleh sang profesor. | ||
== Tahap-tahap dalam kompilasi == | == Tahap-tahap dalam kompilasi == | ||
Suatu ''kompilator'' harus menganalisis kode asal terlebih dahulu untuk memahami seluruh kode tersebut. Hasil dari analisis itu berbentuk representasi dari kode asal, yang nanti akan ditafsirkan oleh ''kompilator'' ke dalam bahasa sasaran. Oleh karena itu, ''kompilator'' terdiri dari beberapa tahap. Setiap tahap memiliki tugas masing-masing dalam proses kompilasi. | Suatu ''kompilator'' harus menganalisis kode asal terlebih dahulu untuk memahami seluruh kode tersebut. Hasil dari analisis itu berbentuk representasi dari kode asal, yang nanti akan ditafsirkan oleh ''kompilator'' ke dalam bahasa sasaran. Oleh karena itu, ''kompilator'' terdiri dari beberapa tahap. Setiap tahap memiliki tugas masing-masing dalam proses kompilasi.<ref>Richard Bornat. [http://dx.doi.org/10.1007/978-1-349-16178-2 Understanding and Writing Compilers]. 1979. doi:10.1007/978-1-349-16178-2.</ref> | ||
=== Analisis leksikal === | === Analisis leksikal === | ||
Analisis leksikal adalah tahap di mana ''kompilator'' menganalisis setiap karakter (seperti huruf, tanda kurung, dsb.) dalam kode asal dan menghasilkan deretan simbol yang masing-masing dinamakan ''token.<ref>Richard Bornat. [http://dx.doi.org/10.1007/978-1-349-16178-2 Understanding and Writing Compilers]. 1979. doi:10.1007/978-1-349-16178-2.</ref>'' Biasanya simbol-simbol tadi disimpan dalam bentuk [[larik]].<ref>[https://web.archive.org/web/20230618023650/https://craftinginterpreters.com/scanning.html Scanning · Crafting Interpreters]. ''web.archive.org''. 2023-06-18.</ref> | |||
Analisis leksikal adalah tahap di mana ''kompilator'' menganalisis setiap karakter (seperti huruf, tanda kurung, dsb.) dalam kode asal dan menghasilkan deretan simbol yang masing-masing dinamakan ''token.'' Biasanya simbol-simbol tadi disimpan dalam bentuk [[larik]]. | |||
=== Analisis sintaksis === | === Analisis sintaksis === | ||
Analisis sintaksis atau ''parsing'' adalah tahap di mana ''kompilator'' menganalisis ''token-token'' yang dihasilkan dalam proses analisis leksikal dan mengelompokkan mereka menjadi suatu [[pohon urai]] berdasarkan struktur bahasa asal.<ref>Richard Bornat. [http://dx.doi.org/10.1007/978-1-349-16178-2 Understanding and Writing Compilers]. 1979. doi:10.1007/978-1-349-16178-2.</ref> | |||
Analisis sintaksis atau ''parsing'' adalah tahap di mana ''kompilator'' menganalisis ''token-token'' yang dihasilkan dalam proses analisis leksikal dan mengelompokkan mereka menjadi suatu [[pohon urai]] berdasarkan struktur bahasa asal. | |||
=== Analisis semantik === | === Analisis semantik === | ||
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 mengenai [[tipe data]] dari [[Variabel (ilmu komputer)|variabel-variabel]] yang ada di dalam program. Informasi tentang tipe data ini disimpan dalam [[Symbol Table|tabel simbol]] atau langsung di dalam pohon urai ''parsing,'' yang nanti akan dimanfaatkan dalam penghasilan kode sasaran (''target code''). <ref>Alfred V. Aho. [https://archive.org/details/compilersprincip00ahoa Compilers: principles, techniques, and tools]. Addison-Wesley. 2002. ISBN 978-0-201-10088-4.</ref> | |||
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 mengenai [[tipe data]] dari [[Variabel (ilmu komputer)|variabel-variabel]] yang ada di dalam program. Informasi tentang tipe data ini disimpan dalam [[Symbol Table|tabel simbol]] atau langsung di dalam pohon urai ''parsing,'' yang nanti akan dimanfaatkan dalam penghasilan kode sasaran (''target code''). | |||
=== Menghasilkan kode sasaran === | === Menghasilkan kode sasaran === | ||
Pada tahap ini, kompilator menggunakan semua informasi mengenai kode asal yang telah dikumpulkan dalam tahap-tahap sebelumnya, untuk menghasilkan kode sasaran.<ref>Alfred V. Aho. [https://archive.org/details/compilersprincip00ahoa Compilers: principles, techniques, and tools]. Addison-Wesley. 2002. ISBN 978-0-201-10088-4.</ref> Kode sasaran dapat berupa [[Intermediate representation|representasi 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.<ref>[https://web.archive.org/web/20110805035946/http://www.inf.ethz.ch/personal/wirth/books/CompilerConstruction/CBE.pdf Compiler Construction], (''update'' Juni 2011)</ref> | |||
Pada tahap ini, kompilator menggunakan semua informasi mengenai kode asal yang telah dikumpulkan dalam tahap-tahap sebelumnya, untuk menghasilkan kode sasaran. Kode sasaran dapat berupa [[Intermediate representation|representasi 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. | |||
== Kompilator ''single pass'' dan kompilator ''multi-pass'' == | == Kompilator ''single pass'' dan kompilator ''multi-pass'' == | ||
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 kompilator ''multi-pass,'' yaitu kompilator tersebut memproses kode asal dalam dua kali jalan atau lebih. | 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 kompilator ''multi-pass,'' yaitu kompilator tersebut memproses kode asal dalam dua kali jalan atau lebih. | ||
Sedangkan, kompilator ''single pass'' memproses 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, kompilator ''single pass'' memproses kode asal hanya dalam satu kali jalan. | Sedangkan, kompilator ''single pass'' memproses 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, kompilator ''single pass'' memproses kode asal hanya dalam satu kali jalan.<ref>Richard Bornat. [http://dx.doi.org/10.1007/978-1-349-16178-2 Understanding and Writing Compilers]. 1979. doi:10.1007/978-1-349-16178-2.</ref> | ||
Sering ditafsirkan bahwa kompilator ''single-pass'' lebih cepat daripada kompilator ''multi-pass''. Tafsiran ini tidaklah benar. 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. | Sering ditafsirkan bahwa kompilator ''single-pass'' lebih cepat daripada kompilator ''multi-pass''. Tafsiran ini tidaklah benar.<ref>Richard Bornat. [http://dx.doi.org/10.1007/978-1-349-16178-2 Understanding and Writing Compilers]. 1979. doi:10.1007/978-1-349-16178-2.</ref> 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 == | == Lihat pula == | ||
| Baris 50: | Baris 43: | ||
== Referensi == | == Referensi == | ||
<references /> | |||
== Sumber dan atribusi == | == Sumber dan atribusi == | ||
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Kompilator&oldid=29438643 Wikipedia bahasa Indonesia], revisi 29438643 (2026-07-10T06:26:09Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku. | Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Kompilator&oldid=29438643 Wikipedia bahasa Indonesia], revisi 29438643 (2026-07-10T06:26:09Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku. | ||
<!-- WIKI_UNISSULA_PRESENTATION_V4 --> | |||
Revisi terkini sejak 23 Agustus 2026 18.10
Dalam ilmu komputer, kompilator atau pengompilasi[1] () secara umum adalah program komputer yang menerjemahkan kode program dalam suatu bahasa pemrograman (bahasa sumber) ke dalam kode program dalam bahasa lainnya yang setara (bahasa target atau objek).[2] Istilah ini terrutama merujuk pada penerjemahan kode program yang ditulis dalam bahasa pemrograman tingkat tinggi ke bahasa mesin yang bisa dipahami komputer.[3]
Kompilator melakukan proses kompilasi dengan cara menganalisis kode sumber secara 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 dengan interpreter (penafsir).
4 jenis compiler yang biasa digunakan, diantaranya adalah : cross compiler, bootstrap compiler, source-to-source / transcompiler, dan decompiler. [4]
Arsitektur kompilator
Arsitektur kompilator modern 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 keluaran assembler untuk kemudian digabungkan dengan pustaka-pustaka yang diperlukan dan menghasilkan program yang dapat dieksekusi (executable)
Compiler yang menggunakan arsitektur ini misalnya GCC, Clang dan FreeBASIC.
Beberapa kompilator tidak menggunakan arsitektur di atas secara gamblang, dikarenakan komunikasi antara program jauh lebih lambat dibandingkan jika komunikasi dilakukan secara internal di dalam satu program. Sehingga kompilator-kompilator tersebut mengintegrasikan assembler dan linker di dalam kompilator. Namun, biasanya arsitektur yang digunakan pun tidak kaku dan mengizinkan penggunaan assembler maupun linker eksternal (berguna jika assembler dan linker internal bermasalah atau memiliki galat). Kompilator yang menggunakan arsitektur ini salah satunya adalah Free Pascal.
Profesor Niklaus Wirth dalam bukunya Compiler Construction [5] menyatakan bahwa penggunaan assembler sebagai 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 orisinal Pascal, Modula-2 dan Oberon yang dibuat oleh sang profesor.
Tahap-tahap dalam kompilasi
Suatu kompilator harus menganalisis kode asal terlebih dahulu untuk memahami seluruh kode tersebut. Hasil dari analisis itu berbentuk representasi dari kode asal, yang nanti akan ditafsirkan oleh kompilator ke dalam bahasa sasaran. Oleh karena itu, kompilator terdiri dari beberapa tahap. Setiap tahap memiliki tugas masing-masing dalam proses kompilasi.[6]
Analisis leksikal
Analisis leksikal adalah tahap di mana kompilator menganalisis setiap karakter (seperti huruf, tanda kurung, dsb.) dalam kode asal dan menghasilkan deretan simbol yang masing-masing dinamakan token.[7] Biasanya simbol-simbol tadi disimpan dalam bentuk larik.[8]
Analisis sintaksis
Analisis sintaksis atau parsing adalah tahap di mana kompilator menganalisis token-token yang dihasilkan dalam proses analisis leksikal dan mengelompokkan mereka menjadi suatu pohon urai berdasarkan struktur bahasa asal.[9]
Analisis semantik
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 mengenai tipe data dari variabel-variabel yang ada di dalam program. Informasi tentang tipe data ini disimpan dalam tabel simbol atau langsung di dalam pohon urai parsing, yang nanti akan dimanfaatkan dalam penghasilan kode sasaran (target code). [10]
Menghasilkan kode sasaran
Pada tahap ini, kompilator menggunakan semua informasi mengenai kode asal yang telah dikumpulkan dalam tahap-tahap sebelumnya, untuk menghasilkan kode sasaran.[11] Kode sasaran dapat berupa representasi 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.[12]
Kompilator single pass dan kompilator multi-pass
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 kompilator multi-pass, yaitu kompilator tersebut memproses kode asal dalam dua kali jalan atau lebih.
Sedangkan, kompilator single pass memproses 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, kompilator single pass memproses kode asal hanya dalam satu kali jalan.[13]
Sering ditafsirkan bahwa kompilator single-pass lebih cepat daripada kompilator multi-pass. Tafsiran ini tidaklah benar.[14] 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
Referensi
- ↑ Entri "compiler" dalam Padanan Istilah Kemdikbud
- ↑ Richard Bornat. Understanding and Writing Compilers: A do-it-yourself guide. CS@MDX.
- ↑ Michael L. Scott. Programming Language Pragmatics. Morgan Kaufmann. 2006. ISBN 978-0-12-633951-2.
- ↑ Rachmatia Nurchaliza. Memahami Fungsi Program Compiler dan Ragam Jenisnya. D3 Rekayasa Perangkat Lunak Aplikasi. 2024-01-26.
- ↑ Compiler Construction, (update Juni 2011)
- ↑ Richard Bornat. Understanding and Writing Compilers. 1979. doi:10.1007/978-1-349-16178-2.
- ↑ Richard Bornat. Understanding and Writing Compilers. 1979. doi:10.1007/978-1-349-16178-2.
- ↑ Scanning · Crafting Interpreters. web.archive.org. 2023-06-18.
- ↑ Richard Bornat. Understanding and Writing Compilers. 1979. doi:10.1007/978-1-349-16178-2.
- ↑ Alfred V. Aho. Compilers: principles, techniques, and tools. Addison-Wesley. 2002. ISBN 978-0-201-10088-4.
- ↑ Alfred V. Aho. Compilers: principles, techniques, and tools. Addison-Wesley. 2002. ISBN 978-0-201-10088-4.
- ↑ Compiler Construction, (update Juni 2011)
- ↑ Richard Bornat. Understanding and Writing Compilers. 1979. doi:10.1007/978-1-349-16178-2.
- ↑ Richard Bornat. Understanding and Writing Compilers. 1979. doi:10.1007/978-1-349-16178-2.
Sumber dan atribusi
Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 29438643 (2026-07-10T06:26:09Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.