Anda di halaman 1dari 12

Teknik Kompilasi

07 / 1 - 11

TOP-DOWN PARSING
Dapat dipandang sebagai : Usaha untuk mencari leftmost derivation dari suatu input string Usaha untuk membangun parse tree dari suatu input string, dimulai dari root (top) sampai dengan leaves (bottom), dengan urutan preorder.

JENIS-JENIS TOP-DOWN PARSER


Recursive-descent parser Predictive parser

RECURSIVE DESCENT PARSING


Suatu top-down parsing yg mungkin memerlukan backtracking (membaca 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 d c a (a) (b) S A d b c S A a (c) d

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 E : T +
1

E T

T :

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

07 / 6 - 11

T :

10

11

F E

12

13

F :

14

15

16

17

Diagram Transition diatas dapat disederhanakan menjadi :


+

E : 0 T : F :

T
*

E id

7 14

F (

8 15

13 16

17

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 Input+ b $
Stack

X Y Z $

Predictive Output Parsing Program

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 ETE TFT Fid

Input Symbol + * ( ETE E+TE T T *FT TFT F id

E E T T

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
ETE TFT Fid T E+TE TFT Fid T*FT Fid 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: E E T T F E TE +TE | FT *FT | (E) | id TE

Derivasi :

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

07 / 11 - 11

T F

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

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