P 5,6,7 Notasi Bahasa
P 5,6,7 Notasi Bahasa
DAN
NOTASI BAHASA
KONSEP DAN NOTASI BAHASA
Teknik Kompilasi merupakan kelanjutan dari konsep-konsep yang
telah kita pelajari dalam teori bahasa dan automata
Kemungkinan2 yang
Terjadi diperlihatkan gambar :
REVIEW MESIN AUTOMATA MISAL :
FSA
FSA State Diagram nya adalah :
CONTOH LAIN : FSA
Konsep dan Notasi bahasa
Penggolongan Chomsky
Bahasa Mesin Automata Aturan Produksi
Tipe 3 Finite state automata (FSA) adalah simbol variabel
Atau meliputi; deterministic maksimal memiliki sebuah
Regular Finite Automata (DFA) & simbol variabel yang bila ada
Non Deterministic Finite terletak diposisi paling kanan
Automata (NFA)
Tipe 2 Push Down Automata adalah simbol variabel
Atau
Contex Free
Tipe 1 Atau Linier Bounded Automata || <= ||
Contex Sensitive
Unrestricted
Context Sensitive
Context free
Regular
Regular
CONTOH TATA BAHASA SEDERHANA
<program> BEGIN <Statement-list> END
huruf
ID
PLUS +
Huruf, Digit
S
Digit
-
MINUS INT
Blank Digit
NOTASI BNF (BACKUS-NOUR FORM)
Aturan Produksi bisa dinyatakan dengan notasi BNF
BNF menggunakan abstraksi untuk struktur syntax
::= sama identik dengan simbol
| sama dengan atau
<> pengapit simbol non terminal
{} Pengulangan dari 0 sampai n kali
Misalkan aturan produksi sbb:
E T | T+E | T-E
Ta
Notasi BNFnya adalah
E ::= <T> | <T> + <E> | <T> - <E>
T ::= a
DIAGRAM SYNTAX
Alat bantu (tools) dalam pembuatan parser/ analisis
sintaksis
Misalnya +
E T | T+E | T-E -
BNF: <Block> ::= BEGIN <statement> { SEMICOL
<statement>} END
;
KETERANGAN
Lexical Analyzer = scanner, Syntax Analyzer, dan Intermediate Code
merupakan fungsi Analisis dalam compiler, yang bertugas
mendekomposisi program sumber menjadi bagian-bagian kecil
Misalnya: S AB
A aA | a
B bB | B
A SbA | ba
PARSING ATAU PROSES PENURUNAN
Penurunan kiri : Penurunan kanan :
Algoritma ini membuat pohon parsing secara top-down, yaitu dengan cara mencoba
segala kemungkinan untuk setiap simbol non-terminal
S aAd | aB
Ab|c
B ccd | ddc
a A d a A d
b
Terjadi kegagalan (iii), dilakukan back track
(iv) S (v) S (vi) S
a A d a B a B
c c c d
Terjadi kegagalan lagi (iv), dilakukan back-track
PARSING: BRUTE FORCE
Kelemahan dari metode-metode brute-force
1. E T | T + E | T - E
TF|F*T|F/T
Fi
accept (diterima)
BRUTE FORCE : CONTOH
2. E T | E+T | E-T
T F | T* F | T / F
Fi
accept (diterima)
3. E E+T | E-T | T
T T* F | T / F | F
Fi
A A 1 | A 2 | ... | A n
1. A 1 Z | 2 Z | ... | n Z
2 Z 1 | 2 | ... | n
3 Z 1 Z | 2 Z | ... | n Z
Aturan produksi : Brute force
Pergantian dilakukan untuk setiap aturan produksi dengan simbol ruas
kiri yang sama, bisa muncul variabel Z1, Z2 dst, sesuai dengan variabel
yang menghasilkan rekurisif kiri
S Sab | Sbd
Ruas Kiri untuk S: 1=ab , 2=bd
Aturan Produksi yang tidak rekursif kiri
S aSc | dd | ff
dari situ didapat untuk Ruas Kiri untuk S: 1 = aSc, 2 = dd, 3= ff
Aturan produksi : Brute force
Langkah berikutnya adalah penggantian yang rekursif kiri
S Sab | Sbd, dapat digantikan dengan
1. S aScZ1 | ddZ1 | ffZ1
2. Z1 ab | bd
3. Z1 abZ1 | bdZ1
Metode ini digunakan untuk aturan produksi yang memiliki alternatif yang
sedikit
PARSING: RECURSIVE DESCENT PARSER
Parsing dengan Recursive Descent Parser
Dengan cara penurunan secara recursif untuk semua variabel dari awal sampai
ketemu terminal
Beda dengan turing yang selalu maju dan mundur dalam melakukan parsing
SEMANTICS ANALYSER
Proses ini merupakan proses kelanjutan dari proses
kompilasi sebelumnya, yaitu analisa leksikal (scanning)
dan analisa sintaks (parsing)
Bagian terakhir dari tahapan analisis adalah analisis
semantik
Memanfaatkan pohon sintaks yang dihasilkan dari
parsing
Proses analisa sintak dan analisa semantik merupakan
dua proses yang sangat erat kaitannya, dan sulit untuk
dipisahkan
SEMANTICS ANALYSER
Memeriksa tipe
Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement - statement
yang ada, Misalnya bila terdapat suatu operasi, diperiksa tipe operand nya
SEMANTICS ANALYSER
Contohnya;
expresi yang mengikut IF berarti tipenya boolean, akan diperiksa tipe
identifier dan tipe ekspresinya
Bila ada operasi antara dua operand maka tipe operand pertama harus
bisa dioperasikan dengan operand yang kedua
Intermediate code ini lebih mudah dipahami dari pada kode assembly
atau kode mesin
Notasi POSTFIX
Misalnya :
( a +b ) * ( c+d )
ab+ cd+ *
Semua instruksi kontrol program yang ada diubah menjadi notasi postfix, misalnya
Instruksi : a:= 1
WHILE a < 5 DO
a := a + 1
Dalam bentuk Postfix
10 a 18 a
11 1 19 a
12 := 20 1
13 a 21 +
14 5 22 :=
15 < 23 13
16 25 24 BR
17 BZ 25
N-TUPLE
Notasi N-Tuple
Pada notasi N-Tuple setiap baris bisa terdiri dari beberapa tupel.
Format umum dari notasi N-Tuple adalah :
operator ………….N-1 operan
Notasi N-Tuple yang biasa digunakan adalah notasi 3 tupel dan 4 tupel.
Triples Notation
Memiliki format
<operator><operand><operand>
contoh, instruksi :
A:=D*C+B/E
Bila dibuat Kode Antara tripel:
1. *,D,C
2. /,B,E
3. +,(1),(2)
4. :=,A,(3)
N-TUPLE
Kekurangan dari notasi tripel adalah sulit pada saat melakukan optimasi, maka dikembangkan
Indirect Triples yang memiliki dua list (senarai), yaitu list instruksi dan list eksekusi. List
instruksi berisi notasi tripel, sedangkan list eksekusi mengatur urutan eksekusinya. Misalnya
terdapat urutan instruksi :
A := B+C*D/E
F := C*D
contoh instruksi:
A:=D*C+B/E
Contoh :
(A+B)*(C+D)
Dalam kode antaranya dalam bentuk notasi Quadruples
1. +, A, B, T1
2. +, C, D, T2
3. *, T1, T2, T3
Dapat ditranslasikan ke dalam bahasa assembly dengan akumulator tunggal :
LDA A {muat isi A ke akumulator}
ADD B {tambahkan isi akumulator dengan B}
STO T1 {simpan isi akumulator ke T1}
LDA C
ADD D
STO T2
LDA T1
MUL T2
STO T3
SELESAI