Teknik Kompiler

Produk Kompiler

October 23, 2007 · Filed under TEKNIK KOMPILER

Produk Terbaru SuperMicro
Salah satu produsen server yang menghuni peringkat ketiga dari TOP500 Supercomputer , SuperMicro, mengumumkan produk terbarunya di Mandarin Oriental Hotal, Jakarta. Produk yang diperkenalkan kali ini berbasis Itanium 2. Anda diberi pilihan ukuran server, mulai dari 1U, 2U, 4U, dan 6U. Pilihan-pilihan yang diberikan SuperMicro
tersebut tentu memudahkan Anda dalam mengatur semua peralatan (komputer) di kantor Anda. Tidak terkecuali cost yang Anda keluarkan.
Hadir sebagai pembicara tunggal Account Manager SuperMicro Asia Pasific, Kenny Bertempat di kantor IBM, di bilanganSudirman, IBM mengumumkan software
Tivoli baru yang mengaitkan informasi identitas ke dalam proses-proses bisnis inti.
Berbagai solusi dari IBM seperti IBM Tivoli Access Manager, IBM Tivoli Identity Manager, IBM Tivoli Privacy Manager, IBM Tivoli Directory Integrator dan IBM Tivoli Directory Server, memiliki kapabilitas integrasi dan otomatisasi yang menciptakan lingkungan komputasi di antara para mitra, pemasok, pelanggan dan karyawan secara aman dan dinamis.
Hadir sebagai pembicara, Achirul Djamal,Heriyadi Heriyadi Heriyadi IBM Tivoli Identity Manager ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○
Chang. Pada acara tersebut juga hadir Account Manager PT Mega Komputindo Lestari sebagai distributor SuperMicro di Indonesia. He Country Manager Software Group IBM
Indonesia dan Julia A. Widjaja, Sales Special-ist Software IBM Indone

—————————————————————————————–

Compiler Construction

Teknik kompilasi telah lama diberikan di lingkungan pendidikan tinggi bidang komputer di Indonesia. Pembahasan dalam mata kuliah ini biasanya berkisar pada teori automata, teori kompilasi, teori grammar. Praktek teknik kompilasi pun telah diberikan di lingkungan laboratorium, walau biasanya masih terbatas pada demonstrasi hal teori, ataupun sekedar pengenalan kompiler yang ada atau banyak digunakan. Beberapa universitas telah mulai memperkenalkan penggunaan perangkat pembangun kompiler.

Telah banyak mahasiswa menggunakan dan memanfaatkan compiler/interpreter, tapi saat ini masih belum banyak muncul nama programmer Indonesia yang terlibat dalam proyek pembuatan compiler/interpreter. Mungkin hanya KILANG nya Prof. Dali S Naga (BASIC Indonesia), yang sempat terdengar, sayang sekarang sudah tidak ada jejaknya. Mungkin merilis KILANG dalam bentuk GPL seperti BWBASIC, adalah suatu langkah menarik untuk terus mengembangkan KILANG ini lebih lanjut.

Memang ada sekelompok programmer Indonesia yang sempat akan merilis bahasa pemrograman “BATAK” tetapi hingga saat ini belum terdengar kembali. Bahasa pemrograman, JAVA, BALI, MADURA, hanyalah namanya saja yang berbau Indoensia, tapi sedikit atau malah tidak ada keterlibatan pengembang dari Indonesia.

Tentu saja akan timbul pertanyaan “apa yang salah dalam pengajaran kompilasi ???” (INGAT SAYA TIDAK INGIN MENDISKREDITKAN SIAPAPUN DALAM PERNYATAAN INI). Hanya mencoba mencari langkah perbaikan yang mungkin bisa diterapkan.

Walaupun sedikit sekali atau nyaris tidak ada “lowongan pekerjaan” yang membutuhkan kemampuan mengembangkan compiler ini (silahkan baca di koran ataupun majalah), bukan berarti pengetahuan itu sama sekali tak dibutuhkan dalam dunia pemrograman sehari-hari. Pada dasarnya pengetahuan pembuatan kompiler (compiler construction) ini merupakan pengetahuan dasar komputasi yang sangat baik sekali. Pengetahuan ini dimanfaatkan pada beragam aplikasi nantinya. Misal teknik parsing, pengenalan pola teks, optimasi kode dan lain sebagainya. Bahkan suatu database engine pun di bagian “front end” selalu menggunakan parsing ini. Pengetahuan tentang kompilasi akan dapat memberikan landasan bagi programmer untuk menyusun program yang efektif dan efisien.

Ketika seseorang melakukan pemrograman, sebetulnya secara tidak sadar dia akan melakukan proses penambahan suatu bahasa. Misal pembuatan suatu fungsi (ataupun prosedur) pada dasarnya merupakan suatu proses “penambahan kosa-kata” dari bahasa pemrograman tersebut. Dari yang tadinya tidak memiliki fungsi tersebut hingga akhirnya ditambahkan suatu “vocabulary” untuk melakukan suatu fungsi tersebut. Untuk itulah pemahaman penyusunan kompiler merupakan suatu dasar yang utama dalam bidang ilmu komputer.

—————————————————————————————–

Teknik Kompilasi

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,

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

Sejarah perkembangan suatu kompilator sudah dimulai sejak lama, yaitu pada saat mulai ditemukannya komputer pada awal 1950-an.

Sejak waktu tersebut teknik dan cara pembentukan suatu kompilator telah berkembang dengan sangat pesat dan pembentukkan suatu kompilator dapat dilakukan makin mudah.

Demikian pula program bantu (tools) untuk membuat suatu kompilator sudah dapat diperoleh sehingga pembentukan suatu kompilator dapat dilakukan dengan cepat.

Kompilator pertama yang dibuat adalah kompilator untuk bahasa FORTRAN yang pada saat itu dikembangkan dengan memakan sejumlah tenaga ahli yang setara dengan pekerjaan yang dilakukan oleh 18 orang.

Dengan adanya program bantu dan tata cara pembentukan yang sistematis dan tertata dengan baik serta pendefinisian struktur bahasa yang cermat, maka suatu kompilator untuk bahasa yang terstruktur seperti PASCAL atau C dapat dikembangkan.

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

a. Proses analisis leksikal

b. Proses analisis sintaktik

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

a. Proses yang menghasilkan kode (code generator)

b. Proses optimasi kode (code optimizer)

Sebelum Bahasa sasaran dapat dihasilkan, dalam melakukan ini tiap bagian utama akan berhubungan dan berkomunikasi dengan suatu berkas tabel yang disebut tabel simbol (symbol table) yaitu suatu tabel yang berisi semua simbol yang digunakan dalam bahasa sumber.

Selain kompilator masih diperlukan beberapa program lainnya sebelum dapat dibentuk bahasa sasaran yang dapat dijalankan. Seperti suatu bahasa sumber dapat dituliskan dalam beberapa modul yang terpisah dan disimpan dalam beberapa file yang terpisah.

Untuk menanggulangi hal ini, maka suatu program khusus yang disebut dengan suatu praprosesor digunakan untuk mengumpulkan modul-modul yang saling lepas ini ke dalam suatu program baru. Praposesor dapat pula melengkapi singkatan-singkatan atau ungkapan-ungkapan maupun kependekan-kependekan yang digunakan dalam bahasa sumber seperti pendefinisian makro dan lain sebagainya.

—————————————————————————————–
Jangan remehkan Teknik Kompilasi

Salah satu mata kuliah yang mungkin paling sering diremehkan oleh mahasiswa Teknik Informatika adalah Teknik Kompilasi dan pendahulunya seperti teori bahasa dan otomata. Mereka berpikir bahwa toh mereka gak bakal bikin kompiler, jadi buat apa susah-susah belajar kompilasi yang memang relatif sulit itu?

Anggapan salah, karena Teknik Kompilasi tidak semata-mata hanya berguna untuk membuat kompiler doang, tapi juga untuk membuat parser. Di tempat kerja, aku ditugaskan untuk membuat sistem custom nota, dimana nantinya customer bisa membuat sendiri nota sesuai dengan keperluannya. Tentu salah satu fitur yang harus ada adalah formula, seperti misalnya menghitung jumlah total belanja, total PPN, jumlah uang kembali, dsb. Formula itu bisa mengandung berbagai macam fungsi, seperti IF (yang lebih repot lagi dalam suatu fungsi IF juga harus bisa mengandung fungsi IF, jadi bisa nested kayak Excel), fungsi untuk mengetahui tanggal cetak, fungsi untuk mengkonversi string menjadi angka, dan lain-lain. Jadi gimana caranya agar komputer bisa meng-evaluasi formula yang dimasukkan customer dan mencetak hasilnya? Ya pakai parser. Jadi, dengan menggunakan coco pertama-tama menentukan token, lalu grammarnya lalu selanjutnya tinggal bikin syntax directed translationnya. (sebetulnya cukup sulit, tapi asyik banget)

Salah satu kasus lain yang memerlukan teknik kompilasi adalah untuk melakukan perubahan secara masal pada source code program secara otomatis. Misal, jika source code program anda terdiri dari ratusan ribu baris dan mengandung ratusan query SQL yang tersebar di berbagai tempat. Suatu ketika anda ingin melakukan perubahan terhadap sejumlah query tersebut, misalnya (kasus yang sangat sederhana) untuk semua query yang selectnya mengandung tabel penjualan ditambahkan field keterangan. Tentu sangat merepotkan kalau anda harus melakukan semua perubahan itu secara manual satu per satu (belum lagi kemungkinan terjadi kesalahan sangat besar), tapi dengan memanfaatkan teknik kompilasi, anda tinggal menggunakan coco untuk membuat grammar dan syntax directed translationnya lalu tekan satu tombol, dan semua perubahan itu dilakukan secara otomatis oleh komputer.

Minimal, anda harus menguasai grammar, dan kemudian juga syntax directed translation. Teori-teori algoritma parser (LR parser dll) mungkin malah tidak terlalu penting menurutku karena itu sudah dihandle oleh tool. Sebetulnya tidak terlalu sulit kok, mungkin yang paling susah ya bikin grammarnya, tapi setelah grammarnya jadi seharusnya sudah gak ada masalah.

—————————————————————————————–

Struktur Program COM

#####################################
Dokumentasi asli ada di http://www.sroer.org/index.php?type=download&filename=chapter_1.zip&types=tugas
“Chapter 1 : Struktur Program COM”
#####################################

Mengapa menggunakan bahasa Assembly?

1. Cepat, Lebih cepat dari compiler lainnya.
2. Lebih dekat dengan bahasa mesin, disebabkan bahasa Assembly dialamatkan
1:1 dengan bahasa mesin.
3. Kode yang dihasilkan lebih kecil dari compiler lainnya.
4. Dapat mengakses hardware lebih luas.

Compiler Assembly sudah banyak tersedia di internet, contohnya TASM (Turbo
Assembler), MASM (Microsoft Assembler), NASM (Netwide Assembler), dan lainlain.
Salah satu bentuk program yang dapat dihasilkan oleh compiler Assembly
adalah file COM. File COM adalah struktur program paling sederhana. Ada
beberapa syarat dalam pembuatan atau penggunaan file COM :

1. Kode dan data program harus tidak lebih besar dari 64 KB.
2. Tidak dapat memesan alamat memori melalui sistem operasi.

Contoh bentuk kode program COM, ketiklah di teks editor yang dapat
menghasilkan file ASCII murni seperti Notepad, vi, atau lainnya. Simpan
dengan nama COBAASM.ASM.
Versi TASM :
———————————-
ideal
p386n
model tiny
codeseg
org 100h
jmp start
;tempat data dan subrutin
start:
mov ax, 4c00h
int 21h
end
———————————-
Versi MASM :
———————————-
.386
.model tiny
.code
org 100h
entry:
jmp start
;tempat data dan subrutin
start:
mov ax, 4c00h
int 21h
end entry
———————————-

Compilelah dengan perintah TASM.EXE COBAASM.ASM lalu dikuti dengan perintah
TLINK.EXE /T COBAASM.OBJ jika menggunakan compiler TASM. Untuk compiler MASM
gunakan perintah ML COBAASM.ASM. Jika tak ada error maka akan terlihat
output seperti ini :

E:\PUSHM0~1\TASM3>tasm.exe cobaasm.asm
Turbo Assembler Version 3.0 Copyright (c) 1988, 1991 Borland
International
Assembling file: cobaasm.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 460k

File yang dihasilkan dari proses kompilasi adalah file OBJ. Untuk merubah
file OBJ ini menjadi sebuah file EXE atau COM kita perlu melakukan “linking”
dengan program linker. Disini kita menggunakan TLINK.exe.

E:\PUSHM0~1\TASM3>tlink.exe /t cobaasm.obj
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International

Argumen /t pada tlink.exe berarti kita ingin membuat file COM dari file .obj
yang dihasilkan oleh compiler. Sedangkan untuk membuat file EXE tidak perlu
mengikutkan argumen /t.
Jalankan program COM tersebut :

E:\PUSHM0~1\TASM3>cobaasm.com

Apa yang terjadi? Tentunya tidak terjadi apa-apa karena kita belum
menuliskan perintah untuk program tersebut. Jadi program cobaasm.com
tersebut hanya diload ke memory lalu terminate dengan sendirinya.
Apa sih arti dari kode-kode diatas? lalu apa perbedaan antara kode yang
ditulis untuk compiler TASM dengan MASM?
berikut adalah penjelasan lengkapnya…

1. Perintah “ideal” berarti kita menggunakan syntax ideal dalam compiler
TASM.
2. Perintah “p386n” atau “.386″ berarti kita menggunakan intruksi prosesor
80386.
3. Perintah “model tiny” atau “.tiny” berarti kita ingin menggunakan
format file COM.
4. Perintah “codeseg” atau “.code” adalah awal dari kode program kita.
5. Perintah “org 100h” berarti program kita akan dimulai dari offset 100h.
6. Dalam compiler MASM kita perlu mendeklarasikan entry point untuk
program, disini kita gunakan label “entry:”.
Perlu diketahui kalau deklarasi sebuah label : “nama_label:”.
7. Program COM selalu diawali dengan “peloncatan” atau “jump” ke awal kode
program. Perintah yang digunakan adalah “jmp” diikuti dengan nama
label, misalnya “start”. Bila diperhatikan, diantara perintah “jmp
start” dan label “start” adalah tempat dimana kita bisa deklarasikan
variabel-variabel ataupun data-data yang digunakan dalam program kita.
8. Untuk mengakhiri jalannya program, kita perlu membuat suatu perintah.
Perintah “end” atau “end entry” disini hanya menunjukkan akhir dari
kode program, bukan untuk MENGAKHIRI proses. 2 perintah yang digunakan
adalah :

MOV AX, 4c00h
int 21h

Perintah MOV adalah perintah untuk menyalin isi data atau register ke
suatu register lain. Bentuk umum perintah MOV :

MOV tujuan_salin, asal_salin

Pada perintah diatas kita akan menyalin atau lebih tepatnya “mengisi”
register AX (lebih dikenal dengan register akumulator 16 bit) dengan
bilangan heksa 4c00.
Sedangkan perintah INT 21h berarti kita menjalankan interrupt sistem
dengan fungsi 21h.

Ditulis dalam Uncategorized

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: