Friday, September 23, 2011

0 PENGANTAR TEKNIK KOMPILASI

Date: Friday, September 23, 2011 9/23/2011 03:07:00 AM
Category:
Author: Unknown
Share:
Responds: 0 Comment
Bahasa pemrograman berdasarkan pada tingkat ketergantungan mesin :
1. Bahasa mesin
2. Bahasa assembly
3. Bahasa tingkat tinggi (user oriented) : Pascal, Basic
4. Bahasa yang problem oriented : SQL

Translator
Mengubah source code menjadi target/object code.
1. Assembler : source code adalah bahasa assembly.
2. Compiler : source code adalah bahasa tingkat tinggi (misal Pascal).
3. Interpreter : tidak membangkitkan object code, hasil translasi dalam bentuk internal (misal Basic, LISP).

Proses Kompilasi
Source Code -> Compiler -> Object Code -> Eksekusi Komputer (+Data) -> Hasil
Source code dan data diproses pada saat yang berbeda.
Compile time : saat source code diubah ke object code.
Run time : saat object code dieksekusi.

Proses Interpretasi
Source Code -> Interpreter (+Data) -> Hasil
Source code dan data diproses pada saat yang sama.

Model Kompilator
Sebuah kompilator memiliki dua fungsi :
1. Fungsi Analis : dekomposisi program sumber menjadi bagian-bagian dasarnya.
Source Code -> Lexical Analyzer : Scanner -> Syntactic Analyzer : Parser -> Semantic Analyzer : Intermediate Code Generator
2. Fungsi Sintesis : pembangkitan dan optimasi kode.
Code Generator -> Code Optimizer -> Object Code
Keterangan :
Scanner : memecah program sumber menjadi besaran leksik/token.
Parser : memeriksa urutan kemunculan token.
Analisis Semantik : biasanya digabungkan dengan intermediate code generator (bagian yang berfungsi membangkitkan kode antara).
Code Generator : membangkitkan kode objek.
Code Optimizer : memperkecil hasil dan mempercepat proses.
Tabel Simbol : menyimpan semua informasi yang berhubungan dengan kompilasi.

Model Kompilator seperti di atas disebut Multi Pass Compiler / Separate Compiler yaitu Scanner dan Parser bekerja terpisah. Scanner menghasilkan semua token, baru diproses oleh Parser.
Berbeda dengan One Pass Compiler dimana Scanner baru bekerja menghasilkan tiap token setelah mendapatkan perintah dari Parser.
Token : besaran pembangun bahasa/representasi dari besaran leksik.

Mutu Kompilator
1. Kecepatan dan waktu proses kompilasi.
Tergantung pada :
a. Penulisan algoritma kompilator, yaitu algoritma yang digunakan untuk menuliskan program kompilator tersebut.
b. Kompilator pengkompilasi, sebuah program khusus yang menghasilkan kompilator tersebut.
2. Mutu program objek : ukuran dan kecepatan eksekusi dari program objek.
Tergantung pada :
Fungsi translasi yang digunakan (cara untuk melakukan perubahan dari source code ke object code).
3. Integrated Environment, yaitu fasilitas-fasilitas terintegrasi yang dimiliki oleh kompilator tersebut. Misalnya untuk melakukan editing, debugging, maupun testing.

Pembuatan Kompilator
Dapat dilakukan dengan :
1. Bahasa mesin, kesulitan sangat tinggi.
2. Bahasa assembly, biasa digunakan sebagai tahap awal.
Keuntungan : object code berukuran kecil.
Kerugian : memerlukan usaha yang besar.
3. Bahasa tingkat tinggi lain pada mesin yang sama.
Keuntungan : pemrograman mudah.
Kerugian : program hasil.
4. Bahasa tingkat tinggi yang sama pada mesin yang berbeda.
5. Bootstrap (diperkenalkan oleh Wirth).
Ide : kita bisa membangun sesuatu yang besar dengan dimulai dari bagian intinya.

KONSEP DAN NOTASI BAHASA
Bahasa : himpunan semua string yang dapat dibentuk dari himpunan alphabet.
Klasifikasi bahasa menurut hirarki Chomsky :
- Bahasa Regular
Pada mesin otomata Finite State Automata (NFA dan DFA).
- Bahasa Bebas Konteks (Context Free)
Pada mesin otomata Push Down Automata.
- Context Sensitive
Bekerja pada mesin otomata Linier Bounded Automata.
- Unrestrieted / Tipe 0 / Phase Structure
Pada mesin turing, tidak ada batasan.

Diagram Status / State Transition Diagram
Berguna untuk mendapatkan token, yaitu melakukan analisis leksikal. Misal suatu bahasa memiliki himpunan simbol terminal/token berikut : (t_PLUS, t_MIN, t_ID, t_INT).
Maka diagram state-nya :
*t_ID(identifier) bisa berupa nama atau keyword.
Keyword/kata kunci yang sudah didefinisikan oleh suatu bahasa. Misal VAR jumlah : integer
maka VAR, integer adalah keyword, jumlah adalah nama.

Notasi BNF (Backus Naur Form)
Aturan-aturan produksi dapat dinyatakan dalam bentuk BNF.
< > mengapit non terminal.
{ } pengulangan 0 sampai n kali.
[ ] 0 atau 1 kali muncul.
( ) contoh x(yz) = xy | xz.
Contoh :
Aturan Produksi E -> T | T + E | T - E, T -> a
Notasi BNF E ::= | + | -

Diagram Sintaks
Membantu pembuatan parser/analisis sintaksis.
Kotak = variabel/nonterminal, bulat = terminal.

ANALISIS LEKSIKAL / SCANNER
Melakukan analisis leksikal, mengidentifikasikan semua besaran yang membangun suatu bahasa.
Tugas Scanner :
1. Merunut karakter demi karakter.
2. Mengenali besaran leksik.
3. Mentransformasi menjadi suatu token.
4. Mengirimkan token.
5. Membuang semua komentar dalam program.
6. Menangani kesalahan.
7. Menangani tabel simbol.

Scanner bekerja berdasarkan mesin Finite State Automata pada Regular Grammar. Untuk membantu mengkonstruksi Scanner dapat mempergunakan Diagram State.
Yang termasuk besaran pembangun bahasa/leksik :
1. Keywords : Begin, End, If, Else.
2. Nama
3. Nilai konstanta
4. Operator dan delimiter : +, -, *, /, ( ), :, ;, dsb.

ANALISIS SINTAKSIS / PARSER
- Top Down : dari root menuju leave (simbol awal sampai simbol terminal).
a. Backtrack : Brute Force
b. No backtrack : Recursive Descent Parser
- Bottom Up

Parsing dengan Brute Force
Contoh : bahasa dengan aturan produksi
S -> aAd | aB A -> b | c B -> ccd | ddc
untuk mem-parsing string 'accd' (dengan S simbol awal).
Kelemahan :
- Mencoba untuk semua aturan produksi yang ada sehingga menjadi lambat (rentang waktu eksekusi tidak jelas).
- Menyulitkan untuk melakukan pemulihan kesalahan.
- Memakan banyak memori karena perlu mencatat lokasi backtrack.
Grammar left recursive tidak dapat diperiksa, dan harus diubah dulu sehingga tidak left recursive.

Parsing dengan Recursive Descent Parser
Secara rekursif menurunkan semua variabel dari awal sampai bertemu terminal dan tidak pernah mengambil token secara mundur.
- Semua simbol variabel dijadikan prosedur/fungsi.
- Bertemu simbol terminal, panggil prosedur Scan.
- Bertemu simbol variabel, panggil prosedur tersebut.


tinggalin coment ya...

Artikel Terkait :



Post a Comment