TBO.docx

download TBO.docx

of 23

Transcript of TBO.docx

TEORI BAHASA DAN OTOMATAGRAMMAR CONTEXT FREE DAN PARSINGKELOMPOK 10Nama Kelompok : Andika Oktadora Fandi Thuhartanto Muhammad Rizqi Fadilah Mohammad Reza Fahlepi

LABORATORIUM INFORMATIKAUNIVERSITAS GUNADARMA2014

GRAMMAR CONTEXT FREEContext Free Grammar (CFG)/ Bahasa Bebas Konteks adalah sebuah tata bahasa dimana tidak terdapat pembatasan pada hasil produksinya, Contoh Pada aturan produksi : batasannya hanyalah ruas kiri () adalah sebuah simbol variabel. Sedangkan contoh aturan produksi yang termasuk CFG adalah seperti di bawah : B CDeFg D BcDe Context Free Grammar ( CFG ) adalah tata bahasa yang mempunyai tujuan sama seperti halnya tata bahasa regular yaitu merupakan suatu cara untuk menunjukkan bagaimana menghasilkan suatu untai-untai dalam sebuah bahasa.Latar Belakang Context Free Grammar ( CFG )Terinspirasi dari bahasa natural manusia, ilmuwan-ilmuwan ilmu komputer yang mengembangkan bahasa pemrograman turut serta memberikan grammar (pemrograman) secara formal. Grammar ini diciptakan secara bebas-konteks dan disebut ContextFree Grammar (CFG). Hasilnya, dengan pendekatan formal ini, kompiler suatu bahasa pemrograman dapat dibuat lebih mudah dan menghindari ambiguitas ketika parsing bahasa tersebut. Contoh desain CFG untuk parser, misal : B -> BB | (B) | e untuk mengenali Bahasa dengan hanya tanda kurung {(,)} sebagai terminal-nya. Proses parsing adalah proses pembacaan string dalam bahasa sesuai CFG tertentu, proses ini harus mematuhi aturan produksi dalam CFG tersebut.

Bentuk umum produksi CFG adalah : , V N , (VN |VT )*SintaksSintaks merupakan kumpulan aturan yang mendefinisikan suatu bentuk bahasa. Sintaks mendefinisikan bagaimana suatu kata dikombinasikan menjadi suatu statement yang benar sehingga dapat disusun suatu program yang dapat berjalan dengan benar.

Sintaks dari bahasa pemrograman didefinisikan dengan dua kumpulan aturan, yaitu : Aturan Lexical /Lexical Analysis (Scanner) Aturan Sintaksis / Syntax Analyzer (Parser)

Terminologi Sintaks Konsep Dasar Anggota alfabet dinamakan simbol terminal. Kalimat adalah deretan hingga simbol-simbol terminal. Bahasa adalah himpunan kalimat-kalimat. Anggota bahasa bisa tak hingga kalimat. Simbol-simbol berikut adalah simbol terminal : huruf kecil, misalnya : a, b, c, 0, 1, simbol operator, misalnya : +, , dan simbol tanda baca, misalnya : (, ), dan ; string yang tercetak tebal, misalnya : if, then, dan else. Simbol-simbol berikut adalah simbol non terminal /Variabel : huruf besar, misalnya : A, B, C huruf S sebagai simbol awal string yang tercetak miring, misalnya : expr . Huruf yunani melambangkan string yang tersusun atas simbol-simbol terminal atau simbol-simbol non terminal atau campuran keduanya, misalnya : , , dan . Sebuah produksi dilambangkan sebagai , artinya : dalam sebuah derivasi dapat dilakukan penggantian simbol dengan simbol . Derivasi adalah proses pembentukan sebuah kalimat atau sentensial. Sebuah derivasi dilambangkan sebagai : . Sentensial adalah string yang tersusun atas simbol-simbol terminal atau simbol simbol .Turunan (derivation) yang masih memiliki variabel (non-terminal) disebut dengan bentuk sentensial non terminal atau campuran keduanya. Turunan (derivation) yang masih memiliki variabel (non-terminal) disebut dengan bentuk sentensial Tata Bahasa atau Grammar : sekumpulan dari himpunan variabel-variabel, symbol-symbol terminal, symbol non terminal, symbol awal yang dibatasi oleh aturan-aturan produksi. Kalimat adalah string yang tersusun atas simbol-simbol terminal. Kalimat adalahmerupakan sentensial, sebaliknya belum tentu..

Istilah Istilah di Atas sudah pernah di bahas di bab sebelumnya Selanjutnya kita akan bahas tentang Phrase , simple phare, dan handle . Misalkan G = (Vn,Vt,S,0) adalah Grammar, dan=Q1,,Q2 adalah Bentuk SensialBeta disebut phrase dari bentuk sensual alpha, untuk beberapa non terminal A, Jika S === > === > Q1,A,Q2DanA=== > === > Beta disebut sebagai simple phrase jika S === > === > Q1,A,Q2DanA=== > Contoh :Pandang Bentuk Sentensial dalam Grammer berikut ini :Gs = ({,,},{a,b.z,0,1,9}, ,Q) dengan produksi Q adalah :::= ||::=a|b|.|y|z ::= 0|..|9

Bentuk Sentensial ini diperoleh dari deretan produksi :identifier>== >== >== >Di sini tidak terdapat derivasi menjadi , jadi adalah bukan phrase dari bentuk sentensial ini .

Apakah b merupakan phrase dari b?Sebuah derivasi dari bentuk sentensial ini adalah :identifier>== >== > == > bDi sini : === > === > dan == > b, maka b adalah phrase , Di sini b adalah sebuah simple phrase .Derivasi yang lain dari bentuk sentensial ini adalah identifier>== >== > b== > bDi sini : === > === >b dan == >,Berarti < letter> juga phrase, yang juga sebuah simple phrase dan bentuk sentensial b .

Handel dari sebuah bentuk sentensial adalah simple phrase terkiri(leftmost) dari bentuk sentensial tersebut .Seperti contoh yang lalu, untuk bentuk sentensial b, kita mempunyai dua kemungkinan simple phrase , yakni , dan b. Di sini adalah Leftmost simple phrase , sehingga ia merupakan handle .PARSINGAnalisis sintak lebih sering disebut penguraian (parsing). Parsing adalah suatu cara memecah-mecah suatu rangkaian masukan (misalnya dari berkas atau keyboard) yang akan menghasilkan suatu pohon uraian (parse tree) yang akan digunakan pada tahap kompilasi berikutnya yaitu analisis semantik. Parsing atau analisis sintaksis Juga merupakan proses menganalisis konstruksi dari serangkaian simbol , baik dalam bahasa alami atau dalam bahasa komputer, sesuai dengan aturan tata bahasa formal guna pembentukan Pohon Sintaks untuk suatu kalimat (ekspresi). Istilah Parsing berasal dari pars Latin ( orationis ), yang berarti bagian ( pidato ).Tujuan utama dari analisis sintak adalah memeriksa apakah urutan token-token yang dihasilkan sesuai dengan tata bahasa dari bahasa yang bersangkutan. Misalnya bahasa C mengenal kalimat: jumlah++; yang berarti menaikkan harga variabel jumlah dengan angka satu. Tetapi kalimat di atas akan salah jika dikompilasi dengan kompilator bahasa Pascal, karena tidak sesuai dengan tata bahasa Pascal. Dalam analisis sintak, tata bahasa yang digunakan untuk mendefinisikan aturan sintak suatu bahasa disebut tata bahasa bebas konteks (Context Free Grammar). Tata bahasa ini memiliki empat komponen penting yaitu himpunan simbol terminal, himpunan non-terminal, himpunan produksi dan simbol awal. Dalam bahasa pemrograman, yang disebut terminal adalah token. Contoh terminal adalah token. Contoh token misalnya kata kunci (keyword) if, while, dan identifier serta bilangan. Sedangkan non-terminal merupakan variabel-variabel sintak yang menyatakan himpunan terminal maupun non-terminal. Dalam proses parsing terjadi proses penggantian suatu non terminal dengan sederetan himpunan non terminal dan terminal yang berada dalam sisikanan produksnya. Proses ini disebut sebagai derivasi. Contohnya non-terminal if_stmt merupakan himpunan terminal if, then, else, dan non-terminal expr dan stmt, yang membentuk aturan produksi : if_stmt if expr then stmt else stmt. Dari semua simbol non-terminal yang digunakan, ada satu simbol yang bertindak sebagai simbol awal, yaitu simbol yang pertama kali diderivasi. Aturan produksi menggambarkan bagaimana kombinasi non-terminal dan terminal yang benar menurut tata bahasa yanbg bersangkutan. Dalam proses penguraian, token-token yang dihasilkan dalam analisis leksikal dibentuk menjadi pohon urai (parse tree). Dalam implementasi kompilator, pohon urai ini belum tentu berbentuk pohon yang sebenarnya, misalnya dengan menggunakan fasilitas pointer. Pohon urai merupakan hasil derivasi dari aturan aturan produksi. Contohnya tata bahasa berikut ini : E E+E | E*E | (E) | -E | id (1.1) Dengan masukan a*b+c dapat dibentuk satu contoh pohon urai seperti gambar 1.2. Pohon urai tersebut didapat dengan menderivasi aturan produksi di atas sebagai berikut : E E+E E*E+E id*E+E id*id+E id*id+id

Gambar 1.2. Pohon Urai untuk ekspresi a*b+c

Ada dua jenis derivasi, yaitu derivasi terkiri (Left Most Derivation) dan derivasi terkanan (Right Most Derivation). Derivasi terkiri akan menderivasi suatu aturan produksi mulai dari non-terminal yang paling kiri. Sedangkan derivasi terkanan akan menderivasi suatu aturan produksi mulai dari non-terminal yang paling kanan. Contoh derivasi a*b+c di atas adalah derivasi terkiri. Derivasi terkanan dapat dilakukan sebagai berikut : E E+E E+id E*E+id E*id+id id*id+id Jika proses derivasi aturan-aturan produksi suatu tata bahasa terhadap suatu masukan menghasilkan lebih dari satu pohon urai maka tata bahasa tersebut dikatakan rancu (ambiguous). Tata bahasa (1.1) di atas termasuk rancu, karena selain dapat membentuk pohon urai pada gambar 1.2 juga adapat membentuk pohon urai lain yang dapat dilihat pada gambar 1.3. Pohon urai pada gambar 1.3 berasal dari derivasi sebagai berikut : E E*E id*E id*E+E id*id+E id*id+di

Gambar 1.3. Pohon urai kedua untuk ekspresi

Tata bahasa yang rancu dapat diperbaiki dengan cara menghilangkan rekursi kiri dan melakukan faktorisasi kiri. Rekursi kiri adalah aturan produksi dengan simbol non-terminal pada sisi kiri produksi sama dengan simbol awal sisi kanan produksi, contoh E E+E. Rekursi kiri dapat menyebabkan pengulangan tak hingga. Faktorisasi kiri adalah pengubahan aturan-aturan produksi yang memiliki simbol awal sisi kanan produksi yang sama. Contohnya E E+E dan E E*E. Faktorisasi kiri perlu dilakukan untuk memastikan pilihan aturan produksi mana yang akan dipakai. Tidak rancu dan tidak memiliki rekursi kiri merupakan ciri-ciri dari tata bahasa yang disebut tata bahasa LL(1). Kedua huruf L berasal dari left (kiri). Huruf L pertama berarti tiap karakter masukan diproses satu per satu mulai dari kiri ke kanan. Huruf L kedua berarti pemakain derivasi derivasi terkiri (left most derivation). Sedangkan angka 1 berarti pada setiap langkah penguraian hanya membutuhkan satu token. Penguraian tata bahasa LL(1) menggunakan teknik top-down. Dalam teknik tersebut dilakukan proses derivasi terkiri terhadap suatu masukan . Dalam proses derivasi tersebut dilakukan pembentukan pohon urai yang dimulai dari akar dan membentuk simpul-simpul baru dengan urutan preorder. Contohnya tata bahasa berikut S aBC B bc | d C e | f dengan masukan abcf. Proses penguraian top-down dapat dilihat pada gambar 1.4.

Gambar 1.4. Tahap-tahap pengurai top-downPOHON SINTAKS (SYNTAX TREE) Sebuahpohon sintaks abstrakadalah suatu graph terhubung tidak sirkuler, yang memiliki satu simpul (node) / vertex disebut akar (root) dan dari situ memiliki lintasan ke setiap simpul serta bentuk kental pohon parse yang menghilangkan unsur-unsur seperti tanda kurung dan titik koma, yang sintaktis penting tetapi tidak memiliki nilai semantik.

Pohon sintaks / pohon penurunan (syntax tree/derivaton tree/parse tree) berguna untuk menggambarkan bagaimana memperoleh suatu string (untai) dengan cara menurunkan simbol-simbol variabel menjadi simbol-simbol terminal. Setiap simbol variabel diturunkan menjadi terminal, sampai tidak ada yang belum tergantikan.Untuk menjelaskan mengenai bahasa secara teoritis dan formal, kita lihat terlebih dahulu sebuah kalimat sehari-hari dalam bahasa Indonesia, yaitu: Si kucing kecil menendang bola besar

Gambar penguraian kalimat di atas membentuk struktur pohon, yang disebut pohon sintaks dari kalimat. Disini kalimat dibagi-bagi berdasar jenis dan fungsi kata. Dari pelajaran bahasa Indonesia kita tahu bahwa kalimat di atas telah benar susunannya, atau telah benar tata bahasanya. Pohon sintaks dari kalimat di atas dapat dilihat sebagai berikut :

Derivasi adalah proses pembentukan untai terminal dengan melakukan sederetan produksi menggunakan himpinan produksi yang ada. Himpunan produksi dari pohon sintaks diatas adalah : 1. 2. 3. 4. 5. si 6. kucing | bola 7. kecil |besar 8. menendang AMBIGUOUSSebuah kalimat yang mempunyai lebih dari satu pohon sintaks disebut kalimat ambigu (ambiguous). Grammar yang menghasilkan paling sedikit sebuah kalimat ambigu disebut grammar ambigu. Contoh :Misalkan terdapat tata bahasa sebagai berikut : S A | B A a B aUntuk memperoleh untai a bisa terdapat dua cara penurunan sebagai berikut : S => A => a S => B => a

Diketahui grammar G = {S SOSA , O *+, A 012...9}Kalimat : 2*3+7 mempunyai dua pohon sintaks berikut :

Metode ParsingAda 2 metoda parsing : top-down dan bottom-up. Parsing top-down : Diberikan kalimat x sebagai input. Parsing dimulai dari simbol awal S sampai kalimat x nyata (atau tidak nyata jika kalimat x memang tidak bisa diturunkan dari S) dari pembacaan semua leaf dari pohon parsing jika dibaca dari kiri ke kanan. Parsing bottom-up : Diberikan kalimat x sebagai input. Parsing dimulai dari kalimat x yang nyata dari pembacaan semua leaf pohon parsing dari kiri ke kanan sampai tiba di simbol awal S (atau tidak sampai di S jika kalimat x memang tidak bisa diturunkan dari S).

Parsing Top-DownAda 2 kelas metoda parsing top-down, yaitu kelas metoda dengan backup dan kelas metoda tanpa backup. Contoh metoda kelas dengan backup adalah metoda Brute-Force, sedangkan contoh metoda kelas tanpa backup adalah metoda recursive descent.

Metode Brute-ForceKelas metoda dengan backup, termasuk metoda Brute-Force, adalah kelas metoda parsing yang menggunakan produksi alternatif, jika ada, ketika hasil penggunaan sebuah produksi tidak sesuai dengan simbol input. Penggunaan produksi sesuai dengan nomor urut produksi.

Contoh 3 :Diberikan grammar G = {S aAd|aB, A b|c, B ccd|ddc}. Gunakan metoda Brute-Force untuk melakukan analisis sintaks terhadap kalimat x = accd.

Metoda Brute-Force tidak dapat menggunakan grammar rekursi kiri, yaitu grammar yang mengandung produksi rekursi kiri (left recursion) : A A. Produksi rekursi kiri akan menyebabkan parsing mengalami looping tak hingga.

Contoh 4 :Diberikan grammar G = {S aAc, A Ab|}. Gunakan metoda Brute-Force untuk melakukan analisis sintaks terhadap kalimat x = ac.

Agar tidak menghasilkan looping tak hingga, grammar rekursi kiri harus ditransformasi. Untuk contoh di atas transformasi berarti merubah produksi A Ab menjadi A bA.

Metode Recursive-Descent Kelas metoda tanpa backup, termasuk metoda recursive descent, adalah kelas metoda parsing yang tidak menggunakan produksi alternatif ketika hasil akibat penggunaan sebuah produksi tidak sesuai dengan simbol input. Jika produksi A mempunyai dua buah ruas kanan atau lebih maka produksi yang dipilih untuk digunakan adalah produksi dengan simbol pertama ruas kanannya sama dengan input yang sedang dibaca. Jika tidak ada produksi yang demikian maka dikatakan bahwa parsing tidak dapat dilakukan. Ketentuan produksi yang digunakan metoda recursive descent adalah : Jika terdapat dua atau lebih produksi dengan ruas kiri yang sama maka karakter pertama dari semua ruas kanan produksi tersebut tidak boleh sama. Ketentuan ini tidak melarang adanya produksi yang bersifat rekursi kiri.

Contoh 5 :Diketahui grammar G = {S aB|A, A a, B b|d}. Gunakan metoda recursive descent untuk melakukan analisis sintaks terhadap kalimat x = ac.

Parsing Bottom-UpSalah satu contoh menarik dari parsing bottom-up adalah parsing pada grammar preseden sederhana (GPS). Sebelum sampai ke parsing tersebut, akan dikemukakan beberapa pengertian dasar serta relasi yang ada pada GPS, yaitu : Jika dan x keduanya diderivasi dari simbol awal grammar tertentu, maka disebut sentensial jika (V T | V N )*, dan x disebut kalimat jika x (V T )* Misalkan = Q 1 Q 2 adalah sentensial dan A V N :- adalah frase dari sentensial jika : S Q 1 A Q 2 dan A - adalah simple frase dari sentensial jika : S Q 1 A Q 2 dan A - Simple frase terkiri dinamakan handel- Frase, simple frase, dan handel adalah string dengan panjang 0 atau lebih.

Contoh 6 :(1) I I H Hb adalah sentensial dan b adalah simple frase H H (dibandingkan dengan Q1 Q 2 maka Q1 = H, = b, dan Q2 = ) H b Perhatikan : simple frase (b) adalah yang terakhir diturunkan(2) I I H Hb adalah sentensial dan H adalah simple frase I b (dibandingkan dengan Q 1 Q 2 maka Q1 = , = H, dan Q 2 = b) H b Perhatikan : simple frase (H) adalah yang terakhir diturunkanSentensial Hb mempunyai dua simple frase (b dan H), sedangkan handelnya adalah H.

Relasi Preseden dan Grammar Preseden Sederhana Relasi preseden adalah relasi antara 2 simbol grammar (baik V T maupun V N) dimana paling tidak salah satu simbol tersebut adalah komponen handel. Misalkan S dan R adalah 2 simbol. Ada 3 relasi preseden yang : , , dan

Gambar 3.1 : Komponen handel selalu menunjuk yang simbol lainnya

Contoh 7 :Diketahui grammar dengan G = {Z bMb, M ( L | a, L Ma )}. Dari 3 sentensial : bab, b(Lb, b(Ma)b, tentukan handel dan relasi yang ada.

Secara umum : jika A aBc adalah sebuah produksi maka :- aBc adalah handel dari sentensial yang mengandung string aBc- relasi preseden antara a, B, dan c adalah : a B, B c Dengan memperhatikan ruas kanan produksi yang ada serta berbagai sentensial yang dapat diderivasi dari Z maka semua relasi preseden tercantum dalam tabel berikut :

Tabel 3.1. Tabel Relasi Preseden

Grammar G disebut grammar preseden sederhana jika :1. paling banyak terdapat satu relasi antara setiap dua simbolnya2. tidak terdapat dua produksi produksi dengan ruas kanan yang sama

Parsing Grammar Preseden SederhanaProsedur parsing :1. Buat tabel 3 kolom dengan label : sentensial dan relasi, handel, dan ruas kiri produksi.2. Tuliskan kalimat (atau sentensial) yang diselidiki pada baris pertama kolom pertama.3. Dengan menggunakan tabel relasi preseden cantumkan relasi preseden antara setiap dua simbol yang bertetangga.4. Tentukan handel dari sentensial tersebut. Handel adalah string yang dibatasi terakhir dan pertama jika dilakukan penelusuran dari kiri atau yang saling mempunyai relasi . Handel tersebut pastilah merupakan ruas kanan produksi, karena itu tentukan ruas kiri dari handel tersebut.5. Ganti handel dengan ruas kiri produksinya. GOTO 3.6. Kalimat yang diselidiki adalah benar dapat diderivasi dari simbol awal jika kolom ruas kiri produksi menghasilkan simbol awal.

Contoh 8 :Lakukan parsing atas kalimat x = b(aa)b berdasarkan grammar G di atas.

Prosedur parsing sampai di simbol awal (Z). Maka kalimat b(aa)b memang dapat diderivasi dari simbol awal Z dengan menggunakan grammar G.