Jumat, 28 April 2017

UTS Teknik kompilasi

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)













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  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