ALGORITMA PEMROGRAMAN 1C SINTAKS Indah Wahyuni
PENDAHULUAN Bahasa mesin adalah bentuk terendah komputer. Kita dapat berhubungan langsung dengan bagianbagian yang ada didalam komputer seperti bits, register. Bahasa mesin terdiri dari bit-bit 0 dan 1. Bahasa tingkat tinggi adalah suatu bahasa yang dapat dimengerti baik oleh manusia maupun komputer. Pada bahasa tingkat tinggi kedalam bahasa mesin dibutuhkan sesuatu untuk menterjemahkan agar mesin komputer mengerti apa yang diinginkan oleh manusia, yaitu: 1. Interpreter 2. Compiler 2
SINTAKS Sintaks merupakan kumpulan aturan yang mendefenisikan suatu bentuk bahasa. Sintaks mendefenisikan bagaimana suatu kata dikembangkan menjadi suatu statement yang benar sehingga dapat disusun menjadi suatu program yang dapat berjalan dengan benar. Sintaks dari bahasa pemrograma didefenisikan dengan 2 kumpulan aturan, yaitu: 1. Aturan Lexical (Lexical Analysis)/ Scanner 2. Aturan Syntactic (Syntactic Analyzer)/ Parser 3
KONSEP & NOTASI BAHASA Alfabet: Kumpulan dari objek-objek yang disebut dengan symbol. Contoh: 1 = { a,b,c,.,z} 2 = {c,f} Bahasa: Kumpulan symbol-simbol yang ditulis secara berurutan. Tata bahasa (Grammar): Sekumpulan dari himpunan variabel-variabel, simbolsimbol terminal, simbol non-terminal, symbol awal yang dibatasi oleh aturanaturan produksi. 4
GRAMMAR Sebuah grammar didefinisikan dengan 4 tipe: Dimana: ( Vn, Vt, S, Q) Vn: simbol non terminal (ditulis dgn huruf besar) Vt: simbol terminal (ditulis dgn huruf kecil) S: suatu elemen tertentu dari Vn yang disebut simbo start Q: sebuah elemen (α,β) dari Q yang ditulis sebagai α β yang disebut produksi 5
ATURAN PRODUKSI Aturan produksi dinyatakan dalam bentuk: α β ; (α menghasilkan(menurunkan) β) α simbol-simbol untuk ruas kiri, β simbol-simbol untuk ruas kanan Simbol-simbol bisa berupa terminal atau nonterminal Contoh aturan produksi: T E a, artinya T menghasilkan a T T + E, artinya E menghasilkan T atau menghasilkan T + E 6
HIRARKI CHOMSKY 7
HIRARKI CHOMSKY Tipe 0 ( Unrestricted Grammar) Ciri : α, β (V T V N )*, α > 0 Tidak ada batasan aturan produksi Abc De Tipe 1 (Context Sensitive Grammar) Ciri : α, β (V T V N )*, 0 < α β Panjang string ruas kiri harus <= ruas kanan Ab DeF CD ef 8
HIRARKI CHOMSKY Tipe 2 (Context Free Grammar) Ciri : α V N, β (V T V N )*, α > 0 Ruas kiri haruslah tepat satu simbol variabel nonterminal B D CdeFg BcDe Tipe 3 (Regular Grammar) Ciri: α V N, β {V T, V T V N },atau α V N, β {a, bc} Ruas kanan hanya memiliki maksimum 1 simbol non-terminal yang diletakkan paling kanan sendiri A A C efg efgh D 9
CONTEXT FREE GRAMMAR Contoh L(G3) = { a n b a n n >= 1 } Dimana: G3 = ( {S,C}, {a,b}, S, Q ) Dengan Q adalah produksi: S aca C aca C b Contoh turunan/derifasi untuk a 3 ba 3 : S aca a aca a aa aca aa aaabaaa 10
BACKUS NAUR FORM (BNF) Aturan produksi dapat dinyatakan dengan notasi BNF BNF menggunakan abstraksi untuk struktur sintaks: ::= <> { } terminal Contoh: : sama identik dengan simbol : sama dengan atau : pengapit simbol non terminal : elemen yang ada didalamnya merupakan Aturan produksi sebagai berikut : E T T + E T E T a 11
BACKUS NAUR FORM (BNF) Notasi BNF : E ::= <T> <T> + <E> <T> - <E> T ::= a <identifier> ::= <letter> <identifier><letter> <letter> ::= a b c y z 12
ATURAN LEKSIKAL / LEXICAL ANALYSIS (SCANNER) Berhubungan dengan bahasa sering disebut dengan SCANNER bertugas sebelum proses syntax analyzer dan intermediate code dilakukan dimana tugas analisis leksikal ini mendekomposisikan program sumber menjadi bagian-bagian kecil. Tugas-tugasnya secara detil adalah : 1. Mengidentifikasi semua pesan yang mengandung bahasa 2. Mentransformasikan ke token-token (simbol terminal) 3. Menentukan jenis dari token-token 4. Menangani kesalahan 5. Menangani table simbol 6. Scanner di desain untuk mengenali keyword, operator, identifier 13
ATURAN LEKSIKAL / LEXICAL ANALYSIS (SCANNER) Contoh: Besaran lexical (tergantung programnya) Identifier dapat berupa keyword seperti : IF THEN ELSE, BEGIN.END (pada PASCAL), integer (PASCAL), int,float (Bahasa C) Konstanta besaran yang berupa bilangan bulat (integer), bilangan pecahan (float/real), Boolean (true/false), string dsb Operator : Operator aritmatika, operator logika (and, or,not), operator relational (<,>,=,!=) Delimiter : berguna sebagai pemisah / pembatas seperti kurung buka, kurung tutup, titik, koma, titik dua, titik koma. White space : pemisah yang diabaikan oleh program seperti enter, spasi 14
ATURAN LEKSIKAL / LEXICAL ANALYSIS (SCANNER) Bilangan penyajian internal Identifier (variabel) : 1 Identifier (konstanta) : 2 Identifier (label) : 3 Identifier (keyword) : 4 Operator (penjumlahan) : 5 Operator (penugasan) : 6 Operator (pengurangan) : 7 Operator (perkalian) : 8 Operator (pembagian) : 9 Tanda baca (koma) : 10 Tanda baca (titik dua) : 11 Tanda baca (titik koma) : 12 15
ATURAN LEKSIKAL / LEXICAL ANALYSIS (SCANNER) Contoh. Statement : Fahrenheit := 32 + celcius * 1.8 Token Bil. Penyajian Besaran Leksikal Lokasi Fahrenheit 1 Identifier 1 := 6 Operator (penugasan) 0 32 2 Konstanta (integer) 2 + 5 Operator (penjumlahan) Celcius 1 Identifier 3 * 8 Operator (perkalian) 0 1.8 2 Konstanta (real) 4 0 16
ATURAN SYNTACTIC / SYNTAX ANALYZER (PARSER) Bertugas memeriksa kebenaran dari urutan token-token yang terbentuk oleh leksikal analisis. Pengelompokkan ke dalam class sintaks (bentuk sintaks) seperti procedure, stat n dan ekspresi. Grammar dipakai oleh sintaks analyzer untuk menetukan struktur dari program sumber. Proses pendeteksian (pengenalan token) disebut dengan parsing, maka syntax analyzer sering disebut dengan parser. 17
ATURAN SYNTACTIC / SYNTAX ANALYZER (PARSER) Pohon sintaks yang dihasilkan digunakan untuk semantic analyzer yang bertugas untuk menentukan maksud dari program sumber, misalnya operator penjumlahan maka semantic analyzer akan mengambil aksi apa yang harus dilakukan. Parsing atau proses penurunan dapat dilakukan dengan: 1. Penurunan terkiri (leftmost derivation): simbol variabel yang paling kiri diturunkan dahulu 2. Penurunan terkanan (rightmost derivation): simbol variabel yang paling kanan diturunkan dahulu 18
ATURAN SYNTACTIC / SYNTAX ANALYZER (PARSER) Ada 2 metoda parsing: 1. TOP-DOWN PARSING: Konstruksi pohon sintaks dimulai dari akar dilanjutkan turun kebawah menuju daun Meliputi, Backtrack: Brute Force Memilih aturan produksi mulaik dari kiri Meng-expand simbol nonterminal sampai simbol terminal Bila terjadi kesalahan (string tidak sesuai) maka dilakukan back track Algoritma ini membuat pohon parsing secara top-down, yaitu dengan cara mencoba segala kemungkinan untuk setiap nonterminal BOTTOM-UP PARSING: Konstruksi dimulai dari daun, bergerak keatas menuju akar 19
ATURAN SYNTACTIC / SYNTAX ANALYZER (PARSER) Contoh: Buatlah derifasi kiri & kanan dari string aabbaa dari context free grammar S A aas a SbA ba Penurunan kiri S aas a SbA S aaba S aabba S aabba a Penurunan kanan S aas a A a a SbA a a Sbba a a a bbaa 20
21