"TEKNIK INFORMATIKA-09"

.
Diberdayakan oleh Blogger.

Teknik Kompilasi

Kalau mahasiswa mendengar kata-kata “tehnik kompilasi” atau compiler, maka yang terbayang adalah suatu matakuliah killer. Kesan tersebut memeng ada benarnya, apalagi kalau dosen menggunakan acuan buku teks karangan Alfert V. Aho, Ravi Sethi, dan Jeffrey D. Ullman, atau yang sering disebut “buku naga” karena kulit muka buku tersebut bergambar naga. Buku tersebut penuh dengan teori-teori dasar tehnik kompilasi dan automata berhingga.
Teknik Kompilasi adalah suatu cara/metode beberapa hal yang diproses menjadi kecil/menerjemahkan suatu bahasa pemrograman diubah ke bahasa lain/bahasa mesin.
Bahasa pemrograman menjembatani antara pemikiran manusia yang sering tidak ter struktur dengan kepastian yang diperlukan oleh komputer untuk melakukan eksekusi. Bahasa pemrograman seperti ini biasanya bahasa tingkat tinggi. Komputer digital, di sisi lain, menerima dan memahami hanya bahasa tingkat rendah mereka sendiri, terdiri dari derajat nol dan satu, yang sulit dipahami oleh manusia.
Merupakan Teknik dalam melakukan pembacaan suatu program yang ditulis dalam bahasa sumber, kemudian diterjemahkan ke dalam suatu bahasa lain yang disebut bahasa sasaran. Dalam melakukan proses penerjemahan tersebut, sudah barang tentu kompilator akan melaporkan adanya keanehan-keanehan atau kesalahan yang mungkin ditemukannya. Proses penerjemahan yang dilakukan oleh kompilator ini disebut proses kompilasi (compiling).
Bila dipandang sepintas lalu, maka akan timbul beranekaragam kompilator yang dapat dibuat antara lain sebagai berikut :
 Bahasa Sumber seperti bahasa FORTRAN, PASCAL, C dan juga bahasa-bahasa lainnya yang sifat dan pemakaiannya agak spesifik atau khusus, seperti bahasa untuk program DBASE, SPSS dan lain sebagainya.
 Bahasa Sasaran dapat berupa bahasa sumber lain seperti C, FORTRAN dan lain sebagainya atau Bahasa Mesin (Machine Language) yang digunakan oleh suatu prosessor mikro atau sumber komputer besar maupun komputer super.
Proses kompilasi dari suatu kompilator pada dasarnya dapat dibagi ke dalam 2 bagian utama yaitu bagian analisis dan bagian sintesis.
 Tahap analisis program yang ditulis dalam bahasa sumber dibagi dan dipecah ke dalam beberapa bagian yang kemudian akan dipresentasikan ke dalam suatu bentuk antara dari program sumber.
Operasi-operasi yang dilakukan oleh program sumber ditentukan dan dicatat dalam suatu struktur pohon (tree) yang disebut dengan nama pohon sintaks (sintax tree) Dalam hal ini setiap nodal pada tree tersebut menyatakan suatu operasi, sedangkan anak dari nodal (titik) tersebut memberikan argumen yang diperlukan
Secara umum proses dalam tahap analis terdiri dari 3 bagian utama, yaitu :
1. Proses analisis leksikal
2. Proses analisis sintaktik
3. Proses analisis semantik
 Tahap sintesis yang berikutnya program sasaran dibentuk berdasarkan representasi antara yang dihasilkan pada tahap analisis.
Untuk tahap sintetis terdiri dari 2 bagian utama, yaitu
4. Proses yang menghasilkan kode (code generator)
5. Proses optimasi kode (code optimizer)
 Bahasa Mesin Komputer
Kode mesin atau bahasa mesin adalah sistem instruksi dan data yang dijalankan langsung oleh komputer central processing unit. Kode mesin dapat dianggap sebagai primitif (dan rumit) atau sebagai bahasa pemrograman tingkat terendah representasi dari disusun dan / atau program komputer rakitan. Program dalam menafsirkan bahasa tidak diwakili oleh kode mesin tetapi, walaupun penerjemah mereka (yang dapat dilihat sebagai sebuah prosesor melaksanakan program tingkat yang lebih tinggi) sering terjadi. Kode mesin kadang-kadang disebut kode asli ketika mengacu pada platform-bagian dari bahasa tergantung fitur atau perpustakaan. kode Mesin tidak boleh disamakan dengan apa yang disebut “bytecode”, yang dilaksanakan oleh seorang juru bahasa.

 Kode Mesin Instruksi
Setiap prosesor atau keluarga prosesor memiliki set instruksi kode mesin. Instruksi pola bit yang oleh desain fisik sesuai dengan perintah yang berbeda ke mesin. Set instruksi demikian khusus untuk kelas prosesor menggunakan (banyak) arsitektur yang sama. Penerus atau derivatif desain prosesor sering mencakup semua instruksi dari pendahulunya dan dapat menambah petunjuk tambahan. Kadang-kadang desain pengganti akan menghentikan atau mengubah arti dari beberapa kode instruksi (biasanya karena dibutuhkan untuk keperluan baru), kode yang mempengaruhi kompatibilitas sampai batas tertentu, bahkan hampir sepenuhnya kompatibel dengan prosesor mungkin akan menampilkan perilaku yang sedikit berbeda untuk beberapa instruksi tetapi ini jarang yang masalah. Sistem mungkin juga berbeda dalam rincian lainnya, seperti pengaturan memori, sistem operasi, atau perangkat periferal; karena biasanya program bergantung pada faktor-faktor seperti, sistem yang berbeda akan biasanya tidak menjalankan kode mesin yang sama, bahkan ketika jenis prosesor yang sama digunakan.
Sebuah set instruksi kode mesin mungkin memiliki semua instruksi yang sama panjang, atau hal itu mungkin karena panjang variabel-instruksi. Bagaimana pola diorganisir sangat bervariasi dengan arsitektur tertentu dan sering juga dengan jenis instruksi. Sebagian besar instruksi memiliki satu atau lebih opcode bidang yang menentukan jenis instruksi dasar (seperti aritmatika, logis, melompat, dll) dan operasi sebenarnya (seperti menambah atau membandingkan) dan bidang lain yang mungkin memberikan jenis operand (s) , mode pengalamatan (s), pengalamatan offset (s) atau indeks, atau nilai aktual itu sendiri (Operand konstan seperti yang terdapat dalam sebuah instruksi disebut immediates).

 Program
Sebuah program komputer adalah suatu urutan instruksi yang dijalankan oleh CPU. Sementara prosesor mengeksekusi instruksi sederhana satu demi satu, prosesor superscalar mampu menjalankan beberapa instruksi sekaligus. Program aliran mungkin dipengaruhi oleh khusus ‘melompat’ instruksi yang mentransfer eksekusi ke instruksi lain dari yang di bawah satu. Lompatan bersyarat diambil (eksekusi berlanjut pada alamat lain) atau tidak (eksekusi berlanjut pada instruksi berikutnya) tergantung pada beberapa kondisi.

 Bahasa Assembly
Yang jauh lebih mudah dibaca rendition of bahasa mesin, disebut bahasa assembly, menggunakan kode mnemonic untuk merujuk pada instruksi kode mesin, bukan hanya menggunakan instruksi “nilai numerik. Sebagai contoh, pada prosesor Zilog Z80, kode mesin 00.000.101, yang menyebabkan CPU untuk pengurangan prosesor B mendaftar, akan diwakili dalam bahasa assembly sebagai Desember B.

 3 Bahasa tingkat tinggi (user oriented)
Disebut tingkat tinggi karena lebih dekat dengan manusia. Memberikan fasilitas yang lebih banyak, kontrol program yang lebih terstruktur, kalang (nested), block,dan prosedur.

 Bahasa yang problem oriented
Memungkinkan penyelesaian untuk suatu masalah atau aplikasi yang spesifik. Bahasa yang problem oriented kadang dimasukkan pula sebagai bahasa tingkat tinggi.

 Hubungan terfokus
Dalam beberapa arsitektur komputer, kode mesin ini diterapkan oleh lapisan yang lebih mendasar dari program yang disebut microprograms, menyediakan antarmuka bahasa mesin Common melintasi sebuah garis atau keluarga model yang berbeda dengan komputer yang mendasari dataflows sangat berbeda. Hal ini dilakukan untuk memfasilitasi port dari program bahasa mesin antara model yang berbeda. Contoh dari penggunaan ini adalah IBM System/360 komputer keluarga dan para penerus mereka. Dengan jalan dataflow lebar dari 8 bit dengan 64 bit dan seterusnya, mereka tetap menyajikan sebuah arsitektur umum pada tingkat bahasa mesin di seluruh baris.
Menggunakan lapisan terfokus untuk menerapkan sebuah emulator memungkinkan komputer untuk menyajikan arsitektur komputer yang sama sekali berbeda. Baris System/360 ini digunakan untuk mengizinkan program port dari mesin IBM sebelumnya untuk keluarga baru komputer, misalnya IBM 1401/1440/1460 emulator pada IBM S/360 model 40.

 Bahasa pemrograman setiap site membutuhkan berapa bit:
Alamat pada source program umumnya merupakan alamat simbolik. Sebuah compiler biasanya melakukan pengikatan alamat simbolik (symbolic address) ke alamat relokasi dipindah (relocatable address). Misalnya compiler mengikatkan alamat simbolik ke alamat relokasi “14 byte from the beginning of this module”. Editor Linkage mengikatkan alamat relokasi ini ke alamat absolute (absolute addresses) “74014”.

1. Byte, Sebuah grup yang terdiri dari 8 bit. Satu byte dapat menyimpan hingga 256 macam informasi (ingat, 2 pangkat 8 sama dengan 256), misalnya angka 0 hingga 255 atau 256 huruf dan simbol yang berbeda-beda. Byte terkadang juga disebut dengan oktet, terutama untuk sistem koneksi seperti protokol internet.
2. Word, sebuah grup yang terdiri dari beberapa byte. Pada pemrograman Win32, word biasanya diwujudkan sebagai 2 byte atau 16 bit. Grup dari 4 byte atau 32 bit disebut double-word.

 Bahasa mesin setiap site membutuhkan berapa bit

Pada dasarnya komputer adalah makhluk digital yang hanya mengerti digit 1 dan digit 0 (binary). Komputer hanya mau menerima data dalam bentuk binary dan juga hanya bisa mengerti perintah dalam bentuk binary. Perintah dalam bentuk binary ini disebut dengan bahasa mesin.

Secara umum program bisa dilihat sebagai urutan langkah/perintah/instruksi untuk menyelesaikan sesuatu. Programmer bisa langsung membuat program dengan menuliskan perintah dalam bentuk 1 dan 0 (bahasa mesin), atau menggunakan bahasa tingkat tinggi yang lebih manusiawi seperti C, Visual Basic atau Java.
Hanya dua simbol yang dimengerti komputer, yaitu 1 dan 0

Perhatikan contoh sederhana ini: programmer ingin menyimpan nilai register EAX ke dalam stack. Dalam bahasa mesin programmer harus menuliskan 01010000. Sedangkan dalam bahasa assembly programmer cukup menulis PUSH EAX. Manakah yang lebih manusiawi? Tentu menggunakan assembly lebih manusiawi. Sangat sulit bagi manusia bila harus selalu menggunakan 1 dan 0 setiap memberi perintah.

Register adalah variabel internal yang sudah built-in di dalam prosesor yang bisa dipakai oleh programmer untuk bermacam-macam keperluan. Karena register posisinya di prosesor, bukan di memory, maka menggunakan register sebagai variabel jauh lebih cepat dibanding menggunakan variabel yang dismipan di suatu alamat di memori.

Berikut adalah jenis-jenis register yang ada pada prosesor Intel.
Kategori Nama Penjelasan General Purpose EAX, EBX, ECX, EDX Lebar data 32 bit, boleh diapakai untuk keperluan apa saja. E adalah Extended (karena awalnya register general purpose hanya 16 bit). AX,BX,CX,DX 16 bit bawah dari register 32 bit di atas. AX adalah bagian 16 bit bawah dari EAX. AH,AL,BH,BL,CH,CL,DH,DL Bagian 8 bit dari register 16 bit di atas . AH adalah 8 bit atas dari AX. AL adalah 8 bit bawah dari AX. Segment Register CS, SS, DS, ES, FS, GS Digunakan untuk menunjuk 16 bit awal alamat memori. CS = Code, SS = Stack, DS = Data, ES,FS,GS = Extra segment register Offset Register Digunakan untuk menunjuk 16 bit akhir alamat memori. Alamat memori ditunjukkan dengan gabungan segment dan offset. EBP Dipakai sebagai offset frame dalam stack. Biasanya menunjuk pada bottom of stack frame di suatu fungsi. ESP menunjukkan puncak stack, EBP menunjuk dasar stack.
ESI Biasanya dipakai untuk offset string sumber dalam operasi yang melibatkan blok memori.
EDI Biasanya dipakai untuk offset string tujuan dalam operasi yang melibatkan blok memori.
ESP Stack pointer, menunjukkan puncak dari stack.
Special EFLAGS Tidak bisa dipakai programmer, hanya dipakai prosesor untuk hasil operasi logical dan state.
EIP Tidak bisa dipakai programmer, hanya dipakai prosesor untuk menunjukkan alamat memori yang berisi instruksi berikutnya yang akan dieksekusi.

 TIPE DATA DALAM BAHASA PEMROGRAMAN
Di setiap bahasa pemrograman pasti mengenal apa yang dinamakan dengan tipe data
Banyak macam tipe – tipe data primitif dalam bahasa pemrograman yaitu:
1. tipe data integer
2. tipe data float
3. tipe data char
4. tipe data boolean

dan setiap tipe data mempunyai range maximum dan minimum
1. tipe data byte :
besar storagenya 8 bit (1byte), nilai minimalnya -128, nilai maximum 127
2. tipe data short
besar storagenya 16 bit (2byte), atau lebih besar 2kali dari tipe data byte, nilai minimalnya -32768, nilai maksimalnya 32767
3. tipe data integer (int)
besar storagenya 32 bit (4byte), atau lebih besar 4kali dari tipe data byte, nilai minimalnya -2147483648, nilai maksimalnya 2147483647
4. tipe data boolean
digunakan untuk menentukan benar atau salah, tipe data ini hanya bernilai true or false atau sering disebut dalam binarinya (0 dan 1).
5. tipe data long
besar storagenya 64 bit (8byte), nilai minimalnya -9223372036854775808, nilai maksimalnya 9223372036854775807
6. tipe data float
besar storagenya 32 bit (4byte), nilai minimalnya ±3.4E-38, nilai maksimalnya ±3.4E+38
7. tipe data double
besar storagenya 64 bit (8byte), nilai minimalnya ±1.7E-308, nilai maksimalnya ±1.7E+308
8. tipe data char
tipe data ini mempunyai ukuran 16 bit atau setara dengan 65536 kode.
Di unicode dibahas secara detail yang tentang tipe data char
Perlu di ingat lagi kalau dalam membuat program yang berisikan hitungan yang menggunakan angka sampai ribuan atau bahkan jutaan sebaiknya menggunakan tipe data float atau double. Kalau menggunakan tipe data lain contohnya menggunakan integer maka nanti dalam perhitungan yang sampai bernilai jutaan akan bernilai negatif (tidak valid).

Sumber :http://nanangchosin.files.wordpress.com/2008/09/teknik-kompilasi2.doc
http://dunovteck.wordpress.com/2010/02/10/bahasa-mesin-komputer
http://genduet.wordpress.com/2009/04/01/tipe-data-dalam-bahasa-pemrograman

0 komentar

Posting Komentar