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

dokumen-dokumen yang mirip
TABEL INFORMASI / SIMBOL

TUGAS MATA KULIAH TEKNIK KOMPILASI

Perjalanan sebuah intruksi

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

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

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

TEORI BAHASA DAN OTOMATA

BAB V CONTEXT FREE GRAMMAR DAN PUSH DOWN AUTOMATA

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

Hirarki Comsky. Unrestricted. Context Sensitive Context free Regular

Aplikasi Rekursif dalam Analisis Sintaks Program

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

Teknik Kompilasi. Notasi Bahasa

BAB IX LINKED LIST (SENARAI BERANTAI)

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

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

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

Komponen sebuah Kompilator

Lab. Teknik Informatika Struktur Data 1

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

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

Pendahuluan Struktur Data. Nisa ul Hafidhoh

MODUL XIII TEORI BAHASA DAN AUTOMATA

SEMANTIK. Int vector[10];

Pertemuan 10. Tumpukan (Stack) Dipersiapkan oleh : Boldson Herdianto. S., S.Kom., MMSI.

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

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

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

BAB IX LINKED LIST (SENARAI BERANTAI)

Kuliah Online : TEKKOM [2013/VI]

ALGORITMA PEMROGRAMAN 1C SINTAKS

BAB II DASAR TEORI. 2.1 Kompilator

BAB II SINTAKS 2.1. SINTAKS

BAB II STACK Atau TUMPUKAN

ALGORITMA DAN STRUKTUR DATA

BAB II STACK (TUMPUKAN)

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

STACK (TUMPUKAN) & QUEUE (ANTRIAN) Altien Jonathan Rindengan, S.Si., M.Kom.

Struktur Data. PDE - Struktur Data 1

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

Objek Data, Variabel, dan Konstanta. Konsep Bahasa Pemrograman Materi 4 Yudianto Sujana, M.Kom

TIPE DATA, VARIABLE, dan OPERATOR DELPHI

STACK ATAU TUMPUKAN 3.1 DAFTAR LINEAR

BAB V ANALISA SEMANTIK

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

ALGORITMA PEMROGRAMAN 1C SEMANTIKS

TEKNIK KOMPILASI Konsep & Notasi Bahasa

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

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

STACK (Tumpukan) Tumpukan Koin. Tumpukan Kotak

Struktur Data. Tumpukan : Definisi & Operasi. Pertemuan 4 PROBLEM ALGORITHM DATA IMPLEMENTATION. Pert. 4b Struktur Data - FMIPA USD

BENTUK NORMAL GREIBACH

Algoritma Pemrograman

S T A C K ( T U M P U K A N )

Proses Kompilasi. Otomata dan Pengantar Kompulasi Pertemuan 3

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

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

Pengenalan Algoritma & Struktur Data. Pertemuan ke-1

ALGORITMA DAN STRUKTUR DATA ARRAY STACK DAN QUEUE

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA STACK

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

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

STRUKTUR DATA Pertemuan 1 s.d 8

S TA C K Sunu Wibirama

STACK/TUMPUKAN. R. Denny Ari Wibowo, S.Kom STMIK BINA NUSANTARA JAYA LUBUKLINGGAU

E STRUKTUR DATA & E PRAKTIK STRUKTUR DATA. Pointer & Function. Alfa Faridh Suni, S.T., M.T. PTIK

BAB 3 STACK (TUMPUKAN)

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

Penghilangan Rekursif Kiri

Struktur Data Array. Rijal Fadilah S.Si

PERTEMUAN 2 ALGORITMA & PEMROGRAMAN

TEKNIK KOMPILASI Bahasa Regular

PENGEMBANGAN PROTOTIPE APLIKASI KONVERSI KODE DARI BAHASA C KE PASCAL

IX. Implementasi ADT : Stacks & Queues. Operasi dasar Contoh kegunaan Implementasi Array-based dan linked list-based

BAB III ANALISIS DAN PERANCANGAN APLIKASI 3.1 ANALISIS

Algoritma & Pemrograman #9. by antonius rachmat c, s.kom, m.cs

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

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

Type Data terdiri dari : - Data Tunggal : Integer, Real, Boolean dan Karakter. - Data Majemuk : String

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

Algoritma dan Struktur Data STACK

Silabus Struktur Data. Bandung 2013

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

4. STACK / TUMPUKAN TEORI PENUNJANG

Pertemuan 7. REVIEW dan QUIS

Penerapan BFS dan DFS pada Pencarian Solusi

Analisis Sintaksis (syntactic analyzer atau parser)

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

BAB 7 Java Array. Sebagai contoh, kita memiliki tiga variabel dengan tipe data int yang memiliki identifier yang berbeda untuk tiap variabel.

TEKNIK KOMPILASI. Muhamad Nursalman Ilmu Komputer FPMIPA - UPI

Algoritma Dan Struktur Data II

STRUKTUR PROGRAM. Secara ringkas, struktur suatu program Pascal dapat terdiri dari : 1.Judul Program 2.Blog Program a.

BAB IV ANALISA SINTAKS

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

UNIVERSITAS GUNADARMA

Algoritma Dan Struktur Data II

JENIS DATA SEDERHANA & INPUT/OUTPUT DATA

Transkripsi:

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

Bentuk Normal Greibach disebut juga LL(1) Syarat GNF adalah: Hasil produksinya selalu diawali oleh satu simbol terminal dan selanjutnya bisa diikuti oleh rangkaian simbol variabel ( A => av ) Untuk setiap terminal yang memulai GNF harus berbeda-beda Tidak memiliki produksi ε Tidak bersifat rekursif kiri Sudah dalam bentuk CNF Contoh: S => as bt T => as b

LL1 (2) Cara pengubahan TBBK yang belum GNF S => CA A => a d B => b C => DD D => AB Tentukan urutan simbol variabel, misalnya S < A < B < C < D. Pengurutan ini terserah, yang penting memudahkan proses berikutnya Periksa aturan produksi simbol pertama yang berupa simbol variabel, apakah sudah sesuai dengan aturan urutan simbol variabel yang dibuat diatas. S => CA (sudah karena S < C) C => DD (sudah karena C < D) D => AB (belum karena D > A) Maka lakukan substitusi pada simbol variabel A sehingga: D => ab db

LL1 (3) Setelah semua memenuhi aturan urutan variabel, maka kita lakukan substitusi mundur pada TBBK yang belum GNF: C => DD menjadi C => abd dbd S => CA menjadi S => abda dbda Substitusi mundur dilakukan mulai dari aturan produksi yang memiliki urutan variabel yang paling akhir (S<A<B<C<D) sehingga C disubstitusi lebih dahulu daripada S Hasil akhir GNF: S => abda dbda A => a d B => b C => abd dbd D => ab db

PDA (Push Down Automata) Adalah mesin otomata dari TBBK yang diimplementasikan dengan stack sehingga hanya terdapat operasi push dan pop Stack (tumpukan) adalah suatu struktur data yang menggunakan prinsip LIFO (Last In First Out). Sebuah stack selalu memiliki top of stack dan elemen-elemen stack itu yang akan masuk ke dalam stack dengan method push dan akan keluar dari stack dengan method pop.

PDA (2) Sebuah PDA dinyatakan dengan : Q = himpunan state Σ = himpunan simbol input T = simbol stack Δ = fungsi transisi S = state awal F = state akhir Z = top of stack

PDA (3) PDA memiliki 2 jenis transisi, yaitu Δ yang merima simbol input, simbol top of stack, dan state. Setiap pilihan terdiri dari state berikutnya dan simbolsimbol. Penggantian isi stack dilakukan dengan opersi push dan pop. Jenis transisi yang kedua adalah transisi ε. Transisi ε tidak melakukan pembacaan input namun hanya menerima simbol top of stack dan state. Transisi ini memungkinkan PDA untuk memanipulasi isi stack dan berpindah antar state tanpa membaca input.

PDA (4) Contoh: TBBK = D => ada bdb c Q = {q1,q2,q3} Σ = {a,b,c} T = {D, A, C, Z} S = q1 F = {q3} Memiliki fungsi transisi sebagai berikut: Δ(q1,ε,Z) = {(q2,dz)} Δ(q2,ε,D) = {(q2,ada), (q2,bdb), (q2,c)} Δ(q2,a,a) = {(q2,ε)} Δ(q2,b,b) = {(q2,ε)} Δ(q2,c,c) = {(q2,ε)} Δ(q2,ε,Z) = {(q3,z)}

PDA (5) Misalkan inputan string: aca. Kita tahu hal itu dihasilkan oleh D => ada => aca Maka PDA yang bisa kita buat: Kondisi awal : state q1, top of stack Z Tanpa menerima input (ε) Fungsi transisinya : Δ(q1,ε,Z) = {(q2,dz)} Stack menjadi : state q2 dan D di push

PDA (6) Tanpa menerima input (ε) Fungsi transisinya : Δ(q2,ε,D) = {(q2,ada)} Stack menjadi : state q2, pop top of stack, push ada

PDA (7) Menerima input a Fungsi transisinya : Δ(q2,a,a) = {(q2,ε)} Stack menjadi : state q2, pop top of stack Tanpa menerima input (ε) Fungsi transisinya : Δ(q2,ε,D) = {(q2,c)} Stack menjadi : state q2, pop top of stack, push c

PDA (8) Menerima input c Fungsi transisinya : Δ(q2,c,c) = {(q2,ε)} Stack menjadi : state q2, pop top of stack Menerima input a Fungsi transisinya : Δ(q2,a,a) = {(q2,ε)} Stack menjadi : state q2, pop top of stack

PDA (9) Tanpa menerima input (ε) Fungsi transisinya : Δ(q2,ε,Z) = {(q3,z)} Stack menjadi : state q3 Tidak ada transisi lagi dari q3, dan karena q3 adalah state akhir dan semua input sudah dibaca semua, maka aca diterima oleh PDA tersebut

Pseudocode TBBK dengan stack while(masih ada input){ if(top_of_stack adalah terminal){ if(input == karakter_dalam_top_of_stack){ pop top of stack; baca karakter input selanjutnya } else ERROR; } else { Cari produks yang cocok dengan karakter inputan; if(ada produksi) ganti stack dengan produksi ruas kanan; else ERROR; } } if(stack tidak kosong) ERROR;

Contoh S => at bsa T => at bs c

Recursive Descent Parsing Melakukan penelusuran grammar di ruas kanan sesuai dengan masukkannya, sampai ditemukan token yang cocok. Jika ditemukan non terminal maka akan dipanggil fungsi lain yang bersesuaian dengan non terminal tersebut. Setiap simbol non terminal memiliki fungsi sendirisendiri Contoh: S => ba c A => dsd e Bagaimana source code nya?

Source Code

Predictive Parsing Untuk TBBK yang rekursif kiri Dengan melakukan prediksi awal, membentuk semua kemungkinan parse tree nya Contoh: S => Ab Bc A => Df CA B => ga e C => dc c D => h I Dengan recursif descent gchfc : A => Bc => gac => gcac => gcac => gcdfc => gchfc

Predictive Parsing hfb Dfb ifb Ab dcab CAb S gac cab Bc ec Bila token dimulai dengan h atau i atau c atau d, maka fungsi S => Ab yang dipilih Bila token dimulai dengan g atau e, maka fungsi S => Bc, selain itu error!

Semantic Analysis Analisis semantik menganalisis kebenaran source program. Analisis semantik akan memanfaatkan pohon sintaks yang dihasilkan oleh proses parsing. Bagian ini berfungsi menentukan makna dari serangkaian instruksi dari source code. Tujuan: menentukan makna dari serangkaian instruksi yang terdapat pada source code.

Semantic Analysis (2) Yang dilakukan oleh analisis semantik: Type Checking Dilakukan pengecekan tipe ekspresi dan variabel. Static Checking: pengecekan dilakukan oleh kompiler Contoh: pengecekan operator dan operand sesuai dengan tipe, flow of control check, uniqueness check (apakah ada duplikasi), name-related check (apakah sudah terdefinisi) Dynamic Checking: pengecekan dilakukan oleh target program. Type Conversion Implicit, dilakukan oleh kompiler Explicit, dilakukan oleh programmer

Semantic Analysis (3) Contoh: A:=(A+B)*(C+D) Pada proses parsing, parser akan menjumpai ekspresiekspresi diatas seperti atas, seperti simbol :=, +, dan *. Namun parser tidak tahu makna yang tersimpan di dalam simbol-simbol tersebut. Oleh karena itu Analisis Semantik akan melakukan: Apakah variabel yang ada telah didefinisikan sebelumnya. Apakah variabel tersebut tipenya sama dan benar. Apakah operan yang akan dioperasikan ada nilainya. Menentukan derajat operator Untuk dapat menjalankan aksinya, analisis semantik akan membutuhkan tabel simbol

Tabel Simbol Tabel Simbol berfungsi untuk: Menyimpan informasi tentang: Nama variabel dan tipe datanya Informasi detail untuk record dan array Nama prosedur dan fungsi yang ada Jumlah, nama, tipe data dan paramter fungsi/prosedur Nama label Konstanta dan String Membantu pemeriksaan kebenaran semantik dari source code Membantu mempermudah dalam pembuatan intermediate code dan code generation

Operasi Tabel Simbol Jenis operasi yang dilakukan dalam tabel simbol adalah Operasi insert (append/add) Operasi search (dengan hashing) Operasi delete

Tabel Simbol (2) Biasanya tabel simbol dibuat pada tahap analisis lexical dan masing-masing data di dalam tabel simbol diberi indeks tertentu yang bersifat unik. Oleh analisis sintaks, tabel simbol digunakan untuk memeriksa kebenaran sintaks dan membangkitkan pohon sintaks untuk proses parsing. Hasilnya akan dianalisa kebenaran semantiksnya dan digunakan pada tahapan code generation untuk menghasilkan sekumpulan instruksi object code.

Tabel Simbol (3)

Tabel Simbol (4) Pada dasarnya tabel simbol berisi daftar dan informasi indentifier pokok yang terdapat pada source code. Tabel ini disebut sebagai tabel pokok. Dari tabel pokok ini kemungkinan besar dapat terjadi tidak semua informasi tercover semuanya. Jadi diperlukan tabel lagi yang berfungsi sebagai tabel pembantu. Di dalam tabel utama harus terdapat field yang menjembatani identifier dari tabel utama ke tabel lain yang bersesuaian (analogikan dengan konsep basis data atau senarai pointer)

Elemen Tabel Simbol Pada umumnya elemen-elemen tabel simbol: No urut identifier (ID unik / auto increment) Nama identifier: berisi nama-nama variabel, prosedure, fungsi, dan lain-lain yang akan digunakan untuk referensi pada analisis semantik, intermediate code, dan code generation. Tipe identifier: berisi keterangan tipe identifier. Object Time Address: berisi address yang mengacu pada alamat tertentu di memori Dimensi (ukuran) dari identifier yang bersangkutan Nomor baris variabel yang dideklarasikan Field link (opsional)

Jenis Tabel Simbol Beberapa jenis Tabel Simbol: Tabel identifier: berisi daftar identifier Tabel array: berisi informasi tambahan untuk array Tabel blok: berisi variabel-variabel dalam lingkup blok yang sama (lokal) Tabel real: berisi elemen tabel bernilai real Tabel string: berisi informasi string Tabel display: berisi blok yang aktif Tabel integer: berisi informasi elemen bernilai integer

Tabel Simbol Identifier No urut identifier Nama identifier Jenis identifier : prosedur, fungsi, tipe, variabel, konstanta Tipe identifier: integer, real, char, boolean, string, record Level : berupa kedalaman identifier (blok program). Misal main program = level 0, prosedur dan fungsi dalam main program = level 1. Field ini digunakan pada saat runtime untuk mengetahui current activation record yang bisa diakses. Pada identifier, perlu dicatat juga: Alamat dari identifier Informasi acuan identifier ke tabel identifier lain yang menerangkannya Link: menghubungkan identifier ke identifier lainnya, atau yang dideklarasikan pada level yang sama Normal: digunakan pada pemanggilan parameter by value dan by reference (berupa variabel boolean)

Contoh Tabel Identifier Contoh: Program A; var B : integer; Procedure X(Z:char); var C : integer; begin.... Pada tabel identifier akan muncul: 0 A 1 B 2 X 3 Z 4 C

Contoh (2) Contoh implementasi tabel identifier: TabId : array [0..tabmax] of Record Name : string; Link : integer; Obj : objek; Tipe : types; Ref : integer; Normal: Boolean; Level : 0..maxlevel; Address: integer; End; Dimana : Objek = { konstant, variabel, prosedure, fungsi } Types = { notipe, int, reals, booleans, chars, arrays, records }

Tabel Array No urut array dalam tabel Tipe dari indeks array yang bersangkutan Tipe elemen array Alamat Referensi dari elemen array Indeks batas atas dan bawah array Jumlah elemen array Ukuran total array = (atas bawah + 1) * elemen size

Contoh Tabel Array Contoh implementasi: TabArray: array [1..tabmax] of Record Indextype, elementype: types; Elemenref, low, high, tabsize:integer; End;

Tabel Blok No urut blok Batas awal blok Batas akhir blok Ukuran parameter Ukuran variabel Last variabel Last parameter

Contoh Tabel Blok TabBlok: array[1..tabmax] of Record Lastvar, lastpar, parsize, varsize:integer; End;

Contoh Tabel Blok (2) Dengan contoh program di atas maka untuk program A: Last variabel: 2 (lihat dari tabel idenfier, last variable adalah X = 2) Variabel size: 2 (integer = 2 byte) Last parameter: 0 (tanpa paramter) Parameter size: 0 Untuk procedure X: Last variabel: 4 (lihat dari tabel idenfier, last variable adalah C = 4) Variabel size: 2 (integer = 2 byte) Last parameter: 3 (Z = 3) Parameter size: 1 (char = 1 byte)

Tabel Simbol lain Tabel Real dan Tabel String: No urut Untuk real: nilai real sedangkan untuk string: karakter-karakter yang ada dalam string Tabel Display: Berfungsi mencatat blok yang sedang aktif No urut Blok yang sedang aktif Pengisiannya menggunakan konsep stack

Urutan Pemrosesan Urutan pengaksesan: Tabel Dsiplay Tabel Blok Tabel Simbol Pertama, tabel display akan mengetahui mana bagian yang aktif, maka akan diketahui identifier-identier yang aktif dalam blok tersebut. Informasi identifier yang ada mungkin belum lengkap sehingga diperlukan melihat referensi ke tabel-tabel pelengkap lainnya.

Implementasi Tabel Simbol Jelas tidak menggunakan database, Tapi menggunakan: Linked List Tree Hash table

Hash Contoh fungsi hash: maxtabel = 9 h(string) = Σ (ASCII(Ci)) mod (maxtabel+1) h( ABC ) = 65+66+67 = 198 mod 10 = 8 h( AA ) = 65+65 = 130 mod 10 = 0 h( BAC ) = 66+65+67 = 198 mod 10 = 8 terjadi collision Maka : 0AA 1 2 3 4 5 6 7 8 ABC -> BAC 9

NEXT