SEMANTIK. Int vector[10];

dokumen-dokumen yang mirip
SEMANTIK. Sintak mendifinisikan suatu bentuk program yang benar dari suatu bahasa.

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

ALGORITMA PEMROGRAMAN 1C SEMANTIKS

BAB V ANALISA SEMANTIK

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

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

TEKNIK KOMPILASI. Muhamad Nursalman Ilmu Komputer FPMIPA - UPI

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

Fase-fase proses sebuah kompilasi

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

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

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

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

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

Perjalanan sebuah intruksi

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

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

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

Kesalahan Program dapat berupa

UNIVERSITAS GUNADARMA

Aplikasi Rekursif dalam Analisis Sintaks Program

TEKNIK KOMPILASI. Firrar Utdirartatmo

LANGUAGES AND TRANSLATOR

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

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

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

Hirarki Comsky. Unrestricted. Context Sensitive Context free Regular

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

TUGAS MATA KULIAH TEKNIK KOMPILASI

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

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

ALGORITMA PEMROGRAMAN 1C SINTAKS

BAB 1 PENDAHULUAN KOMPILASI. Pendahuluan

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

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

BAB II STACK (TUMPUKAN)

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

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP

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

PENGANTAR TEKNIK KOMPILASI

ALGORITMA PEMROGRAMAN 1C PENDAHULUAN KONSEP BAHASA PEMROGRAMAN

BAB II SINTAKS 2.1. SINTAKS

Proses Kompilasi. Otomata dan Pengantar Kompulasi Pertemuan 3

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

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

Pendahuluan. Tujuan Pembelajaran :

BAB I KONSEP DASAR PEMROGRAMAN

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

BAB VI CARA PENANGANAN KESALAHAN

SATUAN ACARA PERKULIAHAN (SAP) Semester Penempatan

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

PENGEMBANGAN PROTOTIPE APLIKASI KONVERSI KODE DARI BAHASA C KE PASCAL

STACK ATAU TUMPUKAN 3.1 DAFTAR LINEAR

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

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

Tipe Data dan Operator

Web Site :

Pendahuluan. Kuliah online : Tekkom [2013/VI]

Compiler & Interpreter

Algoritma dan Struktur Data

Pengenalan Algoritma & Pemrograman

disebut ternary operator. Di dalam suatu operasi dapat terdapat banyak operator. Urutan eksekusi dari operatoroperator

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

SUMBER BELAJAR PENUNJANG PLPG

BAB III ANALISIS DAN PERANCANGAN APLIKASI 3.1 ANALISIS

BAHASA PEMROGRAMAN. Merupakan prosedur/tata cara penulisan program.

Komponen sebuah Kompilator

Diktat Kuliah Teknik Kompilasi BAB 1 PENDAHULUAN

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

Kuliah Online : TEKKOM [2013/VI]

PEMROGRAMAN IMPERATIF

COMPILER Aspek Kompilasi

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN

Saifoe El Unas 2. Free Format

BAB III ANALISIS DAN PERANCANGAN

SATUAN ACARA PERKULIAHAN (SAP) MATA KULIAH PENGANTAR TEKNIK KOMPILASI

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

Algoritma Pemrograman

Tipe Boolean. Oleh : Fiftin Noviyanto

Tipe Boolean 20/01/2012. Oleh : Fiftin Noviyanto

Module 4. Ekpresi, Operator, dan Konstanta

Struktur Data. PDE - Struktur Data 1

Implementasi OOP Pada Perangkat Lunak Pemrograman

OPERASI LOGIKA PADA GENERAL TREE MENGGUNAKAN FUNGSI REKURSIF

BAHASA SUMBER. DEFINISI bahasa sumber

MODUL. Variabel. Workshop Programming

PHP (HYPERTEXT PREPROCESSOR)

BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA

PENDAHULUAN. Brigida Arie Minartiningtyas, M.Kom

BAB III ANALISIS DAN PERANCANGAN

24/09/2017 PERCABANGAN

Preliminary Test Axioo Class Program

Algoritma dan Struktur Data

Algoritma Pemrograman

BAB II LANDASAN TEORI

PEMROGRAMAN JAVA. Petunjuk Penulisan Program Token Aturan Penamaan Identifier Lingkungan /Scope dari variabel Tipe Data (i) Yoannita

T I P E D A T A P R I M I T I F V A R I A B E L D A N S T A T E M E N P E N U G A S A N E K S P R E S I D A N O P E R A T O R A R I T M A T I K A

TEORI BAHASA DAN OTOMATA [TBO]

BAB III ANALISIS DAN PERANCANGAN

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 4 & 5

Transkripsi:

SEMANTIK Sintaks mendefinisikan suatu bentuk program yang benar dari suatu bahasa. Semantik mendefinisikan arti dari program yang benar secara sintaks dari bahasan tersebut. Sebagai contoh adalah deklarasi dalam bahasa C berikut ini: Int vector[10]; Semantik akan menentukan bahwa deklarasi di atas menyebabkan ruang sebanyak 10 elemen integer diberikan kepada variable bernama vector. Elemen-elemen array akan ditunjukkan dengan index I, dari 0 sampai 9. Elemen pertama array vector adalah vector [0]. Contoh yang lain adalah deklarasi berikut ini: If (a > b) max = a else max = b; Deklarasi di atas bermakna bahwa ekspresi a > b harus dievaluasi, dan tergantung dari nilai ini, satu dari dari dua statemen dibelakangnya akan dieksekusi. Perhatikan bahwa aturan sintaks memberikan bentuk pada statemen tersebut dimana dengan tepat meletakkan tanda ; sehingga aturan semantik dapat mengartikan dengan benar. Sebenarnya, tidak semua program yang ditulis dengan benar secara sintaks dapat diartikan dengan baik secara semantik. Semantik suatu bahasa membutuhkan semacam ekspresi untuk mengirimkan nilai kebenaran (TRUE, FALSE, NOT, atau nilai integer). Dalam banyak kasus, program hanya dapat dieksekusi jika benar serta mengikuti aturan sintaks dan semantik. Contoh : A = (A + B) * (C + D) Parser hanya akan mengenali simbol-simbol :=, +, *, parser tidak mengetahui makna dari simbol-simbol tersebut Untuk mengenali makna dari simbol-simbol tersebut, maka compiler memanggil routine semantics Untuk mengetahui makna, maka routine ini akan memeriksa : a. apakah variabel yang ada telah didefinisikan sebelumnya b. apakah variabel-variabel tersebut tipenya sama c. apakah operand yang akan dioperasikan tersebut ada nilainya, dst d. menggunakan tabel simbol e. pemeriksaan bisa dilakukan pada tabel identifier, tabel display, dan tabel block Pengecekan yang dilakukan dapat berupa : 1. Memeriksa penggunaan nama-nama (keberlakuannya) 1

a. Duplikasi Apakah sebuah nama terjadi pendefinisian lebih dari 2 kali. Pengecekan dilakukan pada bagian pengelolaan block b. Terdefinisi Apakah nama yang dipakai pada program sudah terdefinisi atau belum. Pengecekan dilakukan pada semua tempat kecuali block 2. Memeriksa Tipe Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement yang ada, misalnya bila terdapat suatu operasi, diperiksa tipe operandnya. Contoh : Ekspresi yang mengikuti If berarti tipenya Boolean, akan diperiksa tipe identifier dan tipe ekspresinya Bila ada operasi antara 2 operand maka tipe operand yang pertama harus dioperasikan dengan operand yang kedua Analisa semantik sering juga digolongkan dengan Intermediate Code yang akan menghasilkan output Intermediate Code. Syntax-Directed Translation Kode antara (Intermadiate Code) adalah sebuah representasi yang disiapkan untuk mesin abstrak tertentu. Dua sifat yang harus dipenuhi oleh kode antara adalah : 1. dapat dihasilkan dengan mudah 2. mudah ditranslasikan menjadi program sasaran (target program) Representasi kode antara biasanya terbentuk tiga alamat (three-address code), baik berbentuk quadruples ataupun triples. Kode antara (intermediate code) dibentuk dari sebuah kalimat x dalam bahasa context free. Kalimat x ini adalah keluaran dari parser. Kalimat ini tentu saja dapat dinyatakan dalam representasi pohon parsing (parse tree). Syntax-directed translation adalah suatu urutan proses yang mentranslasikan parse tree menjadi kode antara. Tahap pertama dari pembentukan kode antara adalah evaluasi atribut setiap token dalam kalimat x. Yang dapat menjadi atribut setiap token adalah semua informasi yang dapat disimpan di dalam tabel simbol. Evaluasi dimulai dari parse tree. Pandang sebuah node n yang ditandai sebuah token x pada parse tree. Kita tuliskan x.a untuk menyatakan atribut a untuk token x pada node n tersebut. Nilai x.a pada node n tersebut dievaluasi dengan menggunakan aturan semantik (semantic rule) untuk atribut a. Aturan semantik ini ditetapkan untuk setiap produksi dimana x adalah ruas kiri produksi. Sebuah parse tree yang 2

menyertakan nilai-nilai atribut pada setiap nodenya dinamakan Annonated parse tree. Kumpulan aturan yang menetapkan aturan-aturan semantik untuk setiap produksinya dinamakan syntax-directed definition. Untuk jelasnya berikut ini adalah sebuah syntax-directed translation yang mentransasikan ekspresi infix menjadi ekspresi postfix. Ekspresi infix ini dapat dipandang sebagai sebuah kalimat yang dihasilkan oleh parser. Contoh : Diketahui : 1. Kalimat x : 9 5 + 2 2. Grammar Q = { E E + T E T T, T 0 1 2 9} 3. Syntax-directed definition : E T T 0 T 1 T 9 E := T.t T := '0' T := '1' T := '9' Catatan : lambang menyatakan concatenation aturan semantik kedus produksi pertama adalah concate dua operand diikuti sebuah operator Langkah-langkah translasi 1. Pembentukan Parse Tree E E + T E - T 2 T 5 9 3

2. Pembentukan Annonated Parse Tree E = 95 2 + E.t = 95 - + T.t = 2 E.t = 9 - T.t = 5 2 T.t = 9 5 9 Dalam banyak hal, semantik suatu bahasa pemrograman mempunyai banyak potensial, beberapa diantaranya adalah: a. Standardisasi bahasa pemrograman Banyak usaha yang dilakukan untuk menstandardisasi bahasa pemrograman seperti FORTRAN, COBOL, dan PL/I untuk lebih memudahkan programmer menggunakannya. b. Referensi untuk user. Programmer membutuhkan suatu dokumentasi yang pasti,supaya pengguna dapat mengoperasikan program yang dibuat dengan baik.hal ini tidak akan menjadi masalah ketika pengguna diberi kesempatan untuk bereksperimen dengan program tersebut, dan mengetahui apa yang dikerjakan program. c. Pembuktian dari program yang benar. Secara matematis, program tidak mungkin bekerja dan berjalan jika tidak ada semantik. d. Referensi untuk implementor Semantik akan mencegah sudatu gaya bahasa yang tidak kompatibel yang diwujudkan dalam suatu implementasi berbeda walaupun dengan bahasa yang sama. e. Implementasi otomatis. Suatu tool dapat secara otomatis membuat translasi bahasa yang melebihi parsing. Hal ini dapat dilakukan jika semantik sudah dirumuskan. f. Pemahaman yang lebih baik dari desain bahasa. Jika suatu rumusan semantik sulit untuk dideskripsikan secara formal maka rumusan semantik tersebut juga akan sulit digunakan oleh programmer. Dari pandangan programmer, terdapat dua alasan mengapa perlu memahami suatu desain bahasa pemrograman dengan lebih baik, yaitu: 1. Memahami dengan lebih baik suatu desain bahasa pemrograman berarti membantu menguasai dan menggunakan bahasa tersebut. 2. Memahami dengan lebih baik suatu desain bahasa pemrograman secara detail membantu programmer untuk memperbaiki proses pengembangan 4

program menjadi lebih baik. Selain itu, ada banyak aplikasi pemrograman yang melibatkan desain bahasa pemrograman. Teknik-teknik Pendeskripsian Semantik Bahasa Pemrograman a. Operational Semantic Pendekatan ini mendefinisikan suatu mesin buatan (Abstract) dengan instruksi-instruksi primitif, tidak perlu realistik, tetapi cukup sederhana supaya tidak muncul kesalahpahaman. Deskripsi semantik dari bahasa pemrograman menentukan suatu translasi ke kode. b. Denotational Semantic Pada pendekatan ini, diberikan suatu fungsi yang memetakan programprogram komputer yang ditunjuk ke dalam bentuk nilai-nilai abstrak secara matematika (angka, nilai, kebenaran, fungsi matematika, dsb). c. Axiomatic Semantic Pada pendekatan ini didefinisikan suatu tindakan program yang dibangun dengan properti logika yang menyimpan status komputer sebelum dan sesudah eksekusi. d. Algebraic Semantic Pada pendekatan ini dipertimbangkan suatu objek komputasi yang menjadi syarat-syarat dalam aljabar multi-sorted. Program mengimplementasikan fungsi yang dapat diwujudkan dengan suatu persamaan diantara syarat-syarat tersebut. e. Structured Operational atau Natural Semantic Seperti dalam pengambilan keputusan secara alamiah dengan logika. Program diberi suatu arti dari aturan yang diturunkan yang menggambarkan penilaian gagasan suatu bahasa. 5

KODE ANTARA / INTERMEDIATE CODE Merupakan : hasil dari tahapan analisis, yang dibuat oleh kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. Kegunaan : Untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke sejumlah mesin, dengan adanya kode antara yang lebih machine independent maka kode antara yang dihasilkan dapat digunakan lagi pada mesin lainnya. Proses optimasi masih lebih mudah. Beberapa strategi optimasi lebih mudah dilakukan pada kode antara daripada program sumber atau pada kode assembly dan kode mesin. Bila melihat program internal yang mudah dimengerti. Kode antara ini akan lebih mudah dipahami daripada kode assembly atau kode mesin. Kerugian : Bila dilakukan dua kali translasi, membutuhkan waktu yang relatif lama. 2 macam kode antara : - NOTASI POSTFIX Pada suatu operasi : Notasi infix : letak operator berada di tengah Notasi Postfix : operator diletakkan paling akhir, disebut juga notasi sufix atau reverse polish. Sintax Notasi Postfix : <operand><operand>><operator Contoh : 1. (a + b) * (c + d) dalam bentuk postfix : ab+cd+* 2. IF <exp> THEN <stmt1> ELSE <stmt2> dalam bentuk postfix : <exp> <label1> BZ <stmt1> <label2> BR <stmt2> Arti notasi Postfix : Jika kondisi ekspresi salah maka instruksi akan meloncat ke label1 dan Menjalankan statement2. Bila kondisi ekspresi benar, maka statement1 akan dijalankan lalu meloncat ke label2. label1 dan label2 sendiri menunjukkan posisi tujuan loncatan, untuk label1 posisinya tepat sebelum statement2, dan label2 setelah statement2. BZ : branch if zero (zero=salah), bercabang/meloncat jika kondisi yang dites salah) BR : branch, bercabang/meloncat tanpa ada kondisi yang dites) 6

3. IF a > b THEN c = d ELSE c = e diubah ke postfix : 11 a 12 b 13 > 14 22 {menunjuk label1} 15 BZ 16 c 17 d 18 = 19 20 25 {menunjuk label2} 21 BR 22 c 23 e 24 = 25 Artinya : - bila ekspresi (a > b) salah, maka loncat ke instruksi no.22 - bila ekspresi (a > b) benar, tidak terjadi loncatan, instruksi berlanjut ke no. 16 sampai 18, lalu loncat ke no.25 - NOTASI N-TUPEL - Triples notation - Quadruples Notation Bila pada postfix setiap baris instruksi hanya terdiri dari satu tupel, maka pada notasi tupel N-tupel setiap baris dapat terdiri dari beberapa tupel. BU : operator...n-1 operand TRIPLES NOTATION (3 tupel) <operator> <operand> <operand> Contoh : 1. A:=D*C+B/E Kode antara tripel : 1. *, D, C 2. /, B, E 3. +, (1), (2) 4. :=, A, (3) 7

2. IF x > y THEN x = a b ELSE X = a + b Kode antara triple : 1. >, x, y 2. BZ,(1),(6) {bila kondisi (1) salah loncat ke (6) 3. -, a, b 4. =, x, (3) 5. BR,, (8) 6. +, a, b 7. =, x, (6) Kekurangan Notasi triples : Sulit pada saat melakukan optimasi, maka dikembangkan indirect triples yang memiliki 2 list (senarai), yaitu : - list instruksi : berisi notasi triples - list eksekusi : mengatur urutan eksekusinya QUADRUPLES NOTATION ( 4 tupel ) BU : <operator> <operand> <operand> <hasil> Hasil : temporary variabel yang dapat ditempatkan pada memory atau register. Masalah yang ada bagaimana mengelola temporary variabel (hasil) seminimal mungkin. Contoh : A:=D*C+B/E Kode antaranya adalah : 1. *, D, C, T1 2. /, B, E, T2 3. +, T1, T2, A 8