Lompat ke isi

Kompilator: Perbedaan antara revisi

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
Konten dihapus Konten ditambahkan
https://kbbi.kemdikbud.go.id/entri/kompiler
Tag: Suntingan visualeditor-wikitext
DamenaKo (bicara | kontrib)
Mengelompokkan arsitektur kompilator dan menambahkan fase-fase kompilator
Baris 3: Baris 3:
Terlepas dari pengertiannya yang demikian relatif luas, istilah ''kompilator'' biasa digunakan untuk program komputer yang menerjemahkan program yang ditulis dalam [[bahasa pemrograman tingkat tinggi]] (semacam [[Pascal (bahasa pemrograman)|bahasa Pascal]], [[C plus plus|C++]], [[BASIC]], [[FORTRAN]], [[Visual Basic]], [[Visual-C-sharp|Visual C#]], [[Java]], [[xBase]], atau [[COBOL]]) menjadi bahasa mesin, biasanya dengan bahasa [[Assembly]] sebagai perantara.
Terlepas dari pengertiannya yang demikian relatif luas, istilah ''kompilator'' biasa digunakan untuk program komputer yang menerjemahkan program yang ditulis dalam [[bahasa pemrograman tingkat tinggi]] (semacam [[Pascal (bahasa pemrograman)|bahasa Pascal]], [[C plus plus|C++]], [[BASIC]], [[FORTRAN]], [[Visual Basic]], [[Visual-C-sharp|Visual C#]], [[Java]], [[xBase]], atau [[COBOL]]) menjadi bahasa mesin, biasanya dengan bahasa [[Assembly]] sebagai perantara.


''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 interpretasi dengan [[penerjemah (komputasi)|interpreter]]

== Arsitektur kompilator ==
Arsitektur ''kompilator'' modern biasanya bukan lagi merupakan program tunggal namun merupakan rangkaian komunikasi antar program dengan tugas spesifik masing-masing. Program-program tersebut beserta tugasnya secara umum terdiri dari:
Arsitektur ''kompilator'' modern biasanya bukan lagi merupakan program tunggal namun merupakan rangkaian komunikasi antar program dengan tugas spesifik masing-masing. Program-program tersebut beserta tugasnya secara umum terdiri dari:
* ''Kompilator'' itu sendiri, yang menerima kode sumber dan menghasilkan bahasa tingkat rendah (''assembly'')
* ''Kompilator'' itu sendiri, yang menerima kode sumber dan menghasilkan bahasa tingkat rendah (''assembly'')
Baris 13: Baris 16:
Profesor [[Niklaus Wirth]] dalam bukunya ''Compiler Construction'' <ref name="cbe">[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 orisinil [[Pascal]], [[Modula-2]] dan [[Oberon]] yang dibuat oleh sang profesor.
Profesor [[Niklaus Wirth]] dalam bukunya ''Compiler Construction'' <ref name="cbe">[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 orisinil [[Pascal]], [[Modula-2]] dan [[Oberon]] yang dibuat oleh sang profesor.


== Fase-fase dalam kompilasi ==
''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 interpretasi dengan [[penerjemah (komputasi)|interpreter]].
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 diterjemahkan oleh ''kompilator'' ke dalam bahasa target. Oleh karena itu, ''kompilator'' terdiri dari beberapa fase. Setiap fase memiliki tugas masing-masing dalam proses kompilasi.<ref name=":0">{{Cite journal|last=Bornat|first=Richard|date=1979|title=Understanding and Writing Compilers|url=http://dx.doi.org/10.1007/978-1-349-16178-2|doi=10.1007/978-1-349-16178-2}}</ref>

=== Analisis leksikal ===
{{Main|Analisis leksikal}}

Analisis leksikal adalah fase di mana ''kompilator'' menganalisa 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]].<ref name=":0" />

=== Analisis sintaks ===
{{Main|Parsing}}

Analisis sintaks atau ''parsing'' adalah fase di mana ''kompilator'' menganalisis ''token-token'' yang dihasilkan dalam proses analisis leksikal dan mengelompokkan mereka menjadi suatu [[pohon uraian]] berdasarkan struktur bahasa asal.<ref name=":0" />

=== Analisis semantik ===
{{Main|Analisis semantik}}
Analisis semantik adalah fase atau proses yang menggunakan pohon uraian yang dihasilkan dalam analisis sintaks tadi untuk memastikan konsistensi semantik 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 uraian ''parsing,'' yang nanti akan dimanfaatkan dalam penghasilan kode ''target''.<ref name=":1">{{Cite book|last=Aho|first=Alfred V.|last2=Sethi|first2=Ravi|last3=Ullman|first3=Jeffrey D.|date=2002|title=Compilers: principles, techniques, and tools|location=Reading, Mass.|publisher=Addison-Wesley|isbn=978-0-201-10088-4|edition=Reprinted, with corr., [36. Druck]|series=Addison-Wesley series in computer science}}</ref>

=== Penghasilan kode target ===
{{Main|Code generation}}

Pada fase ini, kompilator menggunakan semua informasi mengenai kode asal yang telah dikumpulkan dalam fase-fase sebelumnya, untuk menghasilkan kode target<ref name=":1" />. Kode target 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.<ref name="cbe" />


== Lihat pula ==
== Lihat pula ==

Revisi per 14 Juli 2023 02.00

Kompilator atau kompiler (Inggris: compiler) adalah sebuah program komputer yang berguna untuk menerjemahkan program komputer yang ditulis dalam bahasa pemrograman tertentu (bahasa asal) menjadi program yang ditulis dalam bahasa pemrograman lain (bahasa target).

Terlepas dari pengertiannya yang demikian relatif luas, istilah kompilator biasa digunakan untuk program komputer yang menerjemahkan program yang ditulis dalam bahasa pemrograman tingkat tinggi (semacam bahasa Pascal, C++, BASIC, FORTRAN, Visual Basic, Visual C#, Java, xBase, atau COBOL) menjadi bahasa mesin, biasanya dengan bahasa Assembly sebagai perantara.

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 interpretasi dengan interpreter

Arsitektur kompilator

Arsitektur kompilator modern biasanya bukan lagi merupakan program tunggal namun merupakan rangkaian komunikasi antar program dengan tugas spesifik masing-masing. Program-program tersebut beserta tugasnya secara umum terdiri dari:

  • Kompilator itu sendiri, yang menerima kode sumber dan menghasilkan bahasa tingkat rendah (assembly)
  • Assembler, yang menerima keluaran kompilator dan menghasilkan berkas objek dalam bahasa mesin
  • Linker, yang menerima berkas objek keluaran assembler untuk kemudian digabungkan dengan pustaka-pustaka yang diperlukan dan menghasilkan program yang dapat dieksekusi (executable)

Kompilator yang menggunakan arsitektur ini misalnya GCC, Clang dan FreeBASIC.

Beberapa kompilator tidak menggunakan arsitektur di atas secara gamblang, dikarenakan komunikasi antar 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 [1] 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 orisinil Pascal, Modula-2 dan Oberon yang dibuat oleh sang profesor.

Fase-fase 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 diterjemahkan oleh kompilator ke dalam bahasa target. Oleh karena itu, kompilator terdiri dari beberapa fase. Setiap fase memiliki tugas masing-masing dalam proses kompilasi.[2]

Analisis leksikal

Analisis leksikal adalah fase di mana kompilator menganalisa 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.[2]

Analisis sintaks

Analisis sintaks atau parsing adalah fase di mana kompilator menganalisis token-token yang dihasilkan dalam proses analisis leksikal dan mengelompokkan mereka menjadi suatu pohon uraian berdasarkan struktur bahasa asal.[2]

Analisis semantik

Analisis semantik adalah fase atau proses yang menggunakan pohon uraian yang dihasilkan dalam analisis sintaks tadi untuk memastikan konsistensi semantik 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 uraian parsing, yang nanti akan dimanfaatkan dalam penghasilan kode target.[3]

Penghasilan kode target

Pada fase ini, kompilator menggunakan semua informasi mengenai kode asal yang telah dikumpulkan dalam fase-fase sebelumnya, untuk menghasilkan kode target[3]. Kode target dapat berupa representasi perantara, yang nanti dapat diproses oleh komponen lain (seperti assembler, LLVM, Java, dsb.), atau bisa jadi langsung berupa kode mesin.[1]

Lihat pula

Referensi

  1. ^ a b Compiler Construction, (update Juni 2011)
  2. ^ a b c Bornat, Richard (1979). "Understanding and Writing Compilers". doi:10.1007/978-1-349-16178-2. 
  3. ^ a b Aho, 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. ISBN 978-0-201-10088-4.