Pages

Monday, December 19, 2011

Penjelasan mengenai FOLLOW SET


Wah, ada yang kurang jelas dengan penjelasan sebelumnya tentang follow set?
wahahhaha

Maaf..
Saya juga ngerasa belum jelas setelah baca yang itu-,-
Padahal itu hasil translate-an saya sendiri, dari bahasa ing ke indo.

Nah, karena kurang ngerti, tadi saya sempet di ajarin sama Sungi tentang Follow set ini. ALHAMDULILLAH SAYA NGERTI.. =D

Buat teman-teman yang belum ngerti, TEPAT BANGET udah baca postingan ini. Saya mau ngejelasin sepengetahuan saya tentang follow set ini.
Langsung aja ke contoh ya.. biasanya lebih mudah dipahami kalo pake contoh =D
CEKIBROT..

Misalnya:
Menentukan Follow Set dari grammar berikut:

Follow(E) = ?
Follow(E') = ?
Follow(T) = ?
Follow(T') = ?
Follow(F) = ?





Mulai dari E..

Karena E adalah START SYMBOL, maka masukkan $ pada Follow(E)-nya.






Follow(E)={$, ... }



Kemudian, lihat right production atau produksi sebelah kanan. Carilah yang mengandung E.

Ketemu???






Yap, pada produksi F !
Lihat, di sebelah kanan E ada apa? ) kan?
Karena ) merupakan terminal, maka masukkan ) kedalam Follow(E).



Maka,
Follow(E)={$, )}



Kemudian, menentukan Follow(E').
Sekarang untuk E', carilah production yang mengandung E' di ruas kanan.. (kemanaaa kemanaa kemanaaa~ wkwk)







Nah, terlihat ada 2 produksi yang menghasilkan E', pada produksi E dan E' itu sendiri.
Lihatlah E' pada produksi E, kemudian cek sebelah kanannya. Kosong? berarti itu adalah empty string.
Jika disebelah kanan production (yang ingin dicari follownya) terdapat empty string, maka ambil Follow ruas kirinya.
Karena terdapat E pada ruas kirinya,

maka,  Follow(E') = Follow(E) ={$, )}


Jika ingin memakai E' pada produksi E', maka lihat disebelah kanannya, kosong ! Berarti empty string. Artinya..ambil Follow(E')-nya. Tapi ini tidak mungkin terjadi! sedangkan saat ini kita sedang mencari Follow dari E' itu sendiri. Hal seperti ini disebut rekursif (memanggil dirinya sendiri), sehingga kita tidak bisa menggunakannya, atau cukup menggunakan yang production E' pada produk E.
Dan akhirnya diperoleh Follow(E') ={$, )}

Kemudian, menentukan Follow(T).

Carilah production yang mengandung T di ruas kanan.
Terlihat, T terdapat pada produksi E dan E'.

Lihat samping kanannya, keduanya sama-sama mengandung E' pada kedua ruas kanannya.  Jadi bisa di gunakan yang mana saja.
E' merupakan non-terminal karena masih memiliki turunan atau production.

Jika disebelah kanan production (yang ingin dicari follownya) terdapat non-terminal, maka ambil First dari non-terminal tersebut.


First(E')={+emptyString) #simbol emptyString adalah angka 3 terbalik.
Jika E' menjadi + (+ adalah sebuah terminal), maka grammar E menjadi E -> T+
Jadi, Follow(T)={+, ... }
Jika E' menjadi emptyString, maka grammar E menjadi E -> T emptyString. Karena disebelah kanan T terdapat emptyString, maka ambil Follow ruas kirinya yaitu Follow(E).
Jadi, Follow(T) sekarang menjadi {+Follow(E)}
Follow(T) ={+$, )}


Kemudian, menentukan Follow(T').
Terlihat ada T' yang rekursif, maka diabaikan.
Lihat T' pada produksi T. Di sebelah kanannya terdapat emptyString, maka Follow(T') = Follow ruas kirinya.
atau,
Follow(T') =Follow(T) ={+$, )}





Terakhir, menentukan Follow(F).
Karena sama-sama mengandung T' pada sebelah kanannya, maka boleh pakai yang mana saja.








T' adalah non-terminal, maka lihat First dari T'.

First(T')={*emptyString) #simbol emptyString adalah angka 3 terbalik.
Jika T' menjadi * (* adalah sebuah terminal), maka grammar T menjadi T -> F*
Jadi, Follow(F)={*, ... }
Jika T' menjadi emptyString, maka grammar T menjadi T -> F emptyString. Karena disebelah kanan F terdapat emptyString, maka ambil Follow ruas kirinya yaitu Follow(T).
Jadi, Follow(F) sekarang menjadi {*Follow(T)}
Follow(F) ={*+$, )}

BERES DEH!! =)


Follow(E)={$, )}
Follow(E')={$, )}
Follow(T)={+$, )}
Follow(T')={+$, )}
Follow(F)={*+$, )}









Masih ada yang belum jelas?
Silahkan tanyakan di sini..
Makasih..

Semoga bermanfaat =)

Tag: syntax analyzer, compiler, kompilasi, informatika, Follow Set, followset, informatika

2 comments: