Anda di halaman 1dari 7

NAMA : AZIS APRIANTO

NIM : STI201501225

TEORI BAHASA DAN AUTOMATA


TOP-DOWN PARSING
Mengapa pada proses top down parsing, kita harus menghilangkan recursive kiri, karena
Compiler secara khusus menggunakan metode top-down parsing. Karena itu, jika dalam
sebuah grammar terdapat adanya rekursif kiri, maka compiler akan melakukan infinite loop
pada grammar tersebut.
Left factoring diawali karena adanya sebuah masalah yang dikenal dengan nama First/First
Conflict. First/First Conflict adalah sebuah kondisi dimana grammar tersebut memiliki 2
variabel yang sama yang menjadi First dari sebuah variabel. Contoh :
S -> E | E T
Untuk menyelesaikan First/First Conflict tersebut dilakukanlah proses left factoring sehingga
dapat menjadi :
S -> E (epsilon | T)
S -> S'(epsilon | T)
dimana
S’ -> E
 Perbedaan top down parsing dengan bottom up parsing
top down parsing adalah langkah dalam membentuk/membangun sebuah parse tree
berdasarkan input dimulai dari root dan membuat nodes untuk parse tree secara
preorder(depth first).
Bentuk umum dari top down parsing adalah recursive descent parsing.
Sebuah recursive descent parsing adalah top down parsing technique yang melaksanakan
serangkaian prosedur rekursif untuk memproses input, yang melibatkan backtracking (berarti
pemindaian input berulang-ulang).
Backtracking memakan waktu dan karena itu, tidak efisien. Itu sebabnya kasus khusus dari
parsing top down dikembangkan, disebut predictive parsing, di mana tidak ada backtracking
diperlukan.
Sebuah dilema dapat terjadi jika ada left recursion grammar. Bahkan dengan backtracking,
Anda dapat menemukan parser untuk pergi ke infinite loop.
contoh infinite loop pada top down parsing:
Sebuah konteks tata bahasa bebas dikatakan dibiarkan rekursif jika memiliki derivasi dari
bentuk A ⇒ ⋅ ⋅ ⋅ ⇒ Aα. Sebuah tata bahasa kiri-rekursif dapat menyebabkan loop tak terbatas
dalam parser top-down
S → Aa
A → Sb
→b
S ⇒ Aa ⇒ ⇒ Sba Aaba ⇒ ⇒ Sbaba …
Ada algoritma untuk menghapus kiri rekursi dari konteks tata bahasa bebas bottom up
parsing adalah sebuah langkah parsing menggunakan langkah shift-reduce parsingShift
reduce parsing bekerja berdasarkan namanya, “Shift” dan “Reduce” sehingga setiap kali stack
memegang simbol-simbol yang tidak dapat dikurangi lagi, kita menggeser masukan lain, dan
ketika itu cocok, kita mengurangi.
contoh:
urutan yang di baca terlebih dahulu

Menurut kelompok kami bottom-up parsing lebih baik untuk digunakan karena recursive-
descent parsing mencoba untuk berhipotesis struktur umum dari string input, yang berarti
banyak trial-and-error terjadi sebelum akhir string tercapai. Hal ini membuat mereka kurang
efisien daripada bottom-up parsing.
Selain itu Top-down parsing bisa lambat. Parser recursive-keturunan mungkin memerlukan
waktu eksponensial untuk menyelesaikan pekerjaan mereka. Itu akan menempatkan
keterbatasan parah pada skalabilitas dari sebuah kompiler yang menggunakan parser top-
down dan top down parsing ketika di aplikasikan ke mesin, tidak akan bisa menyelesaikan
sebagian besar kasus-kasus umum, seperti left recursive karena akan terjadi looping terus
menerus.
Kelebihan top down parsing hanya lebih “intuitif,” sehingga mereka lebih mudah untuk
debug dan memelihara, dan lebih mudah dipelajari dan ditulis ke dalam tools mesin. Namun
secara performa dan efisiensi bottom up parsing lebih baik dibandingkan dengan top down
parsing.
Ada 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.
Metoda Brute-Force
Kelas 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.
S
Hasil :
Input : Sisa : accd
Penjelasan : Gunakan produksi
S pertama. Masukkan symbol
terkiri kalimat sebagai
input.
S
aAd
Hasil : a
Input : a Sisa : ccd
Penjelasan : Hasil = Input.
Gunakan produksi A pertama.
S
aAd
b
Hasil : ab
Input : ac Sisa : cd
Penjelasan : Hasil ≠ Input.
Backup : Gunakan produksi A
alternatif pertama.
S
aAd
c
Hasil : ac
Input : ac Sisa : cd
Penjelasan : Hasil = Input.
Karakter berikutnya adalah
simbol terminal, Hasil
dibandingkan dengan Input.
S
aAd
c
Hasil : acd
Input : acc Sisa : c
Penjelasan : Hasil ≠ Input.
Tidak ada lagi produksi A
alternatif, backup : gunakan
produksi S alternatif pertama.
S
aB
Hasil : a
Input : a Sisa : ccd
Penjelasan : Hasil = Input.
Gunakan produksi B pertama.
S
aB
ccd
Hasil : ac
Input : ac Sisa : cd
Penjelasan : Hasil = Input.
Karakter berikutnya adalah
simbol terminal, Hasil
dibandingkan dengan Input.
S
aB
ccd
Hasil : acc
Input : acc Sisa : d
Penjelasan : Hasil = Input.
Karakter berikutnya adalah
simbol terminal, Hasil
dibandingkan dengan Input.
S
aB
ccd
Hasil : accd
Input : accd Sisa :
Penjelasan : Hasil = Input.
SELESAI, SUKSES
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.
S
Hasil :
Input : Sisa : ac
Penjelasan : Masukkan simbol
terkiri kalimat sebagai input.
Gunakan produksi S pertama.
S
aAc
Hasil : a
Input : a Sisa : c
Penjelasan : Hasil = Input.
Gunakan produksi A pertama.
S
aAc
Ab
Hasil : a
Input : a Sisa : c
Penjelasan : Hasil = Input.
Gunakan produksi A pertama.
S
aAc
Ab
Ab
Hasil : a
Input : a Sisa : c
Penjelasan : Hasil = Input.
Gunakan produksi A pertama.
S
aA
Ab
Ab
Ab
Hasil : a
Input : a Sisa : c
Penjelasan : Hasil = Input.
Gunakan produksi A pertama.
dan seterusnya...... (looping)
Agar tidak menghasilkan looping tak hingga, grammar rekursi kiri harus ditransformasi.
Untuk contoh di atas transformasi berarti merubah produksi A → Ab menjadi A → bA.
Metoda 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.
S
Hasil :
Input : Sisa : ab
Penjelasan : Masukkan simbol
terkiri kalimat sebagai input.
Gunakan produksi S dengan
simbol pertama ruas kanan = a
S
aB
Hasil : a
Input : a Sisa : c
Penjelasan : Hasil = Input.
Gunakan produksi B dengan
simbol pertama ruas kanan =
c. Karena produksi demikian
maka parsing gagal dilakukan.
SELESAI,
PARSING GAGAL

Anda mungkin juga menyukai