download

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