Apa itu Kompiler Kode dan Apa fungsinya?

SEBUAH penyusun adalah program yang diterjemahkan bisa dibaca manusia Kode sumber ke dalam kode mesin yang dapat dieksekusi komputer. Agar berhasil, kode yang dapat dibaca manusia harus mematuhi sintaksis aturan bahasa pemrograman mana pun yang ditulis. Kompiler hanya sebuah program dan tidak dapat memperbaiki kode Anda untuk Anda. Jika Anda membuat kesalahan, Anda harus memperbaiki sintaksnya atau itu tidak akan dikompilasi.

Apa yang Terjadi Ketika Anda Menyusun Kode?

Kompleksitas kompiler tergantung pada sintaks bahasa dan seberapa banyak abstraksi bahasa pemrograman itu menyediakan. Kompiler C jauh lebih sederhana daripada kompiler untuk C ++ atau C #.

Analisis Leksikal

Ketika mengkompilasi, kompiler pertama kali membaca aliran karakter dari file kode sumber dan menghasilkan aliran token leksikal. Misalnya, kode C ++:

int C = (A * B) +10;

mungkin dianalisis sebagai token ini:

  • ketik "int"
  • variabel "C"
  • sama dengan
  • braket kiri
  • variabel "A"
  • waktu
  • variabel "B"
  • braket kanan
  • plus
  • literal "10"

Analisis Sintaksis

instagram viewer

Output leksikal pergi ke bagian analisa sintaksis dari kompiler, yang menggunakan aturan tata bahasa untuk memutuskan apakah input tersebut valid atau tidak. Kecuali kalau variabel A dan B sebelumnya dinyatakan dan dalam ruang lingkup, kompiler mungkin mengatakan:

  • 'A': pengidentifikasi yang tidak diumumkan.

Jika mereka diumumkan tetapi tidak diinisialisasi. kompiler mengeluarkan peringatan:

  • variabel lokal 'A' digunakan tanpa diinisialisasi.

Anda tidak boleh mengabaikan peringatan kompiler. Mereka dapat memecahkan kode Anda dengan cara yang aneh dan tidak terduga. Selalu perbaiki peringatan kompiler.

Satu Pas atau Dua?

Beberapa bahasa pemrograman ditulis sehingga kompiler dapat membaca kode sumber hanya sekali dan menghasilkan kode mesin. Pascal adalah salah satu bahasa tersebut. Banyak kompiler membutuhkan setidaknya dua lintasan. Terkadang, itu karena deklarasi maju dari fungsi atau kelas.

Dalam C ++, sebuah kelas dapat dideklarasikan tetapi tidak didefinisikan sampai nanti. Kompiler tidak dapat menentukan berapa banyak memori yang dibutuhkan kelas hingga ia mengkompilasi tubuh kelas. Itu harus membaca ulang kode sumber sebelum menghasilkan kode mesin yang benar.

Membuat Kode Mesin

Dengan asumsi bahwa kompiler berhasil menyelesaikan analisis leksikal dan sintaksis, tahap terakhir adalah menghasilkan kode mesin. Ini adalah proses yang rumit, terutama dengan CPU modern.

Kecepatan yang dikompilasi dieksekusi kode harus secepat mungkin dan dapat sangat bervariasi sesuai dengan kualitas kode yang dihasilkan dan berapa banyak optimasi yang diminta.

Sebagian besar kompiler memungkinkan Anda menentukan jumlah optimasi — biasanya dikenal untuk kompilasi debugging cepat dan optimisasi penuh untuk kode yang dirilis.

Pembuatan Kode Itu Menantang

Penulis kompiler menghadapi tantangan saat menulis generator kode. Banyak prosesor mempercepat pemrosesan dengan menggunakan

  • Instruksi pipelining
  • Intern cache.

Jika semua instruksi dalam kode lingkaran dapat diadakan di CPU cache, maka loop itu berjalan jauh lebih cepat daripada ketika CPU harus mengambil instruksi dari RAM utama. Cache CPU adalah blok memori yang dibangun ke dalam chip CPU yang diakses lebih cepat daripada data dalam RAM utama.

Tembolok dan Antrian

Sebagian besar CPU memiliki antrian pra-pengambilan di mana CPU membaca instruksi ke dalam cache sebelum menjalankannya. Jika cabang bersyarat terjadi, CPU harus memuat ulang antrian. Kode harus dibuat untuk meminimalkan ini.

Banyak CPU memiliki bagian terpisah untuk:

  • Hitung bilangan bulat (bilangan bulat)
  • Aritmatika titik mengambang (angka pecahan)

Operasi ini sering dapat berjalan secara paralel untuk meningkatkan kecepatan.

Compiler biasanya menghasilkan kode mesin ke file objek yang kemudian ditautkan bersama oleh program tautan.

instagram story viewer