Matakuliah : Konsep Bahasa Pemrograman Tahun : 2010 SINTAKS DAN SEMANTIK Pertemuan 2 Outline Materi • • • • • Pendahuluan Masalah Umum mendeskripsikan Sintaks Metode Formal mendeskripsikan Sintaks Atribut Grammar Semantik Dinamik Bina Nusantara University 3 • • • • Pendahuluan Sintaks: bentuk atau struktur ekspresi, pernyataan dan unit program Semantik: arti dari ekspresi, pernyataan dan unit program Sintaks dan semantik menyajikan definisi bahasa Pengguna definisi bahasa: desainer bahasa lain, implementor, dan pemrogram Bina Nusantara University 4 Masalah Umum menguraikan Sintaks : Terminologi • Kalimat (atau sentence) adalah string karakter sejumlah alfabet • Bahasa adalah himpunan dari kalimat • Lexeme adalah unit sintatik level terendah suatu bahasa (e.g., *, sum, begin) • Token adalah kategori dari lexeme (e.g., identifier) Bina Nusantara University 5 Contoh • Pernyataan C: index = 2 * count + 17; • Lekseme Token index identifier = tanda samadengan 2 literal integer * operator multiplikasi count identifier + operator tambah 17 literral integer ; titik koma Bina Nusantara University 6 Definisi Formal suatu Bahasa • Recognizers – Alat pengenal membaca string input suatu bahasa dan menentukan apakah string input tersebut berada dalam bahasa – Contoh: analisis sintaks suatu kompilator • Generators – Alat untuk membentuk kalimat suatu bahasa – Kita dapat menentukan jika sintaks suatu kalimat adalah benar dengan membandingkan ia ke struktur dari generator Bina Nusantara University 7 Metode Formal untuk mendeskripsikan Sintaks • Backus-Naur Form (BNF) dan Context-Free Grammars (CFG) • BNF – Metode yang paling banyak dikenal untuk mendeskripsikan sintaks bahasa pemrograman – Dikenalkan oleh John Backus (1959) dan dimodifikasi oleh Peter Naur (1960) • Perluasan (Extended) BNF, untuk memperbaiki readability dan writability BNF • CFG – Dikembangkan oleh Noam Chomsky dipertengahan 1950-an – Language generators, alat untuk menguraikan sintaks bahasa natural Bina Nusantara University – Mendefinisikan klas bahasa disebut context-free languages 8 BNF • Ditemukan oleh John Backus untuk mendeskripsikan Algol 58 dan kemudian dimodifikasi oleh Peter Naur tahun 1959 • BNF ekuivalen dengan CFG • BNF adalah metalanguage yang digunakan untuk mendeskripsikan bahasa lain • Di BNF, abstraksi digunakan untuk menyajikan klas struktur sintatik – mereka berlaku sebagai variabel sintatik (disebut juga nonterminal symbols) – <assign> adalah abstraksi dari pernyataan assignment (penugasan) Bina Nusantara University 9 Fundamental BNF • • • • Non-terminals: abstraksi BNF Terminals: lexemes dan tokens Grammar: koleksi rules Contoh BNF rules: <ident_list> → identifier | identifier, <ident_list> <if_stmt> → if <logic_expr> then <stmt> Bina Nusantara University 10 BNF Rules • Rule terdiri dari left-hand side (LHS) dan righthand side (RHS), dan terdiri dari simbol-simbol terminal dan nonterminal • Grammar adalah himpunan rule yang terbatas dan tidak kosong (nonempty) • Abstraksi (atau simbol nonterminal) dapat mempunyai lebih dari satu RHS <stmt> <single_stmt> | begin <stmt_list> end Bina Nusantara University 11 Definisi Aktual • <assign> → <var> = <expression> • LHS : abstraksi • RHS : – Definisi LHS – Disebut rule of production – Terdiri dari simbol terminal (lexeme dan token) dan simbol non-terminal (i.e. referensi ke abstraksi lain). Bina Nusantara University 12 Menguraikan List • List sintaktik diuraikan menggunakan rekursi <ident_list> ident | ident, <ident_list> • Rule disebut recursif jika bagian LHS muncul di bagian RHS. • Derivasi adalah aplikasi berulang dari rule, mulai dari start symbol dan berakhir dengan sentence (semua simbol terminal Bina Nusantara University 13 Grammar dan Derivasi • Kalimat digenerasi melalui sekuen aturan, mulai dari (non terminal) start symbol. • Pembentukan kalimat disebut derivasi • Untuk suatu bahasa start symbol mewakili program utuh dan disebut <program> Bina Nusantara University 14 Contoh Grammar <program> <stmts> <stmts> <stmt> | <stmt> ; <stmts> <stmt> <var> = <expr> <var> a | b | c | d <expr> <term> + <term> | <term> <term> <term> <var> | const Bina Nusantara University 15 Contoh Derivasi <program> => <stmts> => <stmt> => <var> = <expr> => a =<expr> => a = <term> + <term> => a = <var> + <term> => a = b + <term> => a = b + const Bina Nusantara University 16 Grammar untuk pernyataan penugasan • <assign> → <id> = <expr> <id> → A | B | C <expr> →<id> + <expr> | <id> * <expr> | <expr> | <id> Bina Nusantara University 17 Generasi A = B * (A + C) • <assign>→ <id> = <expr> → A = <expr> → A = <id> * <expr> → A = B * <expr> → A = B * (<expr>) → A = B * (<id> + <expr>) → A = B * ( A + <expr> ) → A = B * ( A + <id>) →A=B*(A+C) Bina Nusantara University 18 Derivasi • Setiap string simbol dalam derivasi adalah sentential form • Sentence adalah sentential form yang hanya mempunyai simbol terminal • Leftmost derivation adalah derivasi dimana simbol non-terminal paling kiri disetiap sentential form adalah yang dikembangkan • Derivasi mungkin leftmost atau rightmost Bina Nusantara University 19 Parse Tree • Representasi hirarki dari derivasi <program> <stmts> <stmt> <var> = <expr> a <term> + <term> <var> const b 1-20 Ambiguitas Grammar • Grammar disebut ambiguous jika dan hanya jika mengenerate sentential form yang mempunyai dua atau lebih parse trees berbeda Gambar parse tree dari ambiguitas grammar berikut <expr> <expr> <op> <expr> | const <op> / | - Bina Nusantara University 21 Unambiguous Grammar • Jika kita menggunakan parse tree untuk menunjukkan level precedence operator, kita tidak akan mempunyai ambiguitas • Gambar parse tree dari unambiguitas tree berikut <expr> <expr> - <term> | <term> <term> <term> / const| const Bina Nusantara University 22 Asosiativitas Operator • Operator asosiativitas juga dapat diindikasikan oleh grammar <expr> -> <expr> + <expr> | (ambiguous) <expr> -> <expr> + const | (unambiguous) Bina Nusantara University const const 23 EBNF • Bagian opsional diletakkan di brackets [ ] <proc_call> -> ident [(<expr_list>)] • Bagian alternatif RHS diletakkan didalam parentheses ( ) dan dipisahkan dengan garis vertikcal | <term> → <term> (+|-) const • Repetisi (0 atau lebih) diletakkan didalam braces { } <ident> → letter {letter|digit} Bina Nusantara University 24 BNF dan EBNF • BNF <expr> <expr> + <term> | <expr> - <term> | <term> <term> <term> * <factor> | <term> / <factor> | <factor> • EBNF <expr> <term> {(+ | -) <term>} <term> <factor> {(* | /) <factor>} Bina Nusantara University 25 Attribute Grammar (AG) • CFG tidak bisa menguraikan semua sintaks bahasa pemrograman • Tambahan ke CFG untuk menjelaskan informasi semantik sepanjang parse trees • Nilai AG – Spesifikasi static semantics – Compiler design (static semantics checking) Bina Nusantara University 26 Definisi AG • AG adalah CFG G = (S, N, T, P) dengan sejumlah tambahan: – Untuk setiap simbol grammar x terdapat himpunan nilai atribut A(x) – Setiap production rule mempunyai himpunan fungsi yang mendefinisikan atribut tertentu dari simbol nonterminals dalam rule – Setiap production rule mempunyai (mungkin kosong) himpunan predikat untuk mencek konsistensi atribut Bina Nusantara University 27 Definisi AG • Diketahui X0 X1 ... Xn adalah production rule • Fungsi berbentuk S(X0) = f(A(X1), ... , A(Xn)) mendefinisikan synthesized attributes – Ditentukan dari node anak dalam parse tree – Kirim informasi semantik up the tree • Fungsi berbentuk I(Xj) = f(A(X0), ... , A(Xn)), for i <= j <= n, mendefinisikan inherited attributes – Ditentukan dari parent dan sibling – Kirim informasi semantik down the tree • Awalnya, terdapat intrinsic attributes di leaves – Ditentukan dari luar tree Bina Nusantara University 28 Contoh AG • Sintaks <assign> -> <var> = <expr> <expr> -> <var> + <var> | <var> <var> A | B | C • actual_type: synthesized for <var> and <expr> • expected_type: inherited for <expr> Bina Nusantara University 29 Contoh AG (lanjutan) • Syntax rule: <expr> <var>[1] + <var>[2] Semantic rules: <expr>.actual_type <var>[1].actual_type Predicate: <var>[1].actual_type == <var>[2].actual_type <expr>.expected_type == <expr>.actual_type • Syntax rule: <var> id Semantic rule: <var>.actual_type lookup (<var>.string) Bina Nusantara University 30 AG (lanjutan) • Bagaimana nilai atribut dihitung? – Jika semua atribut diwariskan, tree dibaca secara top-down. – Jika semua atribut disintesakan , tree dibaca secara bottom-up. – Dalam banyak hal, kedua tipe atribut digunakan, maka kombinasi top-down dan bottom-up yang harus digunakan. Bina Nusantara University 31 AG (lanjutan) <expr>.expected_type inherited from parent <var>[1].actual_type lookup (A) <var>[2].actual_type lookup (B) <var>[1].actual_type =? <var>[2].actual_type <expr>.actual_type <var>[1].actual_type <expr>.actual_type =? <expr>.expected_type Bina Nusantara University 32 Semantik Dinamik • Menguraikan arti konstruksi bahasa pemrograman • Tidak ada satupun notasi yang diterima secara luas untuk menguraikan semantik. • Tipe semantik – Operasional – Aksiomatik – Denotational • Semuanya masih dalam tahapan penelitian, belum sampai pada tataran praktis • Sebagian besar kompilator menggunakan Bina Nusantara University 33 Semantik Operasional • Menguraikan arti program dengan mengeksekusi pernyataan di mesin, mungkin simulasi atau aktual. Perubahan di dalam state (memory, registers, dst.) mendefinisikan arti dari pernyataan • Untuk menggunakan semantik operasional, dibutuhkan mesin virtual karena – Hardware terlalu mahal – Software juga punya masalah • Karakteristik rinci dari komputer tertentu akan membuat aksi sukar dipahami Bina Nusantara University • Semantik semacam ini memerlukan machine- dependent 34 Semantik Operasional (lanjutan) • Alternatif yang lebih baik: simulasi komputer • Proses: – Kembangkan translator (menterjemahkan kode sumber ke kode mesin dari komputer ideal) – Kembangkan simulator untuk komputer ideal • Evaluasi semantik operasional – Baik jika digunakan nonformal – Sangat kompleks jika digunakan secara formal; digunakan untuk menguraikan semantik PL/I. Bina Nusantara University 35 Semantik Aksiomatik • Didasarkan ada logika formal (kalkulus predikat) • Tujuan awal untuk verifikasi program secara formal • Aksioma atau rule inferensi didefinisikan untuk disetiap tipe pernyataan sehingga memungkinkan transformasi ekspresi, disebut assertion, ke ekspresi lain • Assertion sebelum pernyataan (disebut precondition) menyatakan bahwa relationships dan constraints diantara variabel adalah benar saat eksekusi • Assertion sesudah pernyataan disebut postcondition • Weakest precondition adalah least restrictive precondition yang menjamin bahwa postcondition berlaku. Bina Nusantara University 36 Bentuk Semantik Aksiomatik • Pre-, post form: {P} statement {Q} • Contoh – a = b + 1 {a > 1} – Satu precondition yang mungkin: {b > 10} – Weakest precondition: {b > 0} • Postcondition untuk seluruh program adalah hasil yang diiinginkan – Telusuri progam ke pernyataan pertama. Jika precondition di pernyataan pertama sama seperti spesifikasi program, program adalah benar. Bina Nusantara University 37 Aksioma di Semantik Aksiomatik (1) • Aksioma adalah pernyataan logikal yang diasumsikan true • Aksioma untuk pernyataan penugasan (x = E): {Qx->E} x = E {Q} • Aturan konsekuensi {P} S {Q}, P' P, Q Q' {P' } S {Q' } Bina Nusantara University 38 Aksioma di Semantik Aksiomatik (2) • Aturan inferensi untuk sekuen {P1} S1 {P2} {P2} S2 {P3} {P1} S1{P2}, {P2} S2 {P3} {P1} S1; S2 {P3} Bina Nusantara University 39 Aksioma di Semantik Aksiomatik (3) • Aturan inferensi untuk logical pretest loops {P} while B do S end {Q} (I and B) S {I} {I} while B do S {I and (not B)} dimana I adalah loop invariant (hipotesa induktif) Bina Nusantara University 40 Aksioma di Semantik Aksiomatik • Karakteristik loop invariant I harus memenuhi kondisi berikut – – – – – P => I -- the loop invariant must be true initially {I} B {I} -- evaluation of the Boolean must not change the validity of I {I and B} S {I} -- I is not changed by executing the body of the loop (I and (not B)) => Q -- if I is true and B is false, is implied The loop terminates • Loop invariant I adalah versi weak dari loop postcondition, sehingga juga berlaku untuk precondition. • I harus cukup lemah untuk memenuhi kondisi awal loop, tetapi jika dikombinasikan kondisi dengan untuk keluar loop, ia harus cukup kuat untuk memaksa kebenaran 41 post-condition Bina Nusantara University Evaluasi Semantik Aksiomatik • Mengembangkan aksioma atau aturan inferensial suatu bahasa adalah sulit. • Ia adalah alat yang baik untuk kebenaran pembuktian, dan kerangka kerja ekselen untuk penalaran program tetapi tidak terlalu bermanfaat untuk selain bagi pengguna bahasa dan penulis kompilator. • Manfaat untuk menguraikan arti bahasa pemrograman dibatasi bagi pengguna bahasa dan penulis kompilator. Bina Nusantara University 42 Semantik Denotational • Didasarkan pada teori fungsi rekursif • Metode deskripsi semantik yang paling abstrak • Aslinya dikembangkan oleh Scott dan Strachey (1970) • Proses pembentukan spesifikasi denotational untuk suatu bahasa – Definisikan obyek matematika untuk setiap entitas bahasa – Definisikan fungsi yang memetakan instan entitas bahasa ke instan obyek matematika • Arti dari konstruksi bahasa didefinisikan hanya Bina Nusantara University 43 Semantik Denotational vs Operational • Di semantik operasional, perubahan state changes didefinisikan oleh kode program • Di semantik denotational, perubahan state changes didefinisikan oleh fungsi matematika Bina Nusantara University 44 Denotational Semantics: Program State • The state of a program adalah semua nilai variabel saat itu s = {<i1, v1>, <i2, v2>, …, <in, vn>} • Jika i variabel dan s adalah state maka fungsi VARMAP mengembalikan nilai variabel saat itu j yaitu VARMAP(ij, s) = vj Bina Nusantara University 45 Bilangan Desimal <dec_num> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9| <dec_num> (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9) Mdec('0') = 0, Mdec (<dec_num> Mdec (<dec_num> … Mdec (<dec_num> Bina Nusantara University Mdec ('1') = 1, …, Mdec ('9') = 9 '0') = 10 * Mdec (<dec_num>) '1’) = 10 * Mdec (<dec_num>) + 1 '9') = 10 * Mdec (<dec_num>) + 9 46 Ekspresi • Petakan ekspresi ke Z {error} • Kita asumskan ekspresi adalah bilangan desimal, variabel atau ekspresi biner yang mempunyai satu operator hitung dan dua operan, masing-masing boleh berbentuk ekspresi Bina Nusantara University 47 Semantik Denotational (lanjutan) Me(<expr>, s) = case <expr> of <dec_num> => Mdec(<dec_num>, s) <var> => if VARMAP(<var>, s) == undef then error else VARMAP(<var>, s) <binary_expr> => if (Me(<binary_expr>.<left_expr>, s) == undef OR Me(<binary_expr>.<right_expr>, s) = undef) then error ... Bina Nusantara University else if (<binary_expr>.<operator> == ‘+’ then Me(<binary_expr>.<left_expr>, s) + Me(<binary_expr>.<right_expr>, s) else Me(<binary_expr>.<left_expr>, s) * Me(<binary_expr>.<right_expr>, s) 48 Pernyataan Penugasan • Maps state sets to state sets Ma(x := E, s) = if Me(E, s) == error then error else s’ = {<i1’,v1’>,<i2’,v2’>,...,<in’,vn’>}, where for j = 1, 2, ..., n, vj’ = VARMAP(ij, s) if ij <> x = Me(E, s) if ij == x Bina Nusantara University 49 Logical Pretest Loops • Maps state sets to state sets Ml(while B do L, s) = if Mb(B, s) == undef then error else if Mb(B, s) == false then s else if Msl(L, s) == error then error else Ml(while B do L, Msl(L, s)) Bina Nusantara University 50 Arti Loop • Arti dari loop adalah nilai variabel program sesudah pernyataan dalam loop dieksekusi beberapa kali dengan asumsi tidak ada eror. • Esensinya, loop dikonversi dari iterasi ke rekursi dimana kontrol rekursi secara matematis didefinisikan oleh fungsi rekursi pemetaan state lain • Rekursi, jika dibandingkan dengan iterasi, lebih mudah diuraikan secara matematis . Bina Nusantara University 51 Evaluasi Semantik Denotational • Dapat digunakan untuk membuktikan kebenaran program • Menyediakan cara yang rigorous untuk mempelajari program • Dapat menjadi alat bantu untuk merancang program • Telah digunakan dalam men-generate sistem kompiler • Karena kompleks, jarang digunakan oleh pengguna bahasa Bina Nusantara University 52 LATIHAN A. SOAL URAIAN 1. Axiomatic semantic didesain berdasarkan a. predicate calculus b. algebra calculus c. lambda calculus d. general calculus 2.Tool yang digunakan untuk membuktikan kebenaran suatu program adalah a. axiomatic semantic b. operational semantic c. denotational semantic d. axiomatic, operational dan denotational semantics. 3.Denotational semantic dikembangkan berdasarkan a. mathematical logic b. recursive function theory c. induction theory d. inference rule Bina Nusantara University 53 LATIHAN 4. Basis yang digunakan oleh axiomatic semantic adalah a. algebra calculus b. lambda calculus c. predicat calculus d. logical calculus 5. RHS dari suatu abstraksi terdiri dari a. token b. lexeme c. referensi untuk abstraksi lain d. lexeme, token, dan referensi untuk abstraksi lain Bina Nusantara University 54 LATIHAN B. SOAL URAIAN 1. Consider the following grammar <S> <A> a <B> b <A> <A> b | b <B> a <B> | a which of the following sentences are in the language generated by this grammar? a. baab b. bbbab c. bbaaaaa d. bbaab 2. Compute the weakest precondition for the following sequences of assignment statement and their postconditions. a=2*b+1 b=a–3 {b<0} Bina Nusantara University 55 Ringkasan • BNF dan CFG adalah meta-languages yang ekuivalen – Sangat bermanfaat untuk menguraikan sintaks bahasa pemrograman • AG secara formal dapat digunakan untuk mendeskripsikan sintaks dan semantik bahasa • Tiga metode utama mendskripsikan semantik bahasa adalah – Operasional, aksiomatik, denotational Bina Nusantara University 56
© Copyright 2024 Paperzz