Anda di halaman 1dari 24

NAMA : RIA NOVIYANTI

NPM : 1857201055

PRODI : SISTEM INFORMASI


MK : TEKNIK KOMPILASI
KATA PENGANTAR

Dengan menyebut nama Allah SWT yang Maha Pengasih lagi Maha Panyayang, Kami panjatkan
puja dan puji syukur atas kehadirat-Nya, yang telah melimpahkan rahmat, hidayah, dan inayah-Nya
kepada kami, sehingga kami dapat menyelesaikan makalah ini tepat pada waktunya.

Makalah ini dibuat untuk memenuhi salah satu tugas mata kuliah Tehnik Kompilasi.
Dalam makalah ini mengulas tentang Pohon Penurunan. Kami berharap semoga makalah ini
dapat bermanfaat bagi pembaca.
Dengan segala kerendahan hati, kritik dan saran yang sangat kami harapkan dari para
pembaca guna untuk meningkatkan dan memperbaiki pembuatan makalah pada tugas yang lain
dan pada waktu mendatang.

Lampung Timur, 20 Maret 2020

Penulis

1
BAB I
PENDAHULUAN
A. Latar Belakang
Bahasa alami atau bahasa non formal adalah bahasa komunikasi yang digunakan oleh
manusia, yaitu bahasa ucap seperti bahasa Indonesia, bahasa Inggris, bahasa Arab.
Sintaks bahasa alami sangat rumit, karena bahasa alami memiliki tata bahasa dan aturan
yang lebih luas dan luwes, sehingga tidak mungkin untuk menspesifikasikan semua
aturan sintaksnya. Bahasa formal adalah bahasa yang kaidah sintaksnya dapat
dispesifikasikan secara matematis dengan baik. Kaidah bahasa dalam teori bahasa formal
tidak hanya bermanfaat
untuk studi linguistik bahasa alami seperti penterjemahan secara otomatis dari suatu
bahasa ke bahasa lain, tetapi juga berguna untuk studi bahasa pemograman.

Tata bahasa bebas konteks (Context Free Grammar atau CFG) merupakan salah satu
bahasa formal yang dapat digunakan untuk mendefinisikan sintaks bahasa pemograman.
Suatu tata bahasa bebas konteks dapat berbentuk sangat melebar, sangat menyempit, atau
terjadi rekursif kiri, yang semuanya sering dinamakan bentuk tidak normal. Suatu tata
bahasa bebas konteks dapat dimodifikasi ruas kanan aturan produksinya sedemikian
sehingga panjangnya hanya satu atau dua karakter, tentu dapat dengan mudah
dibayangkan bahwa pohon penurunan string yang terbentuk akan menjadi lebih
sederhana, yaitu pohon biner dimana setiap simpul hanya memiliki cabang satu atau dua.
Tata bahasa dengan batasan seperti ini disebut tata bahasa bebas konteks dalam bentuk
normal Chomsky (Chomsky Normal Form atau CNF)[1].
B. Rumusan Masalah
a. Apa yang dimaksud dengan Tata Bahasa Bebas Konteks?
b. Apa yang dimaksud dengan Parsing?
c. Apa yang dimaksud dengan Ambiguitas?
C. Tujuan
a. Mengetahui apa yang dimaksud dengan Tata Bahasa Bebas Konteks
b. Mengetahui apa itu Parsing
c. Mengetahui apa yang dimaksud dengan Ambiguitas

2
BAB II
PEMBAHASAN

Context Free Grammar (CFG)

Context 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 Context
Free 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
Parsing
Context Free Grammar ( CFG ) menjadi dasar dalam pembentukan suatu parser/proses analisis
sintaksis. Bagian sintaks dalam suatu kompilator kebanyakan di definisikan dalam tata bahasa
bebas konteks. Pohon penurunan ( derivation tree/parse tree) berguna untuk menggambarkan
simbol-simbol variabel menjadi simbol-simbol terminal setiap simbol variabel akan di turunkan
menjadi terminal sampai tidak ada yang belum tergantikan.
Contoh, terdapat CFG dengan aturan produksi sebagai berikut dengan simbol awal S :

 S → AB
 A → aA | a
 B → bB | b
Maka jika ingin dicari gambar pohon penurunan dengan string : „aabbb‟ hasilnya adalah seperti
di bawah :

3
Context Free Grammar (CFG) - Parse Tree
Proses penurunan / parsing bisa dilakukan dengan cara sebagai berikut :

 Penurunan terkiri (leftmost derivation): simbol variabel terkiri yang di perluas terlebih
dahulu.
 Penurunan terkanan ( rightmost derivation ) : simbol variabel terkanan yang diperluas
terlebih dahulu.
Misal : Grammar sbb :

 S → aAS | a
 A → SbA | ba
Untuk memperoleh string „aabbaa‟ dari grammar diatas dilakukan dengan cara :

 Penurunan terkiri: S => aAS => aSbAS => aabAS => aabbaS => aabbaa
 Penurunan terkanan : S => aAS => aAa => aSbAa => aAbbaa => aabbaa
Contoh Lain:
Diketahui grammar G = {I → H | I H | IA, H → a| b | c | … |z, A → 0 | 1 | 2| …|9}

dengan I adalah simbol awal.Berikut ini kedua cara analisa sintaks untuk string x23b.

4
Derivasi dan Parsing
Ambiguitas
Ambiguitas terjadi bila terdapat lebih dari satu pohon penurunan yang berbeda untuk
memperoleh suatu string.
Misalkan terdapat tata bahasa sebagai berikut :

 S→A|B
 A→a
 B→a
Untuk memperoleh untai „a‟ bisa terdapat dua cara penurunan sebagai berikut :

 S => A => a
 S => B => a
Contoh ambiguitas lain:
Diketahui grammar G = {S → SOS|A , O → *|+, A → 0|1|2|…|9}

String : 2*3+7 mempunyai dua pohon sintaks berikut :

Sebuah string yang mempunyai lebih dari satu pohon sintaks disebut string ambigu (ambiguous).
Grammar yang menghasilkan paling sedikit sebuah string ambigu disebut grammar ambigu.

PENYEDERHANAAN CONTEXT FREE GRAMMAR


CFG atau Context Free Grammar adalah tata bahasa formal di mana setiap aturan produksi
adalah dalam bentuk A → B di mana A adalah pemproduksi, dan B adalah hasil produksi.
Batasannya hanyalah ruas kiri adalah sebuah simbol variabel. Dan pada ruas kanan bisa berupa
terminal, symbol, variable ataupun ɛ, Contoh aturan produksi yang termasuk CFG adalah seperti
berikut ini:

5
 X → bY | Za
 Y → aY | b
 Z → bZ | ɛ
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.

CFG perlu disederhankan dengan tujuan untuk melakukan pembatasan sehingga tidak
menghasilkan pohon penurunan yang memiliki kerumitan yang tak perlu atau aturan produksi tak
berarti. Berikut merupakan langkah-langkah dalam melakukan penyederhanaan CFG:

 Eliminasi ɛ-production
 Eliminasi unit production
 Eliminasi useless symbol
Berikut contoh Penyederhanaan CFG:
A → cAB | ab
B → BaC| C
C → bC| ɛ

Step 1 – Eliminasi ɛ-production


 Hilangkan semua hasil produksi yang ɛ
 Jika X → ɛ, maka X adalah nullable
 Jika Y → X, maka Y adalah nullable
 Jika Z → Xa, maka Z → a

Result :

A → cAB | ab | cA
B → BaC| C | Ba | aC | a
C → bC| b

Step 2 – Eliminasi unit production


 Jika ada hasil produksi yang terdiri dari 1 variable, maka hasil produksi tersebut
disubstitusi dengan hasil produksi dari grammar dimana variable tersebut menjadi
pemproduksiResult :
A → cAB | ab | cA
B → BaC| bC | b | Ba | aC | a
C → bC| b

6
Step 3 – Eliminasi useless symbol
 Uji Generate
Jika X → YZ, Y → aa, Z → b, maka X,Y,Z lolos uji generate
Jika M → PQ, P → aa, Q → QQ, maka M dan Q tidak lolos uji generate
 Uji Reachable
Jika S → TU dimana S adalah start symbol maka T dan U lolos uji reachable

Final Result :
A → cAB | ab | cA
B → BaC| bC | b | Ba | aC | a
C → bC| b

Penurunan terkiri (leftmost derivation)

batasannya hanyalah ruas kiri (a) adalah sebuah simbol variabel. Sedangkan contoh aturan
produksi yang termasuk CFG adalah seperti di bawah :
B → CDeFg
D → BcDe
Tata bahasa bebas konteks ( CFG ) adalah tata bahasa yang mempunyai tujuan sama se perti
halnya tata bahasa regular yaitu merupakan suatu cara untuk menunjukkan bagaimana
menghasilkan suatu untai-untai dalam sebuah bahasa.Bila pada tata bahasa regular terdapat
pembatasan pada ruas kanan atau hasil produksinya, maka pada tata bahasa bebas
konteks/ context free grammar, selanjutnya kita sebut CFG, tidak terdapat pembatasan hasil
produksinya. Pada aturan produksi:

batasannya hanyalah ruas kiri () adalah sebuah symbol variabel.
Contoh aturan produksi yang termasuk CFG:
B  CDeFg
D  BcDe

Seperti halnya pada tata bahasa regular, sebuah tata bahasa bebas konteks adalah suatu cara
yang menunjukkan bagaimana menghasilkan untai-untai dalam sebuah bahasa. Seperti kita
ketahui, pada saat menurunkan suatu string, symbol-simbol variabel akan mewakili bagian-
bagian yang belum yang belum terturunkan dari string tersebut. Bila pada tata bahasa
regular, bagian yang belum terturunkan tersebut selalu terjadi pada suatu ujung, pada tata
bahasa bebas konteks bisa terdapat lebih banyak bagian yang belum terturunkan itu dan bisa
terjadi dimana saja. Ketika penurunan itu sudah lengkap, semua bagian yang belum
terturunkan telah diganti oleh string-string (yang mungkin saja kosong) dari himpunan
symbol terminal. Bahasa bebas konteks menjadi dasar dalam pembentukan suatu
parser/proses analisis sintaksis. Bagian sintaks dalam suatu kompilator kebanyakan
didefinisikan dalam tata bahasa bebas konteks.

7
Parsing
CFG menjadi dasar dalam pembentukan suatu parser/proses analisis sintaksis. Bagian sintaks
dalam suatu kompilator kebanyakan di definisikan dalam tata bahasa bebas konteks. Pohon
penurunan ( derivation tree/parse tree) berguna untuk menggambarkan simbol-simbol
variabel menjadi simbol-simbol terminal setiap simbol variabel akan di turunkan menjadi
terminal sampai tidak ada yang belum tergantikan.
Contoh, terdapat CFG dengan aturan produksi sebagai berikut dengan simbol awal S :
S → AB
A → aA | a
B → bB | b
Maka jika kita ingin mencari gambar pohon penurunan dengan untai : „aabbb‟ hasilnya
adalah seperti di bawah :
Proses penurunan / parsing bisa dilakukan dengan cara sebagai berikut :
Penurunan terkiri (leftmost derivation): simbol variabel terkiri yang di perluas terlebih
dahulu. Penurunan terkanan ( rightmost derivation ) : simbol variabel terkanan yang
diperluas terlebih dahulu.
Misal : Tata bahasa sbb :
S → aAS | a
A → SbA | ba
Untuk memperoleh untai „aabbaa‟ dari tata bahasa diatas dilakukan dengan cara :
Penurunan terkiri : S => aAS => aSbAS => aabAS => aabbaS => aabbaa
Penurunan terkanan : S => aAS => aAa => aSbAa => aAbbaa => aabbaa

Sebuah pohon (tree) adalah suatu graph terhubung tidak sirkuler, yang memiliki satu simpul
(node)/vertex disebut akar (root) dan dari situ memiliki lintasan ke setiap simpul. Gambar 1
memberikan contoh sebuah tree yang menguraikan kalimat dalam bahasa Inggris: The quick
brown fox jumped over the lazy dog

Pohon penurunan (derivation tree/parse tree) berguna untuk menggambarkan bagaimana


memperoleh suatu string (untai) dengan cara menurunkan simbol- simbol variabel menjadi
simbol-simbol terminal. Setiap simbol variabel akan diturunkan menjadi terminal, sampai
tidak ada yang belum tergantikan.
Misal terdapat tata bahasa bebas konteks dengan aturan produksi (symbol awal S, selanjutnya
didalam bab ini digunakan sebagai symbol awal untuk tata bahasa bebas konteks adalah S):
S  AB
A  aA  a
B  bB  b
Akan kita gambarkan pohon penurunan untuk memperoleh untai: „aabbb‟. Pada pohon
tersebut symbol awal akan menjadi akar (root). Setiap kali penurunan dipilih aturan produksi
yang menuju ke solusi. Simbol-simbol variabel akan menjadi simpul-simpul yang
mempunyai anak. Simpul-simpul yang tidak mempunyai anak akan menjadi symbol terminal.

8
Kalau kita baca symbol terminal yang ada pada gambar 2 dari kiri ke kanan akan diperoleh
unatai „aabbb‟.
Proses penurunan atau parsing bisa dilakukan dengan cara:
Penurunan terkiri (leftmost derivation): symbol variabel terkiri yang diperluas terlebih
dahulu.
Penurunan terkanan (rightmost derivation): symbol variabel terkiri yang diperluas terlebih
dahulu

Misal terdapat tata bahasa bebas konteks:


S  aAS  a
A  SbA  ba
Untuk memperoleh untai „aabbaa‟ dari tata bahasa bebas konteks diatas („‟ bisa dibaca
„menurunkan‟)
Dengan penurunan terkiri: S  aAS  aSbAS  aabAS  aabbaS  aabbaa
Dengan penurunan terkanan: S  aAS  aAa  aSbAa  aSbbaa  aabbaa
Meskipun proses penurunannya berbeda akan tetap memiliki pohon penurunan yang sama.

Biasanya persoalan yang diberikan berkaitan dengan pohon penurunan, adalah untuk mencari
penurunan yang hasilnya menuju kepada suatu untai yang ditentukan. Dalam hal ini, perlu
untuk melakukan percobaan pemilihan aturan produksi yang bisa menuju ke solusi.
Misalkan sebuah tata bahasa bebas konteks memiliki aturan produksi:
S  aB  bA
A  a  aS  bAA
B  b  bS  aBB
Pohon penurunan untuk memperoleh :‟ aaabbabbba”
AMBIGUITAS
Ambiguitas terjadi bila terdapat lebih dari satu pohon penurunan yang berbeda untuk
memperoleh suatu untai.
Misalkan terdapat tata bahasa sebagai berikut :
S→A|B
A→a
B→a
Untuk memperoleh untai „a‟ bisa terdapat dua cara penurunan sebagai berikut :
· S => A => a
· S => B => a
Ambiguitas/kedwiartian terjadi bila terdapat lebih dari satu pohon penurunan yang berbeda
untuk memperoleh suatu untai.

Misalkan terdapat tata bahasa bebas konteks:

9
SAB
Aa
Ba
Untuk memperoleh untai „a‟ bisa terdapat dua cara penurunan:
SAa
SBa

Contoh lain, terdapat tata bahasa bebas konteks:


S  SbS  ScS  a

Kita bisa menurunkan untai „abaca‟ dalam dua cara:


S  SbS  SbScS  SbSca  Sbaca  abaca
S  ScS  SbScS  abScS  abacS  abaca
Kita lihat untuk untai yang sama („abaca) dapat dibuat pohon penurunan yang berbeda, maka
dapat dikatakan tata bahasa bebas konteks tersebut ambigu. Jadi untuk menunjukkan bahwa
suatu tata bahasa bebas konteks ambigu, bisa dilakukan dengan menemukan untai yang
memungkinkan pembentukan lebih dari satu pohon penurunan.
Demikianlah sedikit membahas tentang Tata Bahas Bebas Konteks. semoga bermanfaat.. dan
Terima kasih atas kunjungan nya.

Parsing dapat dilakukan dengan 2 cara :


1. Penurunan terkiri (leftmost derivation) : simbol variable yang paling kiri diturukan (tuntas)
dahulu.
2. Penurunan terkanan (rightmost derivation) : simbol variable yang paling kiri diturukan
(tuntas) dahulu.
Misalkan kita inginkan hasil string aabbaa dari CFL ( Context Free Language )
CFL S a AS | a,
A SbA | ba

Contoh soal :

10
Parsing digolongkan menjadi:

11
• Top-Down 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). Penelusuran dari root ke leaf atau dari simbol awal ke simbol terminal.
metode ini meliputi:
• Backtrack/backup : Brute Force Metode Brute-Force tidak dapat menggunakan grammar
rekursi kiri, yaitu grammar yang mengandung produksi rekursi kiri (left recursion) :

Problems: Left Recursion Left factoring Sebuah grammar dikatakan bersifat left recursion
apabila grammar tersebut mengandung suatu nonterminal dan derivasinya.

Metode Top-Down Parsing tidak bisa menangani grammar yang mengandung left recursive,
sehingga left recursive perlu dihilangkan..
Produksi rekursi kiri akan menyebabkan parsing mengalami looping tak hingga.
Grammar dapat dikatakan left factoring apabila terdapat produksi yang berbentuk seperti di
bawah ini : Contoh :
A → αβ1 | αβ2
Grammar tersebut diubah menjadi :

12
A → αA‟ A‟
→ β1 |β2
Adanya left factoring ini menyebabkan grammar menjadi ambigu karena tidak jelas yang mana
dari dua produksi alternatif yang bisa digunakan untuk memperluas nonterminal A. Dari contoh
soal di atas, kita tidak tahu mau menelusuri A ke αβ1 atau ke αβ2.

• No backtrack : Recursive Descent Parser


• Bottom-Up
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. Metode ini melakukan penelusuran dari leaf ke root
– LR(k)
– Presedence Parser
masing-masing metode parsing memiliki kelemahan dan kelebihannya masing-masing. Jadi
ketika kita sedang menangani persoalan dengan mengandung empty production, lebih baik
menggunakan Top-down parsing, sebaliknya, kita lebih baik menggunakan Bottom-up parsing
untuk menangani persoalan yang mengandung left recursion. Karena itu metode parsing yang
terbaik ialah yang dapat menggabungkan kedua cara ini. Metode parsing yang terbaik ialah
metode yang dapat menggabungkan top-down dan bottom-up parsing yang disebut Left-corner.
Cara kerja Left-corner parsing ialah dengan mula-mula menerima sebuah kata, menentukan jenis
constituent.
Info tambahan : Terdapat metode parsing yang terbaik, yaitu metode yang menggabungkan top-
down dan bottom-up parsing yang disebut Left-corner.
Cara kerja Left-corner parsing ialah dengan mula-mula menerima sebuah kata, menentukan jenis
constituent .
Buktinya : Dengan proses parsing dimulai secara bottom-up dan diakhiri secara top-down.

13
Unambiguous Grammar
Tata bahasa bisa tidak ambigu jika tata bahasa tidak mengandung ambiguitas yang berarti
jika tidak mengandung lebih dari satu derivasi paling kiri atau lebih dari satu derivasi paling
kanan atau lebih dari satu pohon parse untuk string input yang diberikan.

Untuk mengonversi tata bahasa yang ambigu ke tata bahasa yang tidak ambigu, kami akan
menerapkan aturan berikut:

1. Jika operator asosiatif kiri (+, -, *, /) digunakan dalam aturan produksi, maka terapkan
rekursi kiri dalam aturan produksi. Rekursi kiri berarti simbol paling kiri di sisi kanan sama
dengan non-terminal di sisi kiri. Sebagai contoh,

1. X → Xa

2. Jika asosiasi kanan beroperasi (^) digunakan dalam aturan produksi, maka lakukan
rekursi kanan dalam aturan produksi. Rekursi kanan berarti simbol paling kanan di sisi
kiri sama dengan non-terminal di sisi kanan. Sebagai contoh,
1. X → aX

Example 1:
Consider a grammar G is given as follows:

1. S → AB | aaB
2. A → a | Aa
3. B → b

Tentukan apakah tata bahasa G ambigu atau tidak. Jika G bersifat ambigu, buat tata
bahasa yang tidak ambigu yang setara dengan G.

Solution:

Let us derive the string "aab"

14
Karena ada dua pohon parse yang berbeda untuk mendapatkan string yang sama, tata
bahasa yang diberikan bersifat ambigu.
Tata bahasa yang tidak ambigu adalah:

1. S → AB
2. A → Aa | a
3. B → b

Example 2:
Tunjukkan bahwa tata bahasa yang diberikan bersifat ambigu. Juga, temukan tata
bahasa yang tidak ambigu yang setara.

1. S → ABA
2. A → aA | ε
3. B → bB | ε

Solution:

Tata bahasa yang diberikan bersifat ambigu karena kita dapat memperoleh dua pohon parse
yang berbeda untuk string aa.

15
The unambiguous grammar is:

1. S → aXY | bYZ | ε
2. Z → aZ | a
3. X → aXY | a | ε
4. Y → bYZ | b | ε

Example 3:
Tunjukkan bahwa tata bahasa yang diberikan bersifat ambigu. Juga, temukan tata
bahasa yang tidak ambigu yang setara.
1. E → E + E
2. E → E * E
3. E → id

Solution:

Let us derive the string "id + id * id"

16
Karena ada dua pohon parse yang berbeda untuk mendapatkan string yang sama, tata
bahasa yang diberikan bersifat ambigu.

Tata bahasa yang tidak ambigu adalah:


1. E → E + T
2. E → T
3. T → T * F
4. T → F
5. F → id

Example 4:
Periksa apakah tata bahasa yang diberikan ambigu atau tidak. Juga, temukan tata bahasa
yang tidak ambigu yang setara. S → S + S

1. S → S * S
2. S → S ^ S
3. S → a

Solution:

Tata bahasa yang diberikan bersifat ambigu karena derivasi string aab dapat diwakili oleh
string berikut:

17
Unambiguous grammar will be:

1. S → S + A |
2. A → A * B | B
3. B → C ^ B | C
4. C → a

Rekursi kiri
Dalam teori bahasa formal dari ilmu komputer , rekursi kiri adalah kasus khusus dari rekursi mana
string diakui sebagai bagian dari bahasa oleh fakta bahwa itu terurai menjadi string dari bahasa

yang sama (di sebelah kiri) dan akhiran (pada hak). Contohnya, dapat dikenali sebagai jumlah
karena dapat dipecah menjadi , juga jumlah, dan , akhiran yang cocok.
Dalam hal tata bahasa bebas konteks , nonterminal adalah rekursif kiri jika simbol paling kiri dalam
salah satu produksinya adalah dirinya sendiri (dalam kasus rekursi kiri langsung) atau dapat dibuat
sendiri dengan beberapa urutan penggantian (dalam kasus tidak langsung rekursi kiri).

Pada saat mau melakukan metode Top Down Parsing, jika masih ditemukan Left Recursion pada
grammar, maka Left Recursion tersebut harus dieliminasi karena metode Top Down Parsing
tidak dapat menghandle left recursive grammar.

Grammar yang disebut left recursive grammar adalah grammar yang memiliki setidaknya 1 α
dan 1 β.

18
A → Aα | β
Jika pada grammar terdapat left recursion, maka untuk menghilangkan left recursion tersebut
dapat diubah bentuknya menjadi :

A → αA’
A’ → βA’ | ε
Untuk lebih jelasnya dapat dilihat di contoh berikut :
A → Ae | L
L → Lne | Dn
D → en | (A)
Pada grammar A → Ae | L , terdapat α yaitu e dan terdapat β yaitu L, jadi pada grammar ini
terdapat left recursion. Maka bentuknya dapat diubah menjadi :
A → eA’
A’ → LA’ | ε
Pada grammar L → Lne | Dn , terdapat α yaitu ne dan terdapat β yaitu Dn, jadi pada grammar
ini terdapat left recursion. Maka bentuknya dapat diubah menjadi :
L → neL’
L’ → DnL’ | ε
Pada grammar D → en | (A) , terdapat α yaitu en dan (A), tapi tidak terdapat β, jadi pada
grammar ini tidak terdapat left recursion, maka bentuk grammarnya tidak perlu diubah.
Berikut result grammar yang sudah tidak ada left recursionnya dan siap untuk dilanjutkan dengan
metode Top Down Parsing

A → eA’
A’ → LA’ | ε
L → neL’
L’ → DnL’ | ε
D → en | (A)

Right Recursion-

19
 A production of grammar is said to have right recursion if the rightmost variable of its
RHS is same as variable of its LHS.
 A grammar containing a production having right recursion is called as Right Recursive
Grammar.
Example-
S → aS / ∈
(Right Recursive Grammar)

 Right recursion does not create any problem for the Top down parsers.
 Therefore, there is no need of eliminating right recursion from the grammar.

Also Read- Types of Recursive Grammar

3. General Recursion-

 The recursion which is neither left recursion nor right recursion is called as general
recursion.

Example-

S → aSb / ∈

PRACTICE PROBLEMS BASED ON LEFT RECURSION ELIMINATION-

Problem-01:

Consider the following grammar and eliminate left recursion-


A → ABd / Aa / a
B → Be / b

Solution-

20
The grammar after eliminating left recursion is-
A → aA’
A’ → BdA’ / aA’ / ∈
B → bB’
B’ → eB’ / ∈

21
BAB III
PENUTUP
A. Kesimpulan
Tata bahasa bebas konteks adalah suatu cara yang menunjukkan bagaimana
menghasilkan untai – untai dalam sebuah bahasa, dan tidak terdapat pembatasan pada
hasil produksinya.
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.
Pohon penurunan ( derivation tree/parse tree) berguna untuk menggambarkan simbol-
simbol variabel menjadi simbol-simbol terminal setiap simbol variabel akan di turunkan
menjadi terminal sampai tidak ada yang belum tergantikan. Proses penurunan atau parsing
bisa dilakukan dengan cara :
1. penurunan terkiri (leftmost derivation) yaitu simbol variabel terkiri yang diperluas
terlebih dahulu.
2. Penurunan terkanan (rightmost derivation) yaitu simbol variabel terkanan yang
diperluas terlebih dahulu.

Ambiguitas terjadi bila terdapat lebih dari satu pohon penurunan yang berbeda untuk
memperoleh suatu string. Sebuah string yang mempunyai lebih dari satu pohon sintaks
disebut string ambigu (ambiguous). Grammar yang menghasilkan paling sedikit sebuah
string ambigu disebutgrammar ambigu.

22
xii

Anda mungkin juga menyukai