Desain Penyusun - Tahapan Penyusun
Proses kompilasi merupakan rangkaian dari berbagai tahapan. Setiap fase mengambil masukan dari tahap sebelumnya, memiliki representasi program sumbernya sendiri, dan memasukkan keluarannya ke tahap berikutnya dari compiler. Mari kita pahami fase-fase kompiler.
Analisis Leksikal
Fase pertama pemindai berfungsi sebagai pemindai teks. Fase ini memindai kode sumber sebagai aliran karakter dan mengubahnya menjadi leksem yang bermakna. Penganalisis leksikal mewakili leksem-leksem ini dalam bentuk token sebagai:
<token-name, attribute-value>
Analisis Sintaks
Fase selanjutnya disebut analisis sintaks atau parsing. Dibutuhkan token yang dihasilkan oleh analisis leksikal sebagai masukan dan menghasilkan pohon parse (atau pohon sintaks). Dalam fase ini, pengaturan token diperiksa terhadap tata bahasa kode sumber, yaitu parser memeriksa apakah ekspresi yang dibuat oleh token sudah benar secara sintaksis.
Analisis Semantik
Analisis semantik memeriksa apakah pohon parse yang dibangun mengikuti aturan bahasa. Misalnya, penetapan nilai di antara tipe data yang kompatibel, dan menambahkan string ke integer. Juga, penganalisis semantik melacak pengidentifikasi, tipe dan ekspresi mereka; apakah pengenal dideklarasikan sebelum digunakan atau tidak, dll. Penganalisis semantik menghasilkan pohon sintaks beranotasi sebagai keluaran.
Pembuatan Kode Menengah
Setelah analisis semantik, kompilator menghasilkan kode perantara dari kode sumber untuk mesin target. Ini mewakili program untuk beberapa mesin abstrak. Itu ada di antara bahasa tingkat tinggi dan bahasa mesin. Kode perantara ini harus dibuat sedemikian rupa sehingga lebih mudah untuk diterjemahkan ke dalam kode mesin target.
Optimasi Kode
Tahap selanjutnya melakukan optimasi kode dari kode perantara. Optimasi dapat diasumsikan sebagai sesuatu yang menghilangkan baris kode yang tidak diperlukan, dan mengatur urutan pernyataan untuk mempercepat eksekusi program tanpa membuang sumber daya (CPU, memori).
Pembuatan Kode
Dalam fase ini, pembuat kode mengambil representasi yang dioptimalkan dari kode perantara dan memetakannya ke bahasa mesin target. Generator kode menerjemahkan kode perantara menjadi urutan (umumnya) kode mesin yang dapat ditempatkan kembali. Urutan instruksi kode mesin melakukan tugas seperti yang akan dilakukan kode perantara.
Tabel Simbol
Ini adalah struktur data yang dipertahankan di seluruh fase kompilator. Semua nama pengenal beserta tipenya disimpan di sini. Tabel simbol memudahkan penyusun untuk mencari catatan pengenal dengan cepat dan mengambilnya kembali. Tabel simbol juga digunakan untuk manajemen lingkup.