1ugas 8esume 1eknlk kompllasl nama Angga Padlwl[aya
MaLkul 1eorl 8ahasa AuLomaLa nlm 10109901
kelas ll17k $ a g e
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 siIat dan pemakaiannya agak spesiIik 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 pendeIinisian 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
1ugas 8esume 1eknlk kompllasl nama Angga Padlwl[aya MaLkul 1eorl 8ahasa AuLomaLa nlm 10109901 kelas ll17k $ a g e
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) 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 Iile 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 pendeI
1ugas 8esume 1eknlk kompllasl nama Angga Padlwl[aya MaLkul 1eorl 8ahasa AuLomaLa nlm 10109901 kelas ll17k $ a g e
Kompilator (compiler) adalah sebuah program yang membaca suatu program yang ditulis dalam suatu bahasa sumber (source language) dan menterjemahkannya ke dalam suatu bahasa sasaran (target language). Proses kompilasi dapat digambarkan melalui sebuah kotak hitam (black box) berikut :
Proses kompilasi dikelompokkan ke dalam dua kelompok besar : 1. analisa : program sumber dipecah-pecah dan dibentuk menjadi bentuk antara (intermediate representation) 2. sintesa : membangun program sasaran yang diinginkan dari bentuk antara
Fase-Iase proses sebuah kompilasi adalah sebagai berikut :
1ugas 8esume 1eknlk kompllasl nama Angga Padlwl[aya MaLkul 1eorl 8ahasa AuLomaLa nlm 10109901 kelas ll17k $ a g e
Program sumber merupakan rangkaian karakter. Berikut ini hal-hal yang dilakukan oleh setiap Iase pada proses kompilasi terhadap program sumber tersebut : 1. Penganalisa leksikal : membaca program sumber, karakter demi karakter. Sederetan (satu atau lebih) karakter dikelompokkan menjadi satu kesatuan mengacu kepada pola kesatuan kelompok karakter (token) yang ditentukan dalam bahasa sumber. Kelompok karakter yang membentuk sebuah token dinamakan lexeme untuk token tersebut. Setiap token yang dihasilkan disimpan di dalam table simbol. Sederetan karakter yang tidak mengikuti pola token akan dilaporkan sebagai token tak dikenal (unidentified token). Contoh : Misalnya pola token untuk identifier I adalah : I huruf(hurufangka)*. Lexeme ab2c dikenali sebagai token sementara lexeme 2abc atau abC tidak dikenal. 2. Penganalisa sintaks : memeriksa kesesuaian pola deretan token dengan aturan sintaks yang ditentukan dalam bahasa sumber. Sederetan token yang tidak mengikuti aturan sintaks akan dilaporkan sebagai kesalahan sintaks (sintax error). Secara logika deretan token yang bersesuaian dengan sintaks tertentu akan dinyatakan sebagai pohon parsing (parse tree). Contoh : Misalnya sintaks untuk ekspresi if-then E adalah : E if L then, L IOA, I huruf(hurufangka)*, O ~~, A 01...9. Ekspresi if a2 9 then adalah ekspresi sesuai sintaks; sementara ekspresi if a2 9 do atau if then a2B 9 tidak sesuai. Perhatikan bahwa contoh ekspresi terakhir juga mengandung token yang tidak dikenal. 3. Penganalisa semantik : memeriksa token dan ekspresi dari batasan-batasan yang ditetapkan. Batasan- batasan tersebut misalnya : a. panjang maksimum token identifier adalah 8 karakter, b. panjang maksimum ekspresi tunggal adalah 80 karakter, c. nilai bilangan bulat adalah -32768 s/d 32767, d. operasi aritmatika harus melibatkan operan-operan yang bertipe sama. 4. Pembangkit kode antara : membangkitkan kode antara (intermediate code) berdasarkan pohon parsing. Pohon parse selanjutnya diterjemahkan oleh suatu penerjemah yang dinamakan penerfemah berdasarkan sintak (syntax-directed translator). Hasil penerjemahan ini biasanya merupakan perintah tiga alamat (three-address code) yang merupakan representasi program untuk suatu mesin abstrak. Perintah tiga alamat bias berbentuk quadruples (op, arg1, arg2, result), tripels (op, arg1, arg2). Ekspresi dengan satu argumen dinyatakan dengan menetapkan arg2 dengan - (strip, dash). 5. Pengoptimal kode : melakukan optimasi (penghematan space dan waktu komputasi), jika mungkin, terhadap kode antara. 6. Pembangkit kode : membangkitkan kode dalam bahasa target tertentu (misalnya bahasa mesin).
1ugas 8esume 1eknlk kompllasl nama Angga Padlwl[aya MaLkul 1eorl 8ahasa AuLomaLa nlm 10109901 kelas ll17k $ a g e
Berikut ini akan diberikan sebuah contoh skema penerjemahan suatu ekspresi dalam bahasa sumber, yaitu : position : initial rate * 60.
Keterangan : - id adalah token untuk identifier. Tiga lexeme untuk token ini adalah position, initial, dan rate. - penganalisa semantik secara logika membangkitkan pohon parse. - penganalisa semantik mendeteksi mismatch type. Perbaikan dilakukan dengan memanggil procedure inttoreal yang mengkonversi integer ke real. - 6uadruples dari : temp2 : id3 * temp1 adalah (*,id3,temp1,temp2), id1 : temp3 adalah (assign,temp3,- ,id1), temp1 : inttoreal(60) adalah (inttoreal,60,-,temp1). - pembangkit kode dalam contoh ini menghasilkan kode dalam bahasa mesin.