Secara garis besar proses kompilasi dikelompokan ke dalam dua proses, yaitu:
1. Analysis Part (Front-end)
Menganalisis source code dan memecahnya menjadi bagian-bagian dasarnya. Menghasilkan kode level menengah dari source code input yang ada.
Tahap analisa ini meliputi: lexical analyzer, syntax analyzer , semantic analyzer.
2. Synthesis Part (Back-end)
Tugasnya melakukan pembangkitan dan optimasi program objek. Tahap sintesa ini meliputi: intermediate code generator, code optimizer, code generator.
Penjelasan proses kompilasi diatas:
- Lexical analyzer (scanner)
Berfungsi memecah teks program sumber menjadi bagian-bagian kecil yang mempunyai satu arti yang disebut token, seperti : konstanta, nama variabel, keyword, operator. Setiap token yang dihasilkan disimpan dalam tabel simbol (symbol table).
Contoh :
pernyataan pemberian nilai (assignment) :
position := initial + rate * 60
Lexical analysis mengelompokkan pernyataan tersebut menjadi token-token sebagai berikut:
1. Token identifier position
2. Token simbol assignment :=
3. Token identifier initial
4. Token tanda plus +
5. Token identifier rate
6. Token tanda perkalian *
7. Token konstanta angka 60
Ketika identifier pada program sumber ditemukan lexical analyzer, identifier dimasukkan ke tabel simbol.
position := initial + rate * 60
diubah menjadi
id1 := id2 + id3 * 60
- Syntax analyzer (parser)
Berfungsi mengambil program sumber (sudah dalam bentuk barisan token) dan menentukan kedudukan masing-masing token berdasarkan aturan sintaksnya dan memeriksa kebenaran dan urutan kemunculan token.
Syntax analysis, memparsing atau membentuk pohon sintaks pernyataan, yaitu :
- Semantic analyzer
Berfungsi menentukan validitas semantiks/keberartian program sumber. Biasanya bagian ini digabung dengan Pembangkit kode antara (intermediate code generator).
Semantic analysis, memeriksa kebenaran arti program sumber, mengumpulkan informasi tipe bagi tahap berikutnya. Tahap ini menggunakan pohon sintaks tahap syntax analysis untuk identifikasi operator dan operand suatu ekspresi dan kalimat. Komponen penting analisis semantik adalah pemeriksaan tipe, memeriksa operator yang harus mempunyai operand yang diijinkan oleh spesifikasi bahasa sumber.
Karena misal adanya pernyataan deklarasi di awal :
var position, initial, rate : real
Maka konstanta 60 dikonversi menjadi real dengan fungsi inttoreal(60) menjadi konstanta bilangan real.
- Intermediate Code Generator
Intermediate code adalah representasi perantara antara bentuk bahasa tingkat tinggi dengan bahasa mesin. Karena pada level berikutnya masih akan dilakukan optimasi, maka perlu dibuat representasi yang memudahkan optimasi, yang bukan merupakan bahasa mesin.
temp1 := inttoreal(60)
temp2 := id3 * temp1
temp3 := id2 + temp2
id1 := temp3
- Code optimizer
Code Optimization, melakukan proses identifikasi dan membuang operasi-operasi yang tidak perlu dari intermediate code generation untuk penyederhanaan sehingga nantinya kode mesin hasil menjadi lebih cepat. Kode-kode tersebut dioptimasi menjadi :
Temp1 := id3 * 60.0
Id1 := id1 + temp1
- Code Generator
Tahap akhir kompilator adalah pembangkitan kode target/objek dan biasanya kode mesin atau assembly yang dapat direlokasi. Pembangkitan kode sangat bergantung pada mesin yang dipakai, misal :
MOVF id3, R2
MULF #60.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
- Symbol table manager
Berfungsi mengelola tabel simbol selama proses kompilasi. Tabel simbol adalah struktur data yang memuat record untuk tiap identifier dengan atribut-atribut identifier itu.
- Error handler
Bagian dari compiler untuk menangani dan melaporkan kesalahan yang ditemukan selama proses kompilasi.
reff:
– Slide Binus Maya Teknik Kompilasi pertemuan 1
– http://semutuyet.blogspot.com/2012/11/makalah-tehnik-kompilasi.html