Proses Kompilasi. Otomata dan Pengantar Kompulasi Pertemuan 3

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

Pendahuluan. Kuliah online : Tekkom [2013/VI]

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

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

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

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

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

Pengayaan Software/Hardware dan Pengantarmukaan

TEKNIK KOMPILASI (TEKKOM) ISTIQOMAH, S.KOM /SEMESTER VI

BAB I PENGENALAN TEKNIK KOMPILASI

Pendahuluan. Tujuan Pembelajaran :

Compiler & Interpreter

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

PENGANTAR TEKNIK KOMPILASI

Algoritma dan Struktur Data

Hirarki Comsky. Unrestricted. Context Sensitive Context free Regular

Algoritma dan Struktur Data

ALGORITMA DAN PEMROGRAMAN #2

Fase-fase proses sebuah kompilasi

Learning Outcomes. akan mampu : (C3) perancangan compiler yang paling optimal (C4)

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

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

LAPORAN PRAKTIKUM 1 TEKNIK KOMPILASI

TEKNIK KOMPILASI. Firrar Utdirartatmo

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

TEKNIK KOMPILASI. Oleh. Hartono

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

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

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

TEKNIK KOMPILASI. Muhamad Nursalman Ilmu Komputer FPMIPA - UPI

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

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

Perjalanan sebuah intruksi

IT234 - Algoritma dan Struktur Data. Ramos Somya

LANGUAGES AND TRANSLATOR

Bab III Semantik. Konsep Semantik Bahasa Pemrograman (Semantik Analisis)

Web Site :

ALGORITMA PEMROGRAMAN 1C SEMANTIKS

BAB VI CARA PENANGANAN KESALAHAN

Aplikasi Rekursif dalam Analisis Sintaks Program

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

TUGAS MATA KULIAH TEKNIK KOMPILASI

Implementasi OOP Pada Perangkat Lunak Pemrograman

Pengantar dalam Bahasa Pemrograman Turbo Pascal Tonny Hidayat, S.Kom

PENGENALAN DASAR PEMROGRAMAN

Tabel Informasi. Hal di atas dapat dilakukan dengan menambah dan mengambil atribut identifier yang digunakan pada program, melalui tabel informasi.

DASAR PEMROGRAMAN. PENGANTAR BAHASA C ( Sejarah, Struktur Pemrograman, Tipe Data, Operator ) Djoko Soerjanto, M.Kom

ALGORITMA PEMROGRAMAN 1C SINTAKS

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

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

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

TEKNIK OPTIMASI. Dependensi Optimasi. Optimasi Lokal. Menghasilkan kode program dengan ukuran yang lebih kecil, sehingga lebih cepat eksekusinya.

Kesalahan Program dapat berupa

Pengantar Teknologi Informasi. Software Komputer

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

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

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN

PERTEMUAN 2 ALGORITMA & PEMROGRAMAN

Algoritma Pemrograman 2C

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

SEMANTIK. Int vector[10];

BAHASA KOMPUTER. Komunikasi antara manusia dengan komputer (HUMAN COMPUTER INTERACTION HCI)

PENGEMBANGAN PROTOTIPE APLIKASI KONVERSI KODE DARI BAHASA C KE PASCAL

BAB V ANALISA SEMANTIK

Tahap pengembangan program

COMPILER Aspek Kompilasi

Kesalahan Program Penanganan Kesalahan Reaksi Compiler Pada kesalahan Error Recovery Error repair

Teknik optimasi. Teknik optimasi kode program Tujuan: menghasilkan kode program yang berukuran lebih kecil dan lebih cepat pada saat dieksekusi.

Pengenalan Algoritma

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

Latihan Soal. Teknik Pemrograman

Teori Algoritma TIPE DATA

TEKNIK KOMPILASI Bahasa Regular

Dasar Pemrograman. Nisa ul Hafidhoh

ALGORITMA PEMROGRAMAN 1C PENDAHULUAN KONSEP BAHASA PEMROGRAMAN

Konsep Dasar Pemrograman

SMA SANTO PAULUS PONTIANAK

P3 Pengantar Pemrograman C

UNIVERSITAS BINA NUSANTARA. Program Ganda Teknik Informatika Matematika Skripsi Sarjana Program Ganda Semester Genap 2003/2004

Kuliah Online : TEKKOM [2013/VI]

BAB II DASAR TEORI. 2.1 Kompilator

PENGANTAR KOMPUTER & SOFTWARE I REPRESENTASI DATA

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

Bahasa Pemrograman- TIS SKS

TIPE DATA, VARIABLE, dan OPERATOR DELPHI

Pendahuluan. Komputasi Nuklir. 29 Oktober Komputasi Nuklir Pendahuluan 29 Oktober / 41

Gambar 1. Blok Utama Komputer

Programming Language Bahasa Pemrograman

Tujuan. Pengenalan. Pengenalan Pemrograman Komputer. Komponen Dasar pada Komputer : Hardware. Komponen Dasar pada Komputer : Hardware

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

1. Algoritma & Pemrograman

BUKU PETUNJUK PRAKTIKUM DASAR ALGORITMA DAN PEMROGRAMAN

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

Teknik Kompilasi. Notasi Bahasa

PEMAHAMAN DASAR DASAR JAVA

Kualitas bahasa pemrograman: Ekspresivitas : secara jelas menggambarkan algoritma yang dibuat oleh programmer

IT234 ALGORITMA DAN STRUKTUR DATA

PENDAHULUAN PEMROGRAMAN KOMPUTER. Mengapa Belajar Pemrograman Komputer?

Program. Instruksi-instruksi yang diberikan kepada komputer agar dapat melaksanakan tugas-tugas tertentu

PENGANTAR KOMPUTER & SOFTWARE I REPRESENTASI DATA

Transkripsi:

Proses Kompilasi Otomata dan Pengantar Kompulasi Pertemuan 3

Bahasa Pemrograman Bahasa pemrograman adalah bahasa yang menjadi sarana manusia untuk berkomunikasi dengan komputer. Pikiran manusia yang tidak terstruktur harus dibuat terstruktur agar bisa berkomunikasi dengan komputer. Komputer memerlukan kepastian dan logika yang benar untuk dapat melakukan suatu instruksi tertentu. Untuk itu diperlukan algoritma yg baik dan benar.

Jenis Bahasa Pemrograman menurut tingkat ketergantungan mesin Bahasa mesin Bahasa Assembly Bahasa tingkat tinggi Bahasa problem oriented

Bahasa Mesin Bahasa mesin adalah bahasa yang berisi kode-kode mesin yang hanya dapat diinterpretasikan langsung oleh mesin komputer. Bahasa mesin sering juga disebut native code (sangat tergantung pada mesin tertentu). Bahasa ini merupakan bahasa level terendah dan berupa kode biner: 0 dan 1. Sekumpulan instruksi dalam bahasa mesin dapat membentuk microcode (semacam prosedur dalam bahasa mesin). Keuntungan: Eksekusi cepat Kerugian: Sangat sulit dipelajari manusia Teknik Informatika UPNVY 4

Bahasa Assembly Bahasa assembly adalah bahasa simbol dari bahasa mesin. Setiap kode bahasa mesin memiliki simbol sendiri dalam bahasa assembly. Misalnya ADD untuk penjumlahan, MUL untuk perkalian, SUB untuk pengurangan, dan lain-lain. Sekumpulan kode-kode bahasa assembly dapat membentuk makroinstruksi. Bahasa assembly juga memiliki program pendebug-nya, tidak seperti bahasa mesin. Kelebihan: Eksekusi cepat, masih bisa dipelajari daripada bahasa mesin, file hasil sangat kecil Kekurangan: Tetap sulit dipelajari, program sangat panjang. Teknik Informatika UPNVY 5

procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:='hallo'; end;

Bahasa Tingkat Tinggi Bahasa ini lebih dekat dengan bahasa manusia. Bahasa inilah yang akan dibahas pada matakuliah ini. Bahasa ini juga memberikan banyak sekali fasilitas kemudahan pembuatan program, misalnya: variabel, tipe data, konstanta, struktur kontrol, loop, fungsi, prosedur dan lain-lain. Contoh: Pascal, Basic, C++, dan Java. Mendukung information hiding, enkapsulasi, dan abstract data type. Bahasa Tingkat tinggi memiliki generasi, misalnya generasi ke-3 (Pascal,C/C++) dan ( Foxpro generasi ke-4 (Delphi, VB, VB.NET, Visual Keuntungan: Mudah dipelajari, Mendekati permasalahan yang akan dipecahkan, Kode program pendek Kerugian: Eksekusi lambat Teknik Informatika UPNVY 7

Bahasa Problem Oriented Bahasa ini adalah bahasa yang digunakan langsung untuk memecahkan suatu masalah tertentu Misalnya SQL untuk database, Regex untuk mencocokkan pola pada string tertentu, dan MatLab untuk matematika Jenis bahasa ini juga masuk ke bahasa tingkat tinggi. Teknik Informatika UPNVY 8

Apa itu Compiler? Compiler (kompilator) adalah program untuk membaca suatu program lain yang ditulis dari suatu bahasa pemrograman (source program) dan menerjemahkanya ke bahasa pemrograman yang lain (target program). Umumnya source program dibuat dari bahasa pemrograman tingkat tinggi dan target program adalah program dalam bentuk bahasa mesin atau assembly. Sebuah kompilator hanya dapat menerjemahkan suatu bahasa pemrograman yang spesifik ke bahasa pemrograman yang spesifik pula.

Mutu Kompilator Kecepatan / waktu proses kompilasi, tergantung : Penulisan algoritma kompilator Kompilator pengkompilasi Mutu program object : Ukuran program object Kecepatan eksekusi program object Integrated Environment Adalah fasilitas-fasilitas terintegrasi yang dimiliki oleh kompiler. Misalnya untuk debugging, editing, dan testing. Contoh : bandingkan antara kompiler Pascal dan Clipper.

Language Processing System skeletal source program PREPROCESSOR source program COMPILER target assembly program ASSEMBLER relocatable machine code library, relocatable object files LOADER/LINK - EDITOR absolute machine code

Compiling Phase Lexical Analyzer Syntax Analyzer Analysis Sub-Phases Semantic Analyzer Intermediate Code Generator Code Optimizer Synthesis Sub-Phases Code Generator 12

Compiling Phase Error Handling Source Program Lexical Analysis Syntax Analysis Semantic Analysis Intermediate Code Generating Code Optimizing Code Generating Target Program Symbol Table Management Front End Back End

Compiling Phase : Analisa Leksikal Di dalam compiler, lexical analysis disebut juga linear analysis atau scanning. Contoh : position := initial + rate * 60 Statement di atas akan digrup menjadi token-token : 1. Identifier : position 2. Simbol assignment : := 3. Identifier : initial 4. Operator : + 5. Identifier : rate 6. Operator : * 7. Angka/digit : 60 Blank space dalam program harus dihilangkan selama proses scanning berlangsung

Compiling Phase : Analisa Sintaks Di dalam compiler, syntax analysis disebut juga hierarchical analysis atau parsing. Dalam tahap ini, token-token yang telah dihasilkan akan disusun menjadi phrase-phrase grammatik dengan menggunakan parse tree. assignment statement identifier position := expression Struktur hirarkis dari sebuah program biasanya diekspresikan melalui aturanaturan rekursif. expression + expression identifier expression * expression initial identifier number rate 60

Compiling Phase : Analisa Sintaks Contoh aturan yang digunakan untuk mem-parsing statement : position := initial + rate * 60 1. Sebarang identifier adalah expression 2. Sebarang digit adalah expression 3. If expression 1 dan expression 2 adalah expression, Then yang dihasilkan oleh operasi-operasi : expression 1 + expression 2 expression 1 * expression 2 ( expression 1 ) juga merupakan expression.

Compiling Phase : Analisa Sintaks Kebanyakan bahasa pemrograman mendefinisikan statement secara rekursif, seperti contoh berikut : 1. if identifier 1 adalah identifier, dan expression 2 adalah expression, then identifier 1 := expression 2 adalah statement 2. if expression 1 adalah expression, dan statement 2 adalah statement, then while ( expression 1 ) do statement 2 if ( expression 1 ) then statement 2 adalah statement

Compiling Phase : Analisa Sintaks Konstruksi leksikal tidak memerlukan aturan rekursif, tetapi konstruksi sintaktik harus menggunakan aturan rekursif. Sebagai contoh, untuk mengenali identifier, cukup dilakukan linear scan. Tetapi linear scan tidak dapat menganalisa ekspresi atau statement. Misalnya untuk mencocokkan tanda kurung buka dan kurung tutup yang melingkupi sebuah ekspresi atau sub-sub ekspersi. Atau, mencocokkan pasangan reserve word begin dan end dari rangkaian statement. IFUPN Pertemuan XIV 18

Compiling phase : Analisa Semantik Tahap analisis semantik berfungsi memeriksa source program dari kemungkinan kesalahan semantik. Analisis dilakukan dengan memanfaatkan struktur hirarkikal yang dihasilkan dari tahap analisis sintaktik. Komponen terpenting dari tahap analisis semantik adalah type checking. Salah satunya adalah memeriksa jenis dan kesesuaian operator dan operand yang digunakan. Apakah telah sesuai dengan yang telah ditentukan oleh source language-nya. Sebagai contoh, kebanyakan bahasa pemrograman menetapkan kesalahan apabila dijumpai bilangan riil digunakan sebagai indeks dari array. Atau jika terdapat binary arithmatic operator diaplikasikan pada bilangan integer dan riil. Dalam kasus ini kompilator harus mengkonversikan terlebih dahulu bilangan integer menjadi riil (sebelum bisa memvalidasi bahwa ekspresi aritmatik tersebut adalah benar).

Compiling Phase : Symbol Table Management Fungsi utama dari kompilator sebenarnya adalah untuk menyimpan identifier-identifier yang digunakan di dalam source program, dan menyimpan informasi mengenai atribut-atribut dari masing-masing identifier. Atribut-atribut ini dapat berupa alokasi penyimpanan untuk identifier, tipe datanya, scope-nya. Dan untuk procedure atau function, perlu diketahui jumlah dan tipe data argumenargumennya, metode passing untuk setiap argumen, dll. Symbol Table adalah sebuah struktur data dengan record-record untuk setiap identifier dengan field-field untuk setiap atribut dari identifier tersebut.

Compiling Phase : Symbol Table Management Contoh : var position, initial, rate : real; Tipe data real untuk ketiga identifier di atas belum dapat diketahui pada saat analisis leksikal dilakukan. Tetapi analisis leksikal harus dapat memilah-milah antara identifier, reserve word, operator, simbol/tanda baca, atau konstanta. Namun dalam analisis semantik harus sudah dapat dikenali tipe data dari masing-masing identifier (agar dapat menentukan apakah suatu ekspresi dapat dijalankan atau tidak), sehingga selama proses analisis semantik akan seringkali mengakses tabel simbol untuk mencari informasi mengenai tipe-tipe data dari identifier yang sedang dianalisa.

Compiling Phase : Error detecting and Reporting Setiap tahap dalam proses kompilasi dapat menghasilkan pesan kesalahan. Penyampaian pesan kesalahan dapat didesain melalui 3 cara, yaitu : 1. Proses kompilasi dihentikan saat sebuah kesalahan ditemukan, dan proses kompilasi akan diulang kembali (dari awal) setelah kesalahan tersebut diperbaiki; 2. Proses kompilasi dihentikan saat sebuah kesalahan ditemukan, dan proses dapat dijalankan kembali setelah kesalahan tersebut diperbaiki; 3. Setiap kesalahan yang ditemukan akan disimpan, untuk kemudian ditampilkan setelah proses kompilasi selesai. Dan setelah semua kesalahan selesai diperbaiki, proses kompilasi dapat diulang kembali.

Compiling Phase : Intermediate Code Generator Tidak semua jenis kompilator memiliki tahap ini; Bentuk antara yang dibuat harus memenuhi 2 syarat : - mudah untuk diproduksi - mudah untuk diterjemahkan ke dalam bentuk target program; Bentuk antara untuk ekspresi matematis umumnya dibuat dalam bentuk three-address code := := id 1 + id 1 + id 2 * id 2 * id 3 60 id 3 num 60

Compiling Phase : Intermediate Code Generator Bentuk antara ini memiliki beberapa properti, antara lain : - setiap three-address code hanya memiliki 1 operator saja - kompilator harus membuat menyiapkan variabel untuk menyimpan hasil komputasi; - pada kenyataannya banyak bentuk three-address yang memiliki kurang dari 3 operand temp 1 := inttoreal(60) temp 2 := id 3 * temp 1 temp 3 := id 2 + temp 2 id 1 := temp 3 Bentuk antara yang dibuat harus memenuhi 2 syarat : - mudah untuk diproduksi - mudah untuk diterjemahkan ke dalam bentuk target program; Bentuk antara untuk ekspresi matematis umumnya dibuat dalam bentuk three-address code

Compiling Phase : Code Optimizer Tahap ini bertujuan untuk mempercepat waktu eksekusi dari program; tahap ini akan menyita waktu paling banyak dari sebuah proses kompilasi; temp 1 := inttoreal(60) temp 2 := id 3 * temp 1 temp 3 := id 2 + temp 2 id 1 := temp 3 temp 1 := id 3 * 60.0 id 1 := id 2 + temp 1

Compiling Phase : Code Generation Tahap terakhir dari proses kompilasi ini akan membentuk relocatable machine code atau assembly code; Lokasi memori akan disiapkan untuk setiap variabel yang digunakan dalam program tersebut. Kemudian instruksi-instruksi dalam bentuk antara akan diterjemahkan ke dalam rangkaian instruksi-instruksi bahasa mesin yang merepresentasikan makna yang sama; Aspek paling penting dalam tahap ini adalah pada penentuan register untuk masing-masing variabel;

Compiling Phase : Code Generation temp 1 := id 3 * 60.0 id 1 := id 2 + temp 1 MOVF id 3, R 2 MULF #60.0, R 2 MOVF id 2, R 1 ADDF R 2, R 1 MOVF R 1, id 1 Assembly code di atas menggunakan register 1 dan 2; Operand pertama dan kedua, masing-masing menunjukkan asal dan tujuan; Karakter F pada setiap instruksi menandakan bahwa setiap instruksi di atas mengoperasikan bilangan riil; Simbol # menunjukkan bahwa bilangan 60.0 akan diperlakukan sebagai konstanta;

Compiling Phase Overview position := initial + rate * 60 temp 1 := inttoreal(60) temp 2 := id 3 * temp 1 temp 3 := id 2 + temp 2 id 1 := temp 3 Code Optimizer Lexical Analyzer id 1 := id 2 + id 3 * 60 Intermediate Code Generator temp 1 := id 3 * 60.0 id 1 := id 2 + temp 1 := Syntax Analyzer id 1 + Code Generator id 2 * := id 3 inttoreal id 1 + id 2 * 60 MOVF id 3, R 2 MULF #60.0, R 2 MOVF id 2, R 1 ADDF R 2, R 1 MOVF R 1, id 1 id 3 60 Semantic Analyzer