NPM : 1857201055
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.
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)/ 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}
Sebuah string yang mempunyai lebih dari satu pohon sintaks disebut string ambigu (ambiguous).
Grammar yang menghasilkan paling sedikit sebuah string ambigu disebut grammar ambigu.
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| ɛ
Result :
A → cAB | ab | cA
B → BaC| C | 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
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
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
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.
9
SAB
Aa
Ba
Untuk memperoleh untai „a‟ bisa terdapat dua cara penurunan:
SAa
SBa
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.
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:
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:
16
Karena ada dua pohon parse yang berbeda untuk mendapatkan string yang sama, tata
bahasa yang diberikan bersifat ambigu.
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.
3. General Recursion-
The recursion which is neither left recursion nor right recursion is called as general
recursion.
Example-
S → aSb / ∈
Problem-01:
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