Friday, November 9, 2018

Teknik Kompilasi - Perancangan Bahasa Pemrograman


Perancangan Bahasa Pemrograman

Sumber Perancangan Bahasa Pemrograman
                Sumber perancangan bahasa pemrograman yaitu :   
·         Bahasa alami (natural language)
Konstruksi yang diturunkan dari bahasa alami, karena bahasa alami dapat digunakan sebagai panduan untuk perancangan sintaks.
·         Ilmu Matematika
Banyak dipakai untuk aturan-aturan yang terdapat pada bahasa pemrograman, misalnya ekspresi matematika.
·         Bahasa pemrograman yang telah ada
Bisa menjadi sumber yang bagus untuk perancangan bahasa pemrograman, tetapi perlu ketelitian saat menggunakannya, karena bahasa tersebut mungkin mengandung masalah yang serius, contoh GO TO.

Tujuan Perancangan Bahasa Pemrograman
                Tujuan perancangan bahasa pemrograman adalah sebagai berikut.
·         Komunikasi dengan manusia
Karena sebuah program yang baik adalah suatu program yang mudah dimengerti dan dipahami.
·         Pencegahan dan deteksi kesalahan 
Bahasa pemrograman yang baik harus dapat mengidentifikasi error yang mungkin terjadi, mempermudah deteksi kesalahan dan menghilangkan kesalahan.
·         Usability(mudah dipelajari)
Berkaitan dengan aspek kenyamanan seorang pemrogram menggunakan bahasa, karena bahasa pemrograman yang baik harus dapat dipelajari dan mudah diingat karena berkaitan dengan kenyamanan programmer dalam menggunakan bahasa pemrograman.
·         Efektifitas pemrograman
Merupakan bagian dari rekayasa perangkat lunak yaitu bagaimana mancatat keputusan yang dibuat selama mengembangkan program.
·         Compilability (tidak terlalu kompleks)
Pengembangan sebuah kompilator merupakan pekerjaan yang tidak sederhana.
·         Efisiensi
Peningkatan yang signifikan dalam efisiensi bisa didapat dengan membuat bahasa lebih sederhana untuk menghasilkan kode yang efisien.
·         Machine independent (tidak bergantung pada satu mesin)
Sebuah program yang telah sukses dikompilasi dan dieksekusi pada suatu mesin, saat dipindahkan ke mesin lainnya akan berjalan dengan input dan output yang tepat sama.
·         Kesederhanaan (simplicity)
Kesederhanaan dapat dicapai melalui : pembatasan-pembatasan tujuan dan perhatian pada keterbacaan.
·         Uniformity
Yaitu mengerjakan hal yang sama dengan cara yang sama dan menjelaskan bagaimana menghilangkan kasus khusus.
·         Orthogonality
Setiap fungsi bekerja tanpa mengetahui struktur dari yang lain.
·         Generalisasi dan Spesialisasi
Dasar pemikiran “jika dibolehkan melakukan ini, maka lakukanlah hal yang lain dengan cara serupa”

Detail Perancangan Bahasa Pemrograman
            Berikut adalah detail perancangan pemrograman.
·         Microstructure
o  Mencakup masalah-masalah dalam perancangan bahasa yang mempengaruhi penampilan bahasa tapi tidak mengubah semantiknya.
o  Aspek terendah adalah set karakter yang dipergunakan.
o  Contoh
Keyword : SIZE
Penggunaan Komentar : //, *, { }
·         Struktur Ekspresi
o  Salah satu topik berhubungan dengan ekspresi adalah urutan dari evaluasinya. Metode yang biasa dipergunakan untuk menentukannya berdasar pada dua tingkatan sebagai berikut :
1.       Explicit bracketing:
menggunakan karakter seperti ‘(‘,’)’,’[‘,’]’ untuk membatasi ekspresi.
2.       Operator binding:
beberapa penggunanya dengan binding:
a) Kiri ke kanan.
b) Kanan ke kiri.
c) Berdasar prioritas.
·         Struktur Data
o   Deklarasi Data
-          Konstanta
Berguna untuk menuliskan konstanta untuk berbagai tipe data.
Contoh : CONST PI = 22/7
-          Type
Pendekalrasian type atau dalam konstruksi struktur yang lebih kompleks, akan mempermudah penulisan dan readability.
Contoh : TYPE MATRIKS = ARRAY [1..100, 1..100] OF INTEGERE
-          Variabel
Contoh : VAR a, b, c : integer

o   Tipe – tipe data yang disediakan dalam bahasa pemrograman
-          Sederhana -> Tipe Data Dasara
-          Gabungan -> Array, Record
-          Kompleks -> Tree, Stack, Quee
o   Strategi alokasi storage
-          Alokasi static
-          Alokasi local, dinamis dan otomatis : Store Procedure
-          Retention : tidak banyak digunakan
o   Lingkup dari variabel
-          Batasan untuk mengurangi kompleksitas system
-          Biasanya dilakukan pembatasan interaksi antara segmen yang berbeda
-          Misal : penggunaan BEGIN – END untuk memulai suatu prosedur atau suatu algoritma
·         Struktur Kontrol
o   Begin – End
o   If – Then – Else
o   Case – Of
o   Repeat – Until
o   For – End
·         Struktur Kompilasi
o  Tahapan yang berhubungan dengan proses kompilasi, sebagai contoh dalam bahasa C pada saat kompilasi ada beberapa file yang terpisah sehingga membutuhkan menyisipkan file tersebut dengan menggunakan perintah Include.
·         Struktur I/O
o   Merupakan fasilitas untuk menangani masukan dan keluaran
o   Tingkatan : 
-          Bentuk Format Free
Berguna untuk komunikasi sederhana bagi para programmer untuk memeriksa kebenaran program. Programmer bisa menampilkan dengan mudah nilai dari variable dan untuk memeriksa secara cepat lojik dari program pada sekumpulan input data.
-          Bentuk Formatted
Nilai setiap variable dalam masukan atau keluaran ditulis atau dibaca sesuatu dengan format yang ditentukan, misalnya panjang dari field dan tipe data.
Contoh :
Jika x=4 dan s=“nama”, maka
printf (“nilai x adalah %d \n nilai s adalah %s”, x,s)
Maka output :
nilai x adalah 4
nilai s adalah nama.
Skenario Perancangan Pemrograman
·         Tentukan apa yang diinginkan.
·         Tentukan feature yang mungkin
·         Tentukan desain dan sesuaikan dengan featurenya
·         Tentukan rincian, parsing, dan error checking.
·         Tuliskan user manual dan help.
·         Evaluasilah, jika salah mulai lagi dari langkah 3.
·         Jika sudah benar, optimisasilah dan uji segala kemungkinan.
·         Cobakan kepada pengguna, tunggu reaksinya.
·         Perbaiki bug dan mulai versi baru.

Teknik Kompilasi - Mutu Kompilator


Mutu Kompilator
            Beberapa faktor yang mempengaruhi mutu dari sebuah kompilator , antara lain :
1.      Kecepatan dan Waktu proses kompilasi
Waktu proses kompilasi adalah waktu yang di butuhkan pada saat kita menunggu hasil kompilasi. Mutu ini di pengaruhi oleh:
·         Penulisan Algoritma Kompilator
Adalah algoritma yang di gunakan untuk menuliskan program kompilator itu. Misalnya sebuah kompilator lebih cepat melakukan kompilasi di bandingkan lainnya, hal ini di sebabkan karena pembuatan algoritma oleh para pemrogramannya lebih baik saat membuat kompilator tersebut.
·         Kompilator Pengkompilasi
Adalah sebuah program khusus yang menghasilkan kompilator tersebut. Contoh pembuatan Turbo Basic tentu saja tidak menggunakan bahasa Basic tetapi menggunakan bahasa lain dan di kompilasi dengan kompilator lain.
Gambar pembuatan kompilator menggunakan Kompilator Pengkompilasi.


2.      Mutu Program Objek ( Program hasil dari proses kompilasi )
Mutu suatu program objek ditentukan oleh ukuran dan kecepatan eksekusi dari program objek.
Contoh : Perbandingan antara Turbo Pascal 5 dan Turbo Pascal 6, di mana Turbo Pascal 6 lebih baik dari pada Turbo Pascal 5 bila program objek ( exe ) yang di hasilkan berukuran lebih kecil dan lebih cepat di eksekusi. Hal ini di pengaruhi oleh fungsi translasi yang di gunakan oleh kompilator tersebut ( cara untuk melakukan perubahan dari source kode ke object kode ).
3.      Intregated Environment
Merupakan fasilitas – fasilitas terintegrasi yang di miliki oleh kompilator tersebut. Misalnya untuk melakukan editing, debugging, testing. Intregated Enviroment biasa di sebut juga IDE ( Integraterd Development Environment ).
Contoh : Dengan menggunakan CLIPPER ( CLIPPER.EXE ) kita harus melakukan penyuntingan dengan menggunakan suatu program editor (PE.EXE) yang terpisah dari kompilatornya, sedangkan pada Turbo Pascal ( TURBO.EXE ) kita bisa melakukan penyuntingan sekaligus kompilasi dan debug dalam satu lingkungan pemrograman.

Pembuatan Kompilator
Pembuatan suatu kompilator dapat dilakukan dengan :
1.      Bahasa mesin
Tingkat kesulitannya sangat tinggi, karena bahasa mesin ini sangat dekat dengan mesin sehingga sangat tidak manusiawi, dan tingkat ketergantungannya pada mesin sangat tinggi. Pembuatan kompilator dengan bahasa mesin hampir mustahil dilakukan. Bahasa mesin mungkin digunakan saat membuat assembler.
2.      Bahasa assembly
Bahasa assembly bisa dan biasa digunakan sebagai tahap awal pada proses pembuatan sebuah kompilator. 
Keuntungan  pengguna bahasa  assembly adalah program hasil (object code) yang memiliki ukuran kecil. 
Kerugiannya memerlukan usaha yang besar, karena instruksi assembly pendek-pendek (sulit dimengerti) dan memiliki fasilitas yang terbatas. Sehingga masih terdapat kesulitan untuk mengembangkan sebuah kompilator yang secara keseluruhan dibuat dengan bahasa assembly.
3.      Bahasa tingkat tinggi lain pada mesin yang sama
Keuntungannya adalah proses pembuatan kompilator akan lebih mudah, karena menggunakan bahasa tingkat tinggi yang lebih mudah dimengerti dan fasilitasnya lebih baik dibandingkan assembly.
Kerugiannya kompilator  yang dihasilkan akan memiliki ukuran yang besar. Bisa dibayangkan kalau kita akan mengembangkan kompilator untuk bahasa BASIC dengan mengunakan Turbo Pascal.
4.      Bahasa tingkat tinggi yang sama pada mesin yang berbeda
Keuntungan dan kerugiannya sama dengan no ( 3 ), hanya disini memerlukan beberapa tahapan proses kompilasi sebelum didapat kompilator yang diinginkan pada mesin tujuan. Contoh: pembuatan kompilator C untuk DOS, berdasarkan kompilator C yang ada di UNIX.
5.      Bootstrap
Gagasan dari bootstrap adalah kita bisa membangun sesuatu yang besar dengan lebih dahulu membuat bagian intinya. Cara ini diperkenalkan oleh Niklaus Wirth saat membuat kompilator untuk bahasa Pascal.


P0 dibangun dengan assembly, P1 dibangun oleh P0, P2 dibangun oleh P1, dan P3 dibangun oleh P2. Jadi kompilator bahasa P dibuat tanpa harus secara keseluruhan menggunakan assembly.