Describing
Syntax and Semantics
Syntax adalah
bentuk dari expresi bahasa pemrograman, statement, dan program unit.
Semantics adalah
arti dari syntax bagian expresi, statement, dan program unit.
Sebuah string
dari suatu bahasa disebut sentence atau statement.
Deskripsi formal
dari syntax dalam bahasa pemrograman. Lexemes adalah bentuk terkecil dari suatu
syntax. Sebagai contoh :
index = 2 * count +
17;
bentuk
dari lexemes dan tokens sebagai berikut :
Lexemes Tokens
index identifier
= equal_sign
2 int_literal
* mult_op
count identifier
+ plus_op
17 int_literal
; semicolon
Languange
Recognition
Bagian syntax
analisis dari suatu compiler adalah recognizer untuk bahasa translasi compiler.
Recognizer tidak perlu melakukan test pada semua kemungkinan dari suatu string
karakter dari suatu set data untuk menentukan tiap bahasa pemrograman.
Languange
Generator
Languange
Generator adalah alat yang di gunakan untuk generate sebuah kata dari suatu
bahasa.
Context
Free Grammar
Pada context
free grammar language generator digunakan untuk menjelaskan syntax dari natural
language
BNF(Backus
Naur Form)
BNF adalah
notasi natural untuk menjelaskan syntax. BNF equivalent terhadap context free
grammar.
Fundamentals
Metalanguange
adalah bahasa yang digunakan untuk menjelaskan bahasa lain. BNF adakah
metalanguange untuk bahasa pemrograman. BNF menggunakan abstraksi untuk
struktur syntactic. Sebagai contoh :
<assign>
-> <var> = <expression>
Abstraksi pada
BNF deskripsi, atau grammar, biasa disebut nonterminal symbols, atau
nonterminal, dan lexemes dan tokens dari aturan biasa di sebut terminal
symbols, atau terminal. BNF deskripsi adalah kumpulan dari aturan. Sebagai contoh
:
<if_stmt>
-> if
( <logic_expr>
) <stmt>
<if_stmt>
-> if ( <logic_expr> ) <stmt>
else <stmt>
Describing
Lists
Syntatic list
biasa nya di definisikan menggunakan rekulsif, sebagai contoh :
<ident_list>
-> identifier
| identifier,
<ident_list>
Mendefinisikan bahwa
<ident_list> sebagai
single token (identifier) atau identifier yang diikuti oleh koma, dan instance
lain dari <ident_list>.
Grammar
and Derivation
Grammar adalah
alat generative untuk mendefinisikan bahasa. Sentence dari bahasanya di
tentukan melalui urutan aturan aplikasi. Urutan dari aturan aplikasi disebut
dengan derivation.
Sebagai contoh :
<program>
-> begin
<stmt_list> end
<stmt_list>
-> <stmt>
| <stmt>
; <stmt_list>
<stmt>
-> <var>
= <expression>
<var>
-> A | B | C
<expression>
-> <var>
+ <var>
| <var>
– <var>
| <var>
Setiap string
dari symbol pada sebuah derivation disebut dengan sentential form. Sentence dari
sentential form biasanya hanya mempunyai terminal symbol. Leftmost derivation
adalah leftmost nonterminal pada setiap sentential form yang telah di expand. Derivation
antara leftmost dan rightmost.
Parse
tree
Teknik mendefinisikan
menggunakan seperti tree. contoh :
A = B * (A + C)
menjadi
A = B * (A + C)
menjadi
Ambiguity
Grammar dinyatakan
ambigu jika dan hanya dapat dikerjakan dengan sentential form yang memiliki 2
atau lebih distinct parse tree. Sebagai contoh :
<assign>
-> <id>
= <expr>
<id>
-> A | B | C
<expr>
-> <expr>
+ <expr>
| <expr>
* <expr>
| ( <expr>
) | <id>
Operator
Precedence
Ketika sebuah
expression memiliki 2 operator yang berbeda sebagai contoh, x + y * z, maka
operasi yang dilakukan berdasarkan kuat nya dari operator tersebut. / dan *
memiliki kekuatan yang sama dan lebih kuat dari + dan -.
Static
Semantics
Tidak berhubungan
dengan arti. CFG tidak dapat menjelaskan syntax dari sebuah bahasa pemrograman.
Categories dari construct :
-
Context-free
-
Non-context-free
Attribute
Grammars
Attribute grammars
(AG) memiliki tambahan pada CFG untuk membawa beberapa info semantic pada parse
tree node. Primary value dari AG adalah :
-
Static semantics specification
-
Compiler design
Attribute grammar
adalah CFG G = (S, N, T, P) dengan tambahan :
-
Setiap grammar symbol x terdapat sebuah
set A(x) dari attribute nilai
-
Setiap aturan memiliki set fungsi yang
menjelaskan attribute dari nonterminal pada aturan
-
Setiap aturan memiliki set predikat
untuk mengecek attribute konsistensi
Semantics
Menjelaskan arti
dari sebuah program dengan mengeksekusi statement pada mesin.
Semantic di bagi
3 yaitu:
1.
Operational
semantic
Penggunaan
operational semantics:
-
Bahasa manual dan textbook
-
Bahasa pembelajaran pemrograman
Dua level berbeda pada penggunaan
operational semantics:
-
Natural operational semantic
-
Structural operational semantic
2.
Denotational
semantics
-
Berdasarkan teori recursive
-
Metode semantic terabstrak
-
Mendefinisikan objek matematis dari
setiap entity
-
Mendefinisikan fungsi pada peta instance
bahasa entity ke instance yang dapat merespon objek matematika
-
Arti bahasa konstruk yang di definisikan
sebagai nilai dari program variable
3.
Axiomatic
semantic
-
Berdasarkan formal logic (predicate
calculus)
-
Di definisikan tiap statement tipe dalam
bahasa.
-
Logic sexpression di sebut assertions
No comments:
Post a Comment