PERANCANGAN SISTEM PERBAIKAN ERROR KODE SUMBER PROGRAM OTOMATIS

dokumen-dokumen yang mirip
SINTAKS. Sintaks dari bahasa pemrograman di defenisikan dengan 2 kumpulan aturan, yaitu:

ALGORITMA PEMROGRAMAN 1C SINTAKS

SINTAKS. Sintaks dari bahasa pemrograman di defenisikan dengan 2 kumpulan aturan, yaitu:

Teknik Kompilasi. Notasi Bahasa

Hirarki Comsky. Unrestricted. Context Sensitive Context free Regular

Tujuan perancangan bhs program

Aplikasi Rekursif dalam Analisis Sintaks Program

Alat bantu (tools) dalam pembuatan parser/ analisis sintaksis. Menggunakan simbol persegi panjang untuk non terminal

Grammar dan Tingkat Bahasa

TEKNIK KOMPILASI Konsep & Notasi Bahasa

EKSPRESI REGULAR PADA SUATU DETERMINISTIC FINITE STATE AUTOMATA

PERANCANGAN DAN PEMBUATAN SISTEM VALIDASI XHTML 1.0

TEORI BAHASA DAN AUTOMATA

TEKNIK KOMPILASI Bahasa Regular

TEORI BAHASA DAN OTOMATA [TBO]

Teknik Kompiler 5. oleh: antonius rachmat c, s.kom, m.cs

UNIVERSITAS GUNADARMA

Komponen sebuah Kompilator

PENDAHULUAN. Terdapat tiga topik utama di teori otomata yaitu:

PENGEMBANGAN PROTOTIPE APLIKASI KONVERSI KODE DARI BAHASA C KE PASCAL

TEKNIK KOMPILASI. Dosen : Dwi Retno Wahyuningsih, S. Kom. Jurusan : Teknik Informatika Semester Genap 2007/2008

Pemodelan CNF Parser dengan Memanfaatkan Pohon Biner

BAB II SINTAKS 2.1. SINTAKS

SATUAN ACARA PERKULIAHAN (SAP) Semester Penempatan

SATUAN ACARA PERKULIAHAN STMIK UBUDIYAH INDONESIA SEMESTER GENAP TAHUN AKADEMIK 2013/2014

RENCANA PROGRAM KEGIATAN PERKULIAHAN SEMESTER (RPKPS)

Proses Kompilasi. Otomata dan Pengantar Kompulasi Pertemuan 3

TEORI BAHASA & OTOMATA (KONSEP & NOTASI BAHASA) PERTEMUAN IX Y A N I S U G I Y A N I

Tata Bahasa Kelas Tata Bahasa. Konsep Bahasa (1)

TEKNIK KOMPILASI Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 1

Analisis Sintaksis (syntactic analyzer atau parser)

Sumarni Adi TEKNIK INFORMATIKA STMIK AMIKOM YOGYAKARTA 2013

21/11/2016. Pohon Sintaks. Syntax?? Proses Penurunan. Analisis Syntax (Parser) Metode Parsing ANALISIS SINTAKS TEKNIK KOMPILASI

PENGANTAR OTOMATA DAN KOMPILASI

Teori Komputasi 10/15/2015. Bab 1: Pendahuluan. Teori Komputasi dan Teknik Kompilasi. Teori Komputasi dan Teknik Kompilasi

FTIK / PRODI TEKNIK INFORMATIKA

LANGUAGES AND TRANSLATOR

Syntax, Semantic & Grammar. Konsep Bahasa Pemrograman Materi 3 Yudianto Sujana, M.Kom

TEKNIK KOMPILASI PERTEMUAN Ke 4 dan 5 Abdul Muis Mappalotteng ANALISIS SEMANTIK

APLIKASI PROGRAM DINAMIS DALAM ALGORITMA COCKE- YOUNGER -KASAMI (CYK)

SILABUS MATAKULIAH. Indikator Pokok Bahasan/Materi Aktifitas Pembelajaran

Penyederhanaan Tata Bahasa Bebas Konteks dalam Bentuk Normal Chomsky Menggunakan PHP

IF-UTAMA 1. Definisi. Grammar. Definisi

BAB I PENDAHULUAN 1-1

BAB 1 PENDAHULUAN. sederhana adalah kelas bahasa reguler (regular languages). Bahasa reguler dapat dengan

Sebuah bahasa dinyatakan regular jika terdapat finite state automata yang dapat menerimanya. Bahasa-bahasa yang diterima oleh suatu finite state

GARIS-GARIS BESAR PROGRAM PENGAJARAN (GBPP)

Teknik Kompiler 12. oleh: antonius rachmat c, s.kom

Teori Bahasa dan Otomata

BAB II TINJAUAN PUSTAKA. Bahasa menurut kamus Websters adalah the body of words and methods of

TEKNIK KOMPILASI. Dosen : Dwi Retno Wahyuningsih, S. Kom. Jurusan : Teknik Informatika Semester Genap 2007/2008

SEMANTIK Syntax mendefinisikan suatu bentuk program yang benar dari suatu bahasa.

TEORI BAHASA & OTOMATA (PENGENALAN KOMPILASI) PERTEMUAN VI Y A N I S U G I Y A N I

MK. PEMROGRAMAN SISTEM Semester/SKS : 6/3 COMPILER. Jurusan Sistem Komputer S1 Universitas Gunadarma

TEKNIK KOMPILASI. Firrar Utdirartatmo

Teknik Kompilasi Dosen: Utami Dewi W.,S.Kom

Teknik Kompilasi II TEKNIK KOMPILASI. Ernastuti & Sulistyo P 1/52. Ernastuti & Sulistyo

Dasar Teori Bahasa & Grammar

BAB VI CARA PENANGANAN KESALAHAN

TEORI BAHASA DAN OTOMATA [TBO]

1 Pengujian Intent Recognition dalam mengenali struktur dasar bahasa C tanpa kesalahan. Kode Keterangan Status *) #include <stdio.

Pengenalan Konsep Bahasa dan

Teori Bahasa Formal dan Automata

Parsing. A -> a as baa B -> b bs abb

BAB V CONTEXT FREE GRAMMAR DAN PUSH DOWN AUTOMATA

TEORI BAHASA & OPERASI MATEMATIS (2)

SEMANTIK. Sintak mendifinisikan suatu bentuk program yang benar dari suatu bahasa.

Aplikasi Pengubah Bentuk Normal Chomsky Menjadi Bentuk Normal Greibach dengan Metode Substitusi

TEKNIK KOMPILASI Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 16

BAB 1 PENDAHULUAN 1.1. Latar Belakang Masalah

Fase-fase proses sebuah kompilasi

Bab 1 Pendahuluan 1.1 Latar Belakang

TEORI BAHASA DAN OTOMATA [TBO]

BAB I PENDAHULUAN 1.1 Latar Belakang

GARIS-GARIS BESAR PROGRAM PENGAJARAN (GBPP)

Teknik Kompiler 6. oleh: antonius rachmat c, s.kom

Overview. Pendahuluan. Pendahuluan. Pendahuluan. Pendahuluan. Pendahuluan

TEORI BAHASA DAN OTOMATA [TBO]

3.1. Definisi Syntax Syntax suatu bahasa pemrograman adalah satu himpunan

BAB 1 PENDAHULUAN. 1.1 Latar Belakang Masalah

Teknik Informatika PERTEMUAN 2. TEORI BAHASA & OTOMATA Imam Riadi, M.Kom Shofwatul Uyun, M.Kom. Teknik Informatika

SATUAN ACARA PERKULIAHAN MATA KULIAH : TEORI BAHASA DAN AUTOMATA (TBA) KODE / SKS : KK / 3 SKS

Bahasa adalah kumpulan kalimat. Kalimat adalah rangkaian kata. Kata adalah komponen terkecil kalimat yang tidak bisa dipisahkan lagi.

PENYEDERHANAAN Context Free Grammar

SATUAN ACARA PERKULIAHAN (SAP)

BAB II TINJAUAN PUSTAKA. konsep, fakta, termasuk simbol simbol serta aturan agar mempunyai makna.

BAHASA SUMBER. DEFINISI bahasa sumber

RENCANA PEMBELAJARAN SEMESTER (Kelas Teori)

Teori Bahasa & Otomata

SEMANTIK. Int vector[10];

KOMPILASI. Assembler Bahasa Rakitan Bahasa Mesin Compiler (Kompilator) Bahasa Tingkat Tinggi Bahasa tingkat rendah

Ekspresi Reguler Definisi. Notasi Ekspresi Regular. Contoh Ekspresi Reguler [2]

BAB II DASAR TEORI. 2.1 Kompilator

SATUAN ACARA PERKULIAHAN (SAP) MATA KULIAH PENGANTAR TEKNIK KOMPILASI

PENDEKATAN TEORI AUTOMATA UNTUK MENYELESAIKAN APLIKASI-APLIKASI DI BIDANG ILMU KECERDASAN BUATAN

anggota alfabet dinamakan simbol terminal atau token.

Teori Bahasa & Otomata

MODEL KOMPILATOR FUNGSI UMUM BAGIAN KOMPILATOR. Dosen Pengampu: Utami Dewi Widianti,S.Kom

TEKNIK KOMPILASI. Alamat untuk tugas: Informasi: DADANG MULYANA. dadang mulyana 2013

PERTEMUAN 2 ALGORITMA & PEMROGRAMAN

Transkripsi:

PERANCANGAN SISTEM PERBAIKAN ERROR KODE SUMBER PROGRAM OTOMATIS Bondan Himawan, Indrato, Taufiq Hidayat, Yudi Prayudi Jurusan Teknik Informatika, Fakultas Teknologi Industri, Universitas Islam Indonesia neojavanese@gmail.com, indra_adv@yahoo.com, taufiqhid@fti.uii.ac.id, prayudi@fti.uii.ac.id. ABSTRACT The goal of this research is to design a system enable the compiler or editor to continue the analysis of imperfect source codes even after errors are detected. This allows to discover more errors in the analysis process, such as lexical analysis and syntax analysis, and provides solutions for the errors. There is a technique to repair error, including the try and error mechanism. The try and error mechanism is a method that subtitutes errors with correct solutions, one by one. Keywords: Source Code, Lexical Analyist, Syntax Analysis, Error, Error Repairment, Try and Error Mechanism. 1. Pendahuluan 1.1 Latar Belakang Bahasa pemrograman komputer adalah sebuah bahasa kecerdasan yang digunakan untuk mengontrol kelakuan mesin, khususnya computer (en.wikipedia.org, 2007). Layaknya sebuah bahasa manusia, bahasa pemrograman komputer didefinisikan melalui syntax dan semantic. Syntax adalah tata-cara penggunaan sebuah bahasa, sedangkan semantic merupakan alur logika dari bahasa yang digunakan. Kedua aturan tersebut harus selalu diperhatikan ketika suatu bahasa pemrograman digunakan dalam berinteraksi dengan mesin. Dalam dunia komputer, bahasa pemrograman dibagi menjadi dua macam, yaitu bahasa pemrograman tingkat rendah, dan bahasa pemrograman tingkat tinggi. Bahasa tingkat rendah adalah bahasa yang sangat ringan, tanpa disertai abstraksi dari microprocessor tertentu (en.wikipedia.org, 2007). Dengan demikian, perangkat lunak yang dibuat dengan bahasa tersebut, pada umumnya hanya mendukung CPU / microprocessor tertentu. Dukungan yang terbatas pada CPU tertentu membuat cara lain dalam membuat perangkat lunak terus dilakukan. Salah satunya yaitu dengan mengenalkan penggunaan bahasa tingkat tinggi. Untuk dapat berinteraksi dengan mesin, bahasa tingkat tinggi menggunakan penerjemah, yang disebut dengan compiler. Pada akhirnya, bahasa tingkat tinggi menjadi sangat populer, dengan diciptakannya berbagai macam bahasa, dan digunakan di hampir seluruh perangkat lunak yang ada. Bahasa tingkat tinggi mempunyai banyak keuntungan, antara lain lebih portable, memuat banyak abstraksi tentang CPU komputer, sehingga dapat digunakan untuk komputer dengan CPU yang berbeda dan lebih mudah untuk digunakan. Walaupun demikian, menggunakan bahasa komputer tidak semudah menggunakan bahasa manusia, karena bahasa komputer memiliki aturan yang kaku dan pendeklarasian juga harus jelas. Pengguna harus selalu menaati aturan dari bahasa komputer. Jika tidak, maka proses kompilasi akan gagal. Salah satu solusi untuk menangani masalah tersebut yaitu dengan memberi kecerdasan kepada penerjemah ataupun editor program untuk dapat memperbaiki setiap kesalahan kode sumber program yang terjadi. 1.2 Tujuan Penulisan Sistem perbaikan kode sumber program otomatis bertujuan untuk merancang sebuah sistem yang mampu memperbaiki setiap kesalahan penulisan program sehingga hasil keluaran dari sistem dapat berupa sebuah kode sumber program yang telah diyakini kebenarannya. 2. Dasar Teori 2.1 Language Menurut Wirth (Wirth, 2006), bahasa diformulasikan sebagai : 1. Himpunan dari terminal symbol. Terminal Symbol adalah sebuah simbol yang sudah tidak bisa diturunkan, atau diganti oleh simbol yang lain (Utdiratratmo, 2001). Terminal symbol ditandakan dengan sepasang tanda kutip dalam setiap string, seperti ), dan lain-lain. 2. Himpunan Nonterminal symbol. Ditandakan sebagai kelas syntax dan dapat disubtitusikan dengan symbol yang lain. Nonterminal Symbol diidentifikasikan oleh sebuah urutan dari huruf, atau angka, yang berupa sebuah ekspresi, atau istilah. 3. Himpunan dari persamaan syntax, atau sering disebut dengan production. Production merupakan pusat dari tata bahasa yang menspesifikasikan bagaimana suatu tata bahasa melakukan transformasi (Utdirartatmo, 2001). Production didefinisikan sebagai sebuah kemungkinan subtitusi dari nonterminal symbol. 4. Start Symbol, adalah sebuah nonterminal symbol yang menandakan dimulainya sebuah sentence. 2.2 Reguler Language Bahasa reguler adalah bahasa yang mendefinisikan koleksi bahasa-bahasa atas sebuah abjad (Kelly, 1999). Bahasa reguler dapat digunakan untuk menspesifikasikan konstruksi analisis lexical, yaitu program yang memindai teks dan 264

mengeksak ikhtisar lexemes atau unit-unit lexical (seperti token) di dalamnya. Misalkan merupakan sebuah abjad, koleksi dari bahasa-bahasa reguler atas didefinisikan secara rekursif sebagai berikut : a. Ø adalah sebuah bahasa reguler. b. {ε} adalah sebuah bahasa reguler. c. Untuk setiap a, {a} adalah bahasa reguler. d. Jika A dan B adalah bahasa reguler maka A B, A.B dan A* adalah bahasa reguler. e. Tidak ada bahasa-bahasa lain atas yang reguler. Artinya, koleksi dari bahasa-bahasa reguler atas terdiri dari bahasa kosong, semua bahasa sigleton, termasuk {ε}, dan semua bahasa yang dibentuk oleh operasi-operasi bahasa perangkaian, gabungan dan penutup bintang. Notasi-notasi yang digunakan untuk bahasa reguler adalah sebagai berikut : a) alternation, adalah pipeline untuk memisahkan sebuah alternatif. Contoh : gray grey : gr(a e)y b) grouping, adalah tanda kurung yang digunakan untuk mendefinisikan jangkauan dan hak dari setiap operator. c) quantification. terdiri dari beberapa quantifier, yaitu?, *, dan +. a.? mengindikasikan bahwa 0 atau 1 sesuai dengan ekspresi sebelumnya. b. * mengindikasikan bahwa 0, 1 atau bilangan yang lain sesuai dengan ekspresi sebelumnya. c. + mengindikasikan bahwa terdapat minimal 1 yang sesuai dengan ekspresi sebelumnya. 2.3 Context-free Grammar Context-free grammar (CFG) adalah bahasa formal dalam setiap peraturan produksi. Secara umum CFG disimbolkan dengan : V w dengan V adalah symbol nonterminal dan w adalah string dari terminal atau nonterminal, atau dapat juga sebagai string kosong Ø. Context-free grammar dibagi menjadi empat tuple, yaitu : G = (V,, R, S) dimana : G adalah sebuah himpunan berhingga dari variabel nonterminal. adalah himpunan berhingga dari terminal dimana V = Ф S adalah variabel awal, yang memulai sebuah himpunan. R adalah sebuah relasi dari V untuk (V ). Anggota R disebut dengan aturan dari grammar. 3. Pembahasan 3.1 Desain Sistem Sistem adalah suatu kesatuan yang terdiri komponen-komponen yang saling berhubungan dan bekerja bersama-sama untuk melaksanakan sebuah fungsi tertentu. Sebagai sebuah sistem, sistem perbaikan kode sumber program otomatis menerima input berupa kode sumber program dan akan menghasilkan sebuah kode sumber program yang sudah diyakini kebenarannya. Gambar 1. Desain Umum Sistem Secara umum, sistem dapat dijadikan menjadi dua bagian. Bagian pertama disebut dengan condensation phase, yaitu pencarian kesalahan pada kode sumber input dan meninggalkan tanda kesalahan sebagai log kesalahan. Bagian kedua disebut dengan correction phase, yaitu proses mengganti setiap kesalahan yang telah diidentifikasikan pada log kesalahan dengan string yang sesuai. Condensation phase terdiri dari lexycon analyzer, syntax analyzer dan validator, sedangkan correction phase terdiri dari satu komponen, yaitu error recovery. 265

Gambar 2. Desain Proses Pengecekan dan Perbaikan Kesalahan dalam Sistem Input dari sistem ini adalah formal grammar, vocabulary, regular expression, dan kode sumber yang akan diperiksa. Input akan dijadikan sebagai basis pengetahuan bagi sistem dalam melakukan analisa dan perbaikan kode sumber. Kode sumber program yang dimasukkan sebagai input, akan diolah dalam condensation phase. Condensation phase atau disebut juga sebagai front- end phase merupakan sebuah fase untuk mencari semua error dalam input yang diberikan. Karena output dari fase kondensasi ini berupa error yang telah terakumulasi, maka fase ini sering disebut dengan error production (Jain, 2004). Pada fase ini, input akan diparsing berdasarkan formal grammar. Sebagai output, token-token hasil parsing dari condensation phase akan dikirimkan ke repairment phase. Token-token ini disebut error token. Log kesalahan akan digunakan oleh repairment phase sebagai tanda dari setiap kesalahan yang dihasilkan dari condensation phase. Aturan-autran dalam formal grammar merupakan hasil input sehingga dapat menganalisa setiap bahasa pemrograman tingkat tinggi. Correction phase akan mengolah setiap output hasil dari condensation phase dan akan memperbaikinya berdasarkan pada formal grammar. Error recovery merupakan sebuah penanganan error yang dilakukan oleh sistem, supaya proses tidak berhenti ketika menemukan error. Dalam sistem ini, error recovery akan dilakukan di seluruh proses. Untuk mencegah berhentinya sistem ketika menangani kesalahan, ada beberapa pendekatan yang digunakan. Menurut Jain (Jain, 2004) setidaknya terdapat lima pendekatan untuk error recovery. Lima pendekatan tersebut adalah pendekatan Modry pada tahun 1978; Graham, 1979; Sippu 1983; McKenzie, 1995; dan Bertsch tahun 1999. Dari kelima pendekatan tersebut, menurut Jain pendekatan yang paling efisien untuk LR Parsing adalah pendekatan Bertsch. Pendekatan Bertsch merupakan pendekatan dengan mengumpulkan semua error dan kemudian melanjutkan proses analisa. Gambar 3. Alur System 266

Sistem akan menjalankan banyak perulangan. Hal ini dikarenakan output dari sistem akan memasuki fase source code validator. Source code validator adalah sebuah komponen yang berfungsi untuk memeriksa kelayakan dari output sistem. Source code validator dapat berupa seorang pengguna yang melakukan proses perbaikan ataupun suatu komponen yang tergabung dengan sistem. Tujuan dari source code validator adalah untuk menghasilkan kode sumber yang sesuai dengan yang dibutuhkan. 3.2 Input Grammar dan Regular Expression Grammar didefinisikan sebagai kumpulan dari himpunan-himpunan variabel, simbol-simbol terminal, simbol awal, yang dibatasi oleh aturan-aturan produksi (Utdirartatmo, 2001). Grammar akan dijadikan sebagai sebuah input untuk mendefinisikan aturan-aturan yang berlaku pada sistem. Berdasarkan pembatasan hierarki Chomsky, input grammar yang digunakan terbatas pada context-free language. Input grammar ini akan digunakan untuk menganalisa syntax, dan digunakan juga dalam perbaikan error/ error repairment. Formal grammar menggunakan data-data dari vocabulary sebagai sumber pengetahuannya. Kamus merupakan daftar dari seluruh fungsi-fungsi dan segala atribut dari bahasa pemrograman, yang dijadikan sebagai basis pengetahuan bagi sistem untuk melakukan analisa dan perbaikan kesalahan, selain grammar itu sendiri. Sebagai input dari analisa lexicon, digunakan regular expression atau regex. Regular expression merupakan format ekspresi untuk mendeskripsikan aturan-aturan dalam proses scanning. Regex memberikan deskripsi singkat dari sebuah himpunan tanpa mendaftarkan keseluruhan elemen dari himpunan tersebut (en.wikipedia.org, 2007). Format input regex, berupa bahasa reguler dengan notasi-notasinya. Untuk pengembangan sistem, kedua input aturan ini, akan digunakan format yang sama, yaitu XML, Extensible Markup Language. 3.3 Lexical Analysis Analisis Lexicon adalah proses mengubah karakter-karakter menjadi urutan dari simbol-simbol dari kamus suatu bahasa yang sesuai (Wirth, 2005). Urutan dari simbol-simbol disebut sebagai token. Token adalah blok-blok dari text yang telah terkategorisasi, seperti keyword, identifier dan symbol name. Istilah token sering disebut dengan lexemes (en.wikipedia.org, 2007). Analisis lexicon, akan memproses lexemes ke dalam kategori yang sesuai dengan input kamus, yang memberikan arti fungsi tertentu. Biasanya untuk proses analisis lexicon, digunakan regular expression. Regular expression adalah ekspresi-ekspresi yang dideskripsikan dalam himpunan string, yang berguna untuk mengolah dan memanipulasinya. Untuk menganailisi lexicon, analyzer menggunakan lexical grammar untuk mendeklarasikan aturanaturan, khususnya expressed syntax, atau menspesifikasikan himpunan urutan karakter yang memungkinkan untuk pembentukan token. Karakter whitespace akan diabaikan selama analisis lexical. Regular Expression Scanner Tokennizer Lexer Generator or Error Gambar 4. Rangkaian Proses Dalam Analisis Lexical Lexical Analyzer membaca input dalam sebuah aliran lexemes dan mengkategorikannya dalam token, yang disebut sebagai tokenizing. Terdapat tiga proses untuk melakukan tokenizing. Pertama adalah proses scanner. Proses ini akan mengkodekan stream input sebagai sebuah informasi yang memungkinkan dalam pengurutan karakter-karakter. Proses ini didasarkan pada finite state machine. Proses kedua adalah tokenizer. Tokenizer adalah proses membatasi dan mengklasifikasikan bagian-bagian dari karakter input. Proses terakhir adalah lexer generator. 3.4 Syntax Analysis Analisis Syntax atau disebut dengan parsing adalah proses menganalisis sebuah urutan lexemes untuk menentukan struktur grammaticall (en.wikipedia.org, 2007). Pada fase ini, akan dibuat sebuah struktur data, yang biasanya berbentuk tree, berdasarkan token-token, sesuai dengan aturan formal grammar. Input analisis syntax berupa token-token hasil pengolahan analisis lexical. Dalam analisis syntax, token-token tersebut akan diparsing ke dalam sebuah struktur data tree. Terdapat dua tipe parsing, yaitu top-down parsing dan buttom-up parsing. Top-down parsing adalah teknik parsing dengan mengutamakan pendefinisian sebuah permasalahan, dilanjutkan dengan pemeriksaan satu-per satu komponennya. Cara ini disebut juga dengan helicopter view (Klint, 2006). Contoh dari top-down parsing adalah LL Parser. Sedangkan bottom-up parsing merupakan metode parsing yang mencoba untuk mengidentifikasi unit-unit fundamental terlebih dahulu dan dilanjutkan dengan struktur-struktur yang lebih tinggi. Teknik yang mengimplementasikan metode ini adalah LR Parser. Alasan mengapa digunakan LR Parser karena LR Parser lebih efisien dibandingkan dengan LL Parser. Selain itu, pengecekan dari kiri ke kanan yang dilakukan LR Parser, akan mendeteksi kesalahan syntax sesegera mungkin. 267

Buttom-up Parsing dan LR Parser Buttom-up Parsing adalah mekanisme parsing dengan menganalisis data-data terkait yang tidak diketahui dengan cara mencoba untuk mengidentifikasikan unit-unit terpenting, dan kemudian unit-unit di atasnya (en.wikipedia.org, 2007). Dalam struktur tree, analisa dilakukan dengan cara menaik, dari simbol terminal hingga simbol start (S). Sebagai metode yang digunakan dalam buttom-up parsing adalah LR Parser. Context-free Grammar Lexemes LR Parser Tree Table or Error Gambar 5. Mekanisme Parsing 3.5 Validasi Tree table yang dihasilkan dalam proses parsing akan divalidasi kebenarannya oleh validator. Tujuan dari komponen validasi ini adalah memeriksa urutan dari setiap proses dan kemudian melanjutkannya dalam proses perbaikan kesalahan. Selain itu, validasi akan memeriksa kebenaran urutan pendeklarasian kode sumber. Proses validasi akan mengeluarkan error dan kode sumber yang dikirimkan ke proses perbaikan. 3.6 Log Perbaikan Log perbaikan berguna untuk memberikan informasi kepada pengguna bahwa perbaikan kode sumber yang dikompilasi telah dilakukan. Log perbaikan ini memberikan beberapa informasi mengenai baris, dan identifier-identifier yang lain yang telah mengalami perbaikan. 3.7 Perbaikan Kesalahan Formal grammar dan vocabulary digunakan dalam proses ini sebagai basis pengetahuan, sedangkan log kesalahan digunakan untuk memberi tanda bahwa kode sumber terdapat kesalahan. Kesalahan yang terdapat dalam log kesalahan, akan diperbaiki sesuai dengan baris dan jenis kesalahan yang diinformasikan pada log kesalahan. Vocabulary akan memberikan solusi identitas yang tepat bagi kesalahan, berdasarkan analisis syntax dan grammar-nya. Grammar + Vocabulary Source Code Error Repairment true Source Code log Error Gambar 6. Mekanisme Perbaikan Kesalahan Metode yang digunakan dalam proses perbaikan adalah metode try and error. Metode ini akan mencoba satu per satu setiap kemungkinan solusi yang digunakan. Kekurangan dari metode ini adalah apabila kemungkinan solusi yang didapatkan banyak, maka waktu yang digunakan untuk proses perbaikan juga akan semakin lama. Prosesnya, setiap kesalahan dalam log error akan didefinisikan dalam local error (ε). Local error adalah error yang telah dibagi menjadi beberapa sub error dari kode sumber masukan. Jika G adalah grammar dan V adalah himpunan vocabulary dan Q adalah solusi dari kesalahan, maka dapat dinotasikan dengan Q = sub (ε, V, G), dengan sub adalah proses mengganti bagian kesalahan dengan perbaikannya berdasarkan grammar dan vocabulary. Jika V = Ø maka operasi Q = add (ε, G) atau Q=del (ε, G). Kompleksitas waktu perbaikan tergantung dari V. Jika V banyak maka kompleksitas waktu juga akan meningkat, jika V sedikit maka kompleksitas waktu yang dihasilkan juga sedikit. 4. Kesimpulan Sistem perbaikan error kode sumber program otomatis ini berfungsi mengembalikan kebenaran kode sumber program, sehingga dapat masuk dalam proses kompilasi tanpa harus memperbaiki kesalahan yang ada. Ada beberapa kekurangan dari sistem ini, yaitu sistem tidak mengetahui keinginan pengguna/pembuat program. Dengan demikian, akan terjadi ketidak sesuaian antara pengguna dengan sistem. Permasalahan ini dapat diselesaikan dengan memberikan beberapa pilihan ketika sistem akan melakukan proses perbaikan, yang nantinya akan dipilih oleh pengguna apa yang dirasa sesuai dengan tujuan pembuatan program. Kedua, waktu yang dibutuhkan dalam proses perbaikan sangatlah lama. Hal ini disebabkan karena sistem akan melakukan perbaikan satu demi satu dari setiap kemungkinan solusi yang ada. Apabila terdapat banyak kemungkinan, maka akan berbanding lurus dengan waktu yang digunakan untuk proses perbaikan. Hal ini dapat diselesaikan dengan mengubah algoritma yang menangani suatu proses yang mempunyai banyak kemungkinan solusi, yaitu dengan menggunakan algoritma heuristik. 268

Daftar Pustaka [1] Compiler, http://en.wikipedia.org/wiki/compiler, diakses terakhir 25 Juli 2007. [2] Cooper, K., Kennedy, K., dan Torczon, L. (2006). Lexical Analysis Part II : Constructing a Scanner from Regular Expressions. http://www.owlnet.rice.edu/~comp412/lectures/l05lex2.pdf, diakses terakhir 25 Juli 2007. [3] Hilfinger, P. N. (2005). CS:164 Programming Languages and Compilers Class Notes #2: Lexical. http://www.cs.berkeley.edu/~hilfingr/cs164/public_html/lectures/note2.pdf diakses terakhir 25 Juli 2007. [4] Jain, V. (2004). Error Recovery in LR Parser. http://www.cs.sfu.ca/~vjain/personal/755report.pdf, diakses terakhir 26 Juli 2007. [5] Kelley, D. (1999). Otomata dan Bahasa-Bahasa Formal. Jakarta : PT. Prenhallindo [6] Klint, P. (2006). Syntax Analysis. http://homepages.cwi.nl/~daybuild/daily-books/./learning-about/syntaxanalysis/syntax-analysis.pdf, terakhir diakses 26 Juli 2007. [7] Utdirartatmo, F. (2001). Teori Bahasa dan Otomata.Yogyakarta : J&J Learning. [8] Wirth, N. (2005). Compiler Construction. http://www.oberon2005.ru/book/ccnw2005e.pdf. terakhir diakses 25 Juli 2007. 269