Anda di halaman 1dari 12

Teknik Kompilasi

BAB I

PENDAHULUAN

1.1

Sejarah Teknik Kompilasi

Sejarah perkembangan suatu kompilator dimulai pada saat ditemukannya komputer yaitu awal tahun 1950. Sejak itu teknik dan cara pembentukan suatu kompilator telah berkembang dengan sangat pesat dan dapat dilakukan dengan mudah. Demikian pula program bantu (tools) untuk membuat suatu kompilator sudah dapat diperoleh sehingga mempercepat pembentukan suatu kompilator. Kompilator pertama yang dibuat adalah kompilator untuk bahasa FORTRAN yang pada saat itu dikembangkan oleh sejumlah tenaga ahli. Dengan adanya program bantu dan tata cara pembentukan yang sistematis dan tertata dengan baik serta pendefinisian struktur bahasa dengan cermat, maka suatu kompilator untuk bahasa yang terstruktur seperti PASCAL atau C dapat dikembangkan. Proses kompilasi dari suatu kompilator pada dasarnya dapat dibagi menajdai 2, 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 (tititk) tersebut memberikan argumen yang diperlukan.

1.2

Pengertian Teknik Kompilasi

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, kompilator akan melaporkan adanya kesalahan-kesalahan yang mungkin ditemukannya. Proses penerjemahan yang dilakukan oleh kompilator tersebut disebut proses kompilasi (compiling). 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 sintesis dapat dibagi menjadi 2 proses : 1 Proses yang menghasilkan kode (code generator) 2 Proses optimasi kode (code optimizer)
Olivia Pangeli Page 1

Teknik Kompilasi
BAB II

PEMBAHASAN

2.1

ANALISIS LEKSIKAL

2.1.1 Pengertian Analisis Leksikal Analisis leksikal adalah sebuah proses yang mendahului parsing sebuah rangkaian karakter. Dalam hal ini, aliran karakter yang membentuk program sumber dibaca dari kiri ke kanan dan dikelompokkan dalam token, yaitu barisan dari karakter yang dalam suatu kesatuan mempunyai arti tersendiri. 2.1.2 Tugas-Tugas Analisis Leksikal Analisis leksikal sering disebut dengan scanner merupakan antarmuka antara kode program sumber dan analisis sintaktik (parser). Tugas dari scanner adalah : 1. Konversi Program Sumber menjadi Barisan Token. Mengubah program sumber yang dipandang sebagai barisan byte/karakter menjadi token. 2. Mengerjakan pengelompokkan urutan-urutan karakter ke dalam komponen pokok : Indentifier dapat berupa keyword atau nama kunci, seperti IF..ELSE, BEGIN..END (pada Pascal), INTEGER (Pascal), INT, FLOAT (Bhs C) Konstanta dapat berupa bilangan bulat (integer), bilangan pecahan (float/real), boolean (true/false), karakter, string, dan sebagainya. Operator dapat berupa operator arithmatika ( + - * / ), operator logika ( < = > ) Delimiter berguna sebagai pemisah/pembatas, sperti kurung-buka, kurung-tutup, titik, koma, titik-dua, titik-koma. White-Space merupakan pemisah yang diabaikan oleh program, seperti enter, spasi, ganti baris, akhir file. 3. Menangani kerumitan sistem masukan/keluaran. Karena analisis leksikal biasanya berhubungan langsung dengan kode sumber yang diwadahi file, maka analisis leksikal juga bertindak sebagai benteng untuk komponen-komponen lain di kompilator dalam mengatasi keanehan-keanehan sistem masukan/keluaran sistem operasi dan sistem komputer. Analisis leksikal harus mengirim token ke parser. Untuk mengirim token, scanner harus mengisolasi barisan karakter pada teks sumber yang merupakan satu token valid. Scanner juga menyingkirkan informasi seperti white-space, komentar, blank, batas-batas baris dan lainnya yang tidak mempunyai arti bagi parsing dan Code Generator. Scanner juga harus mengidentifikasi token secara lengkap dan membedakan keyword dan identifier. Untuk itu scanner memerlukan tabel simbol. Scanner memasukkan identifier ke tabel simbol sendiri setelah konversi menjadi bentuk internal.

Olivia Pangeli

Page 2

Teknik Kompilasi Analisis leksikal merupakan komponen kompilasi independen yang berkomunikasi dengan parser lewat antarmuka yang terdefinisi bagus dan sederhana sehingga pemeliharaan analisis leksikal menjadi lebih mudah dimana perubahan-perubahan terhadap analisis leksikal tidak berdampak pada pengubahan kompilator secara keseluruhan. Agar dapat memperoleh fitur ini, maka antarmuka harus tidak berubah. Kebanyakan kode yang menyusun analisis leksikal adalah sama untuk seluruh kompilator, tidak peduli bahasa. Pada analisis leksikal yang dituntun tabel (table-driven lexical analyzer), maka yang berubah adalah tabel itu sendiri. Kadang diperlukan interaksi analisis leksikal dan analisis sintaktik yang lebih kompleks sehingga analisis leksikal harus dapat menganggap string sebagai token bertipe, bukan identifier. Untuk itu perlu komunikasi tingkat lebih tinggi yang biasanya dilakukan suatu struktur data dipakai bersama seperti tabel simbol. Analisis Sintaktik dapat memasukkan string ke tabel simbol, mengidentifikasi sebagai Type atau typedef, sehingga analisis leksikal dapat memeriksa tabel simbol untuk menentukan apakah lexeme adalah tipe token atau identifier. 2.1.3 Tahap-Tahap Pelaksanaan Analisis Leksikal Tahap Pelaksanaan Analisis Leksikal antara lain sebagai berikut : Pada single one pass Terjadi interkasi antara scanner dan parser. Scanner dipanggil saat parser memerlukan token berikutnya. Pendekatan ini lebih baik karena bentuk internal program sumber yang lengkap tidak perlu dibangun dan disimpan di memori sebelum parsing dimulai. Pada separate pass Scanner memproses secara terpisah, dilakukan sebelum parsing. Hasil scanner disimpan dalam file. Dari file tersebut, parsing melakukan kegiatannya. Scanner mengirim nilai-nilai integer yang mempresentasikan bentuk internal token, bukan nilai-nilai string. Keunggulan cara ini adalah ukurannya kecil dan tetap. Parser sangat lebih efisien bekerja dengan nilai integer yang mempresentasikan simbol daripada string nyata dengan panjang variabel. 2.1.4 Implementasi Analisis Leksikal Implementasi Analisis Leksikal antara lain sebagai berikut : Pengenalan Token 1. Scanner harus dapat mengenali token 2. Terlebih dahulu dideskrpsikan token-token yang harus dikenali Pendeskripsian Token 1. Menggunakan reguler grammar. Menspesifikasikan aturan-aturan pembangkit token-token dengan kelemahan reguler grammar. Menspesifikasikan token berbentuk pembangkit, sedang scanner perlu bentuk pengenalan.

Olivia Pangeli

Page 3

Teknik Kompilasi Menggunakan ekspresi grammar. Menspesifikasikan token-token dengan ekspresi reguler. 3. Model matematis yang dapat memodelkan pengenalan adalah finite-state acceptor (FSA) atau finite automata. Implementasi Analisis Leksikal sebagai Finite Automata Analisis leksikal dapat dibangun dengan menerapkan pada konsep pengenal yang berupa finite automata dengan cara menspesifikasikan rutin-rutin tertentu terhadap string yang sedang dikenali. Penanganan Kesalahan di Analisis Leksikal Hanya sedikit kesalahan yang diidentifikasi di analisis leksikal secara mandiri. Bila analisis leksikal tidak mampu melanjutkan proses karena tidak ada pola token yang cocok, maka terdapat beragam alternatif pemulihan, yaitu : 1. Panic Mode dengan menghapus karakter-karakter berikutnya sampai analisis leksikal menemukan token yang terdefinisi bagus. 2. Menyisipkan karakter yang hilang. 3. Mengganti karakter yang salah dengan karakter yang benar. 4. Mentraposisikan 2 karakter yang bersebelahan. Salah satu cara untuk menemukan kesalahan-kesalahan di program adalah dengan menghitung jumlah transformasi kesalahan minimum yang diperlukan untuk mentransformasikan program yang salah menjadi program yang secara sintaks benar. 2.1.5 Input Buffering Perancangan analisis leksikal seharusnya dapat membuat buffering masukkan yang membantu mempercepat proses pembacaan dari file serta mempunyai fleksibelitas yang tinggi agar analisis leksikal tidak bergantung platform sehingga mempunyai portabilitas yang tinggi. 2.1.6 Contoh Penerapan Analisis Leksikal Contoh 1 : Ada urutan karakter yang disebut dengan statement fahrenheit := 32 + celcius * 1.8, Maka akan diterjemahkan ke dalam token-token seperti di bawah ini : identifier operator integer operator penjumlahan identifier operator perkalian real/float fahrenheit := 32 + celcius * 1.8 2.

Olivia Pangeli

Page 4

Teknik Kompilasi Contoh 2 : Source Code Program (dalam Pascal)

Hasil Analisis Leksikal : identifier reserve word operator Contoh 3 : Setiap bentuk dari token direpresentasi sebagai angka dalam bentuk internal, dan angkanya adalah unik. Misalnya nilai 1 untuk variabel, 2 untuk konstanta, 3 untuk label, dan 4 untuk operator, dst. Contoh instruksi : Kondisi : IF A > B THEN C = D; Maka scanner akan mentransformasikan ke dalam token-token, sbb : Kondisi : IF A > B THEN C D ; 3 26 20 1 15 1 21 1 1 27 i, j, k var, integer, begin, clrscr, write, readln, writeln, for, end :=

Olivia Pangeli

Page 5

Teknik Kompilasi

2.2

ANALISIS SINTAKTIK

2.2.1 Pengertian Analisis Sintaktik Analisis Sintaktik bergantung pada bahasa pemrograman masing-masing. Karena setiap bahasa pemrograman memiliki betuk sintaks yang berbeda-beda. Analisis Sintaktik memiliki input yang berupa token yang berasal dari scanner dan source code. Analisis Sintaktik/Analisis Hirarki/Parsing adalah bagian kedua dari compiler yang bertugas memeriksa kebenaran dan urutan dari token-token yang terbentuk oleh analisis leksikal. Dalam tahap ini karakter atau token yang diperoleh pada analisis leksikal disusun dan dikelompokkan dalam suatu hirarki tertentu yang secara keseluruhan mempunyai arti tertentu.. Disinilah struktur program yang lebih besar diidentifikasi (statement, deklarasi, ekspresi, dan lainnya) menggunakan token leksikal yang dihasilkan analisis leksikal. Analisis sintaktik selalu bekerja bergantian dengan analisis semantik. Pertama, Analisis Sintaktik mengidentifikasikan urutan token leksikal seperti ekspresi, statement, subprogram, dan lainnya. Analisis Semantik kemudian dipanggil untuk proses unit ini. Analisis Sintaktik berfungsi menghasilkan pohon sintaks program sumber yang didefinisi grammar. Simbol terminal pohon sintaks adalah token-token yang dihasilkan scanner. Sebelum akhirnya kode eksekusi benar-benar dihasilkan. 2.2.2 Tugas-Tugas Analisis Sintaktik Tugas dari Analisis Sintaktik adalah : 1. 2. Pengelompokkan token-token ke dalam class sintaks (bentuk sintaks), seperti procedure, statement, dan expression. Grammar adalah sekumpulan aturan-aturan, untuk mendefinisikan bahasa sumber. Grammar dipakai oleh analisis sintaktik untuk menentukan struktur dari program sumber. Definisi formal dari grammar (T,N,S,R) : T : Himpunan simbol terminal N : Himpunan simbol non terminal S : Simbol awal yang unik, SeN R : Himpunan produksi dengan bentuk alpha betha, dimana alpha dan betha adalah kumpulan simbol non terminal dan terminal Proses pendeteksiannya (pengenalan token) disebut dengan parsing maka analisis sintaktik sering disebut dengan parser. Pohon sintaks yang dihasilkan digunakan untuk analisis semantik yang bertugas untuk menentukan maksud dari program sumber, misalnya operator
Page 6

3. 4.

Olivia Pangeli

Teknik Kompilasi penjumlahan maka analisis semantik akan mengambil aksi apa yang harus dilakukan. 2.2.3 Tata Bahasa Bebas Konteks CFG (Context Free Grammar) atau Bahasa bebas konteks adalah sebuah tata bahasa dimana tidak terdapat pembatasan pada hasil produksinya, contoh pada aturan produksi : ab batasannya hanyalah ruas kiri (a) adalah sebuah simbol variabel. Sedangkan contoh aturan produksi yang termasuk CFG adalah : B CdeFg D BcDe Sebuah tata bahasa bebas konteks adalah suatu cara yang menunjukkan bagaimana menghasilkan untai-untai dalam sebuah bahasa. Bahasa bebas konteks menjadi dasar dalam pembentukan suatu parser/proses analisis sintaktik. Bagian sintaks dalam suatu kompilator kebanyakan didefinisikan dalam tata bahasa bebas konteks. 2.2.4 Pohon Sintaks Pohon sintaks/pohon penurunan berguna untuk menggambarkan bagaimana memperoleh suatu string dengan cara menurunkan simbol-simbol variabel menjadi simbolsimbol terminal. Setiap simbol variabel akan diturunkan menjadi simbol-simbol terminal, sampai tidak ada yang belum tergantikan. Sebuah pohon (tree) adalah suatu graph terhubung tidak sirkuler, yang memiliki satu simpul (node)/vortex yang disebut akar (root) dan dari situ memiliki lintasan ke setiap simpul. Misalkan sebuah tata bahasa bebas konteks memiliki aturan produksi sebagai berikut: S aB | bA A a | aS | bAA B b | bS | aBB

Olivia Pangeli

Page 7

Teknik Kompilasi Pohon penurunan untuk memperoleh aaabbabbba adalah : S a a a B b B B B b a S B b Proses penurunan atau parsing bisa dilakukan dengan cara sebagai berikut : 1 2 Penurunan Terkiri (leftmost derivation) : simbol variabel yang paling kiri yang diturunkan terlebih dahulu. Penurunan Terkanan (rightmost derivation) : simbol variabel yang paling kanan yang diturunkan terlebih dahulu. B b b S A a

Contoh : Ingin dihasilkan string aabbaa dari : S aAS | a A SbA | ba Penurunan kiri : Penurunan kanan : S => aAS => aSbAS => aabAS => aabbaS => aabbaa S => aAS => aAa => aSbAa => aSbbaa => aabbaa

2.2.5 Metode Parsing Metode Parsing perlu memperhatikan 3 hal, yaitu waktu eksekusi, penanganan masalah, dan penanganan kode. Berdasarkan metodenya, Parsing digolongkan menjadi : Top-Down Penelusuran dari root ke leaf atau dari simbol awal ke simbol terminal, metode ini meliputi : Backtrack/backup : Brute Force No Backtrack : Recursive Descent Parser Bottom-Up Metode ini melakukan penelusuran dari leaf ke root

Olivia Pangeli

Page 8

Teknik Kompilasi Contoh : S aABe A Abc | b Bd Maka untuk string abbcde Abbcde => aAbcde => aAde => aABe => S Parsing : BRUTE FORCE Memilih aturan produksi mulai dari kiri Mengexpand simbol non terminal sampai pada simbol terminal Bila terjadi kesalahan (string tidak sesuai) maka akan dilakukan backtrack Algoritma ini membuat pohon parsing secara top-down, yaitu dengan cara mencoba segala kemungkinan untuk setiap simbol non-terminal Contoh suatu bahasa dengan aturan produksi sebagai berikut : S aAd | aB Ab|c B ccd | ddc Misal ingin dilakukan parsing untuk string addc (i) S (ii) S (iii) S a A d a A b Terjadi kegagalan (iii), dilakukan backtrack (iv) S (v) S (vi) a A d a B a S B d

c Terjadi kegagalan lagi (v), dilakukan backtrack Kelemahan Metode BRUTE FORCE :

Mencoba untuk semua aturan produksi yang ada sehingga waktu eksekusi menjadi lambat Mengalami kesukaran untuk melakukan pembetulan kesalahan Banyak memakan memori, karena membuat backup lokasi backtrack Grammar yang memiliki rekursif kiri, tidak bisa diperiksa karena akan memngalami loop yang terus menerus. Sehingga rekursif kiri harus diubah terlebih dahulu. Kalaupun tidak mungkin menghilangkan rekursif kiri dalam penyusunan aturan produksi maka produksi rekursif kiri diletakkan pada bagian belakang atau terkanan, hal ini untuk menghindari looping pada awal proses parsing. Metode ini digunakan untuk aturan produksi yang memiliki alternatif yang sedikit.
Olivia Pangeli Page 9

Teknik Kompilasi Parsing : RECURSIVE DESCENT PARSER Salah satu cara untuk mengaplikasikan bahasa bebas konteks Simbol terminal maupun simbol variabelnya bukan sebuah karakter Besaran leksikal sebagai simbol terminalnya, besaran sintaks sebagai simbol variabelnya/non-terminalnya Dengan cara penurunan secara rekursif untuk semua variabel dari awal sampai ketemu terminal Tidak pernah mengambil token secara mundur (backtracking) Beda dengan turing yang selalu maju dan mundur dalam melakukan parsing

2.3

ANALISIS SEMANTIK

Disini dilakukan pengecekan pada struktur akhir yang telah diperoleh dan diperiksa kesesuainnya dengan komponen program yang ada. Merupakan pusat dari tahapan translasi, struktur sintaktik yang dikenali oleh Analisis Sintaktik diproses, dan struktur objek eksekusi sudah mulai dibentuk. Analisis Semantik kemudian menjadi jembatan antara analisis dan sintesis dari translasi. Analisis Semantik menghasilkan suatu kode objek yang dapat dieksekusi dalam translasi sederhana, tetapi biasanya bentuk dari kode objek yang dapat dieksekusi ini merupakan bentuk internal dari final program eksekusi, yang kemudian dimanipulasi oleh tahap optimisasi dari translator sebelum akhirnya kode eksekusi benar-benar dihasilkan.

Olivia Pangeli

Page 10

Teknik Kompilasi
BAB III

PENUTUP

3.1

Kesimpulan

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. Secara umum proses dalam tahap analis terdiri dari 3 bagian utama, yaitu : 1 Proses analisis leksikal Merupakan antarmuka antara kode program sumber dan analisis sintaktik yang bertugas mengubah program sumber menjadi token, mengerjakan pengelompokkan urutan-urutan karakter ke dalam komponen pokok, dan menangani kerumitan sistem masukan/keluaran. 2 Proses analisis sintaktik Adalah bagian kedua dari compiler yang bertugas memeriksa kebenaran dan urutan dari token-token yang terbentuk dari analisis leksikal yang kemudian disusun dan dikelompokkan dalam suatu hirarki tertentu yang secara keseluruhan mempunyai arti tertentu. 3 Proses analisis semantik Disini dilakukan pengecekan pada struktur akhir yang telah diperoleh dan diperiksa kesesuaiannya dengan komponen program yang ada. Untuk tahap sintesis dapat dibagi menjadi 2 proses : 1. Code generator 2. Code optimizer

Olivia Pangeli

Page 11

Teknik Kompilasi

DAFTAR PUSTAKA

http://ti08530370.blogspot.com/2010/04/parse-dan-pohon-sintaks.html http://dewisucisetiani.files.wordpress.com/2012/10/tugas-sistem-informasi-kelompok-7.pdf http://id.wikipedia.org/wiki/Analisis_leksikal http://debyo.staff.gunadarma.ac.id/Downloads/files/31385/Handout+Kompilasi+2.pdf Utdirartatmo, Firrar. Maret 2005. Teori Bahasa dan Otomata, Yogyakarta, Graha Ilmu.

Olivia Pangeli

Page 12

Anda mungkin juga menyukai