1. Gambarkan Fase Kompilasi dengan Komputer lengkap
2. Analisis perbedaan antara fase analsis dengan sintesis
3. Tuliskan contoh fase :
a. Analisis
b. Sintesis
1. Gambarkan Fase Kompilasi dengan Komputer lengkap

2. Analisis perbedaan antara fase analsis dengan sintesis
- Proses kompilasi
dikelompokkan ke dalam dua kelompok besar :
1. analisa : program sumber dipecah-pecah dan dibentuk menjadi bentuk antara (intermediate
representation)
Secara umum proses dalam tahap analis terdiri dari 3 bagian utama, yaitu
1. Proses analisis leksikal
2. Proses analisis sintaktik
3. Proses analisis semantic
a. ANALISA LEKSIKAL
Analisa
Leksikal merupakan antarmuka antara kode program sumber dan analisa sintaktik
(parser). Scanner melakukan pemeriksaan karakter per karakter pada teks
masukan, memecah sumber program menjadi bagian-bagian disebut Token.
Dua aspek penting pembuatan Analisa Leksikal adalah :
-
Menentukan token-token bahasa.
-
Mengenali token-token bahasa dari program sumber.
Tugas – tugas analisa leksikal antara lain :
a.
Melakukan pembacaan kode sumber dengan merunut karakter demi karakter.
b.
Mengenali besaran leksik (identifier, keywords, dan konstanta).
c.
Mentransformasi menjadi sebuah token dan menentukan jenis tokennya.
d.
Mengirimkan token.
e.
Membuang atau mengabaikan white-space
dan komentar dalam program.
f.
Menangani kesalahan.
g. Menangani tabel simbol.
b.
ANALISA
SINTAKS
Proses sintaks analisa dilakukan terhadap descriptor dari
analisa leksikal untuk menentukan struktur sintaks dari input statement. Proses
tersebut dikenal dengan nama “Parsing”.
Output dari Parsing adalah representasi dari struktur sintaks suatu statement.
Representasinya digambarkan melalui sintaks tree.
Contoh statement a:=b+i , direpresentasikan ke dalam tree :
Sintaks
error seperti hilangnya
operator / operand bisa ditemui dalam sintaks analisis
c.
ANALISA
SEMANTIK
Analisa semantik
memanfaatkan pohon sintaks yang dihasilkan pada proses parsing (analisa
sintaks). Fungsi dari analisa semantik adalah untuk menentukan makna dari
serangkaian instruksi yang terdapat dalam program sumber. Untuk mengetahui
makna, maka rutin analisa semantik akan memeriksa :
• Apakah variabel yang ada telah didefinisikan sebelumnya,
• Apakah variabel – variabel tersebut tipenya sama,
• Apakah operan yang akan dioperasikan tersebut ada nilainya dan seterusnya.
Untuk
dapat menjalankan fungsi tersebut dengan baik, semantic analyzer seringkali menggunakan tabel simbol. Pemeriksaan bisa
dilakukan pada tabel identifier, tabel display dan tabel blok, misal pada field
link.
Pengecekan yang dilakukan
oleh analisis semantik adalah :
Memeriksa
keberlakuan nama – nama meliputi pemeriksaan :
a.
Duplikasi
Pengecekan
apakah sebuah nama terjadi pendefinisian lebih dari dua kali. Pengecekan
dilakukan pada bagian pengelola blok.
b.
Terdefinisi
Pengecekan
apakah sebuah nama yang dipakai pada tubuh program sudah terdefinisi atau
belum. Pengecekan dilakukan pada semua tempat kecuali blok.
Memeriksa tipe
Melakukan pemeriksaan
terhadap kesesuaian tipe dalam statement – statement yang ada. Misal : Bila ada
operasi antara dua operan, maka tipe operan pertama harus bisa dioperasikan
dengan operan kedua.
·
Sintesa : membangun program sasaran yang diinginkan dari bentuk antara
Untuk tahap sintetis terdiri dari 2 bagian utama, yaitu
1. Proses yang menghasilkan kode (code generator)
2. Proses optimasi kode (code optimizer)
Untuk tahap sintetis terdiri dari 2 bagian utama, yaitu
1. Proses yang menghasilkan kode (code generator)
2. Proses optimasi kode (code optimizer)
3.
Tuliskan contoh fase :
a.
Analisis
b.
Sintesis
A. Analisis Leksikal
(scanner)
Analisis Leksikal bertugas
mengindentifikasi semua pembangunan bahasa yang ada pada source code. Scanner
menerima masukan source code berupa serangkaian karakter kemudian
memilah-milahnya menjadi bagian-bagian kecil yang mempunyai satu arti yang
disebut token seperti : konstanta, nama variable, keyword, operator.
Besaran bangunan bahasa (leksikal) meliputi:
a.
Identifier
Identifier/pengenal
dapat berupa:
1.
Kata kunci/keyword seperti : if ,
else, while , do , for dll
Contoh kata
kunci = for (a=1;a<=10;a++) = for(awal;kondisi;counter) diteruskan dengan if. while(bil<=10) =
while(expression).
2.
Kata yang dideklarasi sendiri oleh si
pembuat program disebut dengan varible. Contoh char nama.
b.
Nilai
konstanta
Nilai
konstanta berupa: integer, real, boolean, character, string, dll.
Melalui contoh berikut ini, bedakan
antara nilai (atau isi) dengan variable yang digunakan untuk menyimpannya.
c.
Operator dan
Delimiter
1. Operator
aritmatika (+,-.*/)
2. Operator
logika (<,=,>,<=,>=,!=,<>)
3. Delimiter
berguna sebagai pemisah atau pembatas = (){};.,:
B. Analisis sintaks (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. Pada proses ini, hal yang perlu diperhatikan adalah:
1.
Kebutuhan waktu eksekusi
2.
Penanganan kesalahan
3.
Penanganan kode
Contoh
: Misalnya sintaks untuk ekspresi if-then E adalah : E ® if L
then, L ® IOA, I = huruf(huruf½angka)*, O ®
<½=½>½<=½>=, A ® 0½1½…½9. Ekspresi if a2 < 9
then adalah ekspresi sesuai sintaks; sementara ekspresi if a2 < 9
do atau if then a2B < 9 tidak sesuai. Perhatikan bahwa
contoh ekspresi terakhir juga mengandung token yang tidak dikenal.
C. Analisis Semantik
Memeriksa token dan ekspresi dari batasan-batasan yang ditetapkan.
Batasan-batasan tersebut misalnya:
1.
Panjang maksimum token identifier
adalah 8 karakter,
2.
Panjang maksimum ekspresi tunggal
adalah 80 karakter,
3.
Nilai bilangan bulat adalah -32768
s/d 32767,
4.
Operasi aritmatika harus melibatkan
operan operan bertipe sama.
Contoh Fase Sintesis
Intermediate
Code Generator : membangkitkan kode antara berdasarkan
pohon parsing. Pohon parse selanjutnya diterjemahkan oleh suatu penerjemah yang
dinamakan penerjemah berdasarkan sintaks. Hasil penerjemah ini biasanya
merupakan perintah 3 alamat yang merupakan representasi program untuk suatu
mesin abstrak. Perintah 3 alamat bisa berbentuk quadruples (op, arg1, arg2,
result), tripels (op, arg1, arg2). Ekspresi dengan 1 argumen dinyatakan dengan
menetapkan arg2 dengan – (strip, dash).
Code Optimizer : melakukan
optimasi (penghematan space dan waktu komputasi), jika mungkin , terhadap
intermediated code. Dilakukan juga pendetaksian suatu ekspresi yang sering
terjadi dan lain sebagainya.
Code Generator : membangkitkan
kode dalam bahasa target tertentu (misalnya bahasa mesin).
Tidak ada komentar:
Posting Komentar