Teknik Kompilasi
07 / 1 - 11
TOP-DOWN PARSING Dapat dipandang sebagai : • Usa Usaha untu untuk k menca encarri left leftm most derierivation dari suatu input string • Usaha untuk membangun parse tree dari suat uatu input string ing, dimu imulai lai dari root (top) sampai dengan leaves (bottom), dengan urutan preorder.
JENIS-JENIS TOP-DOWN PARSER Recursive-descent parser Predictive parser
RECURSIVE DESCENT PARSING Sua Suatu top-do -down par parsing ing yg mung ungkin mem memerlu erluka kan n bac backtra ktrack ckin ing g (mem (memb baca aca input ber-ulang kali) Tidak efisien ! Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
07 / 2 - 11
Contoh : Grammar G :
S → cAd A → ab | a dan input string w = cad maka langkah-langkah pada top-down parse : S c
A
S d
c
A
a (a)
S d b
(b)
c
A
d
a (c)
Perhatikan bahwa grammar yang mangandung left recursive dapat mengakibatkan loop tak berhingga.
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
07 / 3 - 11
PREDICTIVE PARSING Suatu top-down parsing dimana : 1. Grammarnya tidak mengandung left recursion 2. Pada grammar tersebut telah dilakukan left factoring 3. Untuk input a, maka dapat dilakukan pilihan yang unik untuk mengembangkan A pada : A →α1|α2|...|αn untuk menderivasi string yang dimulai dengan a 4. Tidak memerlukan backtracking ! Contoh : stmt
→ if expr then stmt else stmt | while expr do stmt | begin stmt_list end
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
07 / 4 - 11
Dalam hal ini non-terminal stmt dapat dikembangkan secara unik (pilihannya if , while atau begin ).
Implementasi predictive parser antara lain dapat dilakukan dengan : 1. Menggunakan transition diagram, yang kemudian diterjemahkan ke dalam program 2. Menggunakan stack. MENGGUNAKAN DIAGRAM TRANSITION 1. Satu diagram untuk setiap nonterminal 2. Label transisi : token atau nonterminal (menentukan arah transisi) 3. Bila label = non-terminal A, maka berarti call ke procedure A
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
07 / 5 - 11
Contoh : E→ E+T|T T→ T*F|F F → (E) | id Setelah dihilangkan left recursion dan dilakukan left factoring : E → TE′ E′ → +TE′ | T → FT′ T′ → *FT′ | F → (E) | id Diagram Transition-nya adalah : E : 0
T
E′ :
+
3
1
4
E′
T
2
5
E’
6
ε
T :
7
F
8
T′
9
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
T′ :
F :
*
10
14
(
07 / 6 - 11
11
15
F ε E
12
16
T′
)
13
17
Diagram Transition diatas dapat disederhanakan menjadi : +
E : 0
T
3
∈
6
*
T : F :
7 14
F (
8 15
∈
13
E
16
)
17
id
Implementasi diagram transition yang telah disederhanakan akan menghasilkan parser lebih sederhana dan efisien
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
07 / 7 - 11
IMPLEMENTASI STACK Dalam hal ini komponen-komponen predictive parser terdiri dari: input buffer, stack, parsing table, dan output. a + b $ Input Stack Predictive Output Parsing Program
X Y Z $
Parsing Table M
Mekanisme Kerja Program Parser : Bila X = top of stack, dan a = current input, maka : 1. Jika X = a = $, parser berhenti, karena parsing berhasil. 2. Jika X = a $, pop x, dan geser pointer input ke simbol berikutnya. ≠
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
07 / 8 - 11
4. Jika X = non-terminal, parser memeriksa sel M[X,a] dari parsing table. Sel ini pasti berisi suatu produksi X, atau error entry Jika M[X,a] = X → UVW, maka X akan diganti dengan WVU (U di atas)
Jika M[X,a] = error, parser akan memanggil error routine. Contoh : Dari grammar (predictive Pasing) didapatkan parsing table M berikut : Non Terminal
E E′ T T′ F
Id E→TE′
Input Symbol + * ( E→TE E′→ +TE′ ′
)
$
E′→ε E′→ε
T→FT′ T′ →ε F→id
T′→ *FT′
T→FT′
T′→ε T′→ε
F→ id
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
07 / 9 - 11
Sehingga bila bahasa menerima input string, misalnya : id + id * id Maka, urutan-urutan parsingnya adalah sebagai berikut : Stack $E $E′ T $E′ T′ F $E′ T′ id $E′ T′ $E′ $E′ T+ $E′ T $E′ T′ F $E′ T′ id $E′ T′ $E′ T′ F* $E′ T′ F $E′ T′ id $E′ T′ $E′ $
Input Id + id * id$ Id + id * id$ Id + id * id$ Id + id * id$ + id * id$ + id * id$ + id * id$ id * id$ id * id$ id * id$ * id$ * id$ id$ id$ $ $ $
Output E→TE′ T→FT′ F→id T′→ε E′→ +TE′ T→FT′ F→id T′→ *FT′ F→id T′→ε E′→ε
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
07 / 10 - 11
KONSTRUKSI PARSING TABLE Dibutuhkan 2 fungsi : 1. First (∝) ; ∝ adalah string dari simbol grammar. Himpunan terminal deng* an derivasi dari ∝ , jika ∝ → ε maka ε ada dalam First (∝) 2. Follow (A); A adalah non terminal. Himpunan terminal a dari suatu derivasi maka simbol terminal muncul disebelah kanan A; S *→ ∝ Aaβ untuk ∝ dan β Contoh : G:
Derivasi :
E → E′ → T → T′ → F → E →
TE′ +TE′ | FT′ *FT′ | (E) | id TE′
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
T → F →
07 / 11 - 11
FT′ (E) | id
Maka : First (E) = first(T) = first (F) = { (, id } First (E′ ) = { +, ε } First (T′ ) = { *, ε } Follow (E) = Follow (E′ )={ ), $ } Follow (T) = Follow (T′ )={ +, ), $ } Follow (T) = { +, *, ), $ }
Algoritma pembuatan Tabel predictive Parsing sebagai berikut : Input : Grammar G Output : Parsing Table M Metode : 1. Setiap produksi A→α lakukan langkah 2 dan 3
2. Setiap terminal a dari first() maka tambahkan
A→
α pada M [A,a]
3. Jika ε dalam first(α) maka tambah-kan A→ α pada M[A,b] untuk setiap terminal b dari follow (A). Jika ε dalam first(α) dan $ dalam follow (A), tambahkan A→ α pada M [A,$] 4. Biarkan yang lainnya kosong
Bahan Ajar Matakuliah oleh SINAR SINURAT
Teknik Kompilasi
07 / 12 - 11
Catatan : Dari grammar di atas bahwa : first (TE′ ) = first ( T ) = { (, id } produksi E → TE′ akan ditempatkan pada M[ E, ( ] dan M[ E, id]
Bahan Ajar Matakuliah oleh SINAR SINURAT