View
236
Download
0
Category
Preview:
Citation preview
8/18/2019 analisis sintaksis
1/66
Analisis Sintaksis
Amalia
8/18/2019 analisis sintaksis
2/66
Tahapan Proses Kompilasi
Materi Hari Ini
8/18/2019 analisis sintaksis
3/66
Posisi Parser
8/18/2019 analisis sintaksis
4/66
Tugas Utama Parser
8/18/2019 analisis sintaksis
5/66
Analisis Sintaksis
8/18/2019 analisis sintaksis
6/66
Parse Tree dari The dog Gnawed the bone
8/18/2019 analisis sintaksis
7/66
8/18/2019 analisis sintaksis
8/66
8/18/2019 analisis sintaksis
9/66
Peran Parser
8/18/2019 analisis sintaksis
10/66
Definisi Sintak
8/18/2019 analisis sintaksis
11/66
Definisi Sintak
8/18/2019 analisis sintaksis
12/66
Definisi Sintak
8/18/2019 analisis sintaksis
13/66
Kegunaan CFG
8/18/2019 analisis sintaksis
14/66
Context Free Grammar
8/18/2019 analisis sintaksis
15/66
Context Free Grammar
8/18/2019 analisis sintaksis
16/66
CFG dalam Notasi BNF (Backus NaurForm)
• Biasanya CFG di buat dalam notasi BNF• Contoh : Misalkan sebuah Grammar M memiliki grammar :
::= ::= 'koala'|'KURSI'|'PISANG' ::='MEMUKUL'|'MEMAKAN'|'MEMBUANG'
Semua kalimat ini valid menurut grammar di atas (atau dikatakan bahwa: kalimat-kalimat berikut ini berada dalam bahasa yang didefinisikan oleh grammar M):
KOALA MEMAKAN KURSIKOALA MEMAKAN PISANG
KOALA MEMUKUL KURSIKOALA MEMUKUL KOALAPISANG MEMAKAN KOALA
Proses syntactic analysis hanya memeriksa grammar, tapi tidak menangani semantik.Kalimat "PISANG MEMAKAN KOALA" mungkin tidak valid secara semantik, tapi valid
secara grammar. Pada tahap ini jangan pedulikan dulu masalah semantik.
8/18/2019 analisis sintaksis
17/66
Contoh Lain• Misalkan ada grammar N :
::= | ::= ::=
::= 'KOALA'|'KURSI'|'PISANG' ::='MEMUKUL'|'MEMAKAN'|'MEMBUANG‘ ::= 'SANGAT'|'AGAK'| ::= 'BESAR'|'KECIL'
KOALA MEMAKAN KURSIKOALA AGAK BESAR
8/18/2019 analisis sintaksis
18/66
Context Free Grammar
Produksi adalah setiap kejadian dimana string sebelah kiri dapat digantikandengan oleh string bagian kanan
8/18/2019 analisis sintaksis
19/66
Context Free Grammar
8/18/2019 analisis sintaksis
20/66
8/18/2019 analisis sintaksis
21/66
8/18/2019 analisis sintaksis
22/66
8/18/2019 analisis sintaksis
23/66
8/18/2019 analisis sintaksis
24/66
Tipe Parser
8/18/2019 analisis sintaksis
25/66
Top Down Parser
8/18/2019 analisis sintaksis
26/66
26
Parsing Top Down
• Jika adalah input string, maka derivasi dari Top Down Parse dapatditunjukkan sebagai berikut :
S … … … • Parse Tree untuk Top Down Parsing selalu dimulai dari sebelah kiri
S
NT11 NT12 NT1n…….
NT21t
1
2
3
8/18/2019 analisis sintaksis
27/66
27
Parsing Top Down (cont.)
Contoh : Parsing Top Down untuk identifier x2Derivasinya : x x2
a.
x
x
2
b
dc e
8/18/2019 analisis sintaksis
28/66
28
Parsing Top Down (cont.)
Contoh : ekspresi a + b * cgrammar : E ::= T + E | T
T ::= V * E | VV ::=
Prediction Prediction Sentential Form
E T+E
T V
V
E T
T V*T
V
T V
V
T+E
V+E
+E
+T
+V*T
+*T
+*V
+*
E
T + E
V
id
T
V * T
id V
id
8/18/2019 analisis sintaksis
29/66
Ambiguitas dalam Grammar • Tidak semua grammar dapat menyatakan
struktur yang unik untuk setiap string dalamsebuah bahasa.
• Kadang-kadang, grammar dapat dirancangulang agar dapat memberikan struktur yangunik untuk setiap string dalam sebuah bahasa.
8/18/2019 analisis sintaksis
30/66
Contoh• CFG untuk ekspresi sederhana:
E I | E + E | E * E | (E)
I a | b | Ia | Ib | I0 | I1
• Produksi-produksi E E + E, E E * E ekpresi-ekspresi sederhana dapat di-generate dalambeberapa cara.
• Sebagai contoh, bentuk E + E * E memiliki duapenurunan dari E, yaitu:
1. E E + E E + E *E
2. E E * E E + E *E
8/18/2019 analisis sintaksis
31/66
Parse tree untuk E + E * E
E
E + E
E * E
E
E * E
E + E
Gambar a Gambar b
8/18/2019 analisis sintaksis
32/66
8/18/2019 analisis sintaksis
33/66
8/18/2019 analisis sintaksis
34/66
8/18/2019 analisis sintaksis
35/66
Ambiguitas• Ambiguitas disebabkan karena adanya dua atau lebih parse
tree , bukan karena banyaknya penurunan.• CFG G = (V, T, P, S) dikatakan ambigu jika terdapat sedikitnya
satu string w dalam T* dimana kita dapat menentukan dua parse tree yang berbeda.
• Masing-masing parse tree tersebut memiliki root yang diberilabel S dan hasil w.
• Jika setiap string memiliki paling banyak satu parse tree dalamgrammar , maka grammar tersebut dikatakan tidak ambigu(unambiguous ).
8/18/2019 analisis sintaksis
36/66
Contoh 10 (lanjutan)• Parse tree yang menghasilkan string a + a * a
E
E + E
E * EI
a I
a
I
a
E
E * E
E + E
I
a
I
a
I
a
Gambar a Gambar b
8/18/2019 analisis sintaksis
37/66
Menghilangkan Ambiguitas dari Grammar (1)
• Penyebab ambiguitas dalam grammar pada Contoh:• Gambar a mengelompokkan operator * sebelum
operator +. Sedangkan Gambar b mengelompokkan +di depan *.
– Tetapkan hanya struktur dalam Gambar a yang legal dalamgrammar yang tidak ambigu.
8/18/2019 analisis sintaksis
38/66
Menghilangkan Ambiguitas dari Grammar (2)
• Urutan operator-operator yang serupa dapatdikelompokkan dari kiri atau dari kanan.
– Sebagai contoh, jika para * dalam Gambar diganti oleh
para +, maka akan diperoleh dua parse tree yang berbedauntuk string E + E + E.
– Walaupun dalam penjumlahan dan perkalian berlakuhukum asosiatif, untuk menghilangkan ambiguitas
ditetapkan pengelompokkan dari kiri.
8/18/2019 analisis sintaksis
39/66
Menghilangkan Ambiguitas dari Grammar (3)
• Untuk menghilangkan ambiguitas, diperkenalkanvariabel-variabel berikut:
– Faktor: sebuah ekspresi yang tidak dapat dipecah darioperator yang berdekatan, a * atau a +. Faktor-faktorberupa:
• Identifier• Ekspresi yang diberi tanda kurung .
– Term : sebuah ekspresi yang tidak dapat dipisahkan dari
operator +. Dalam Contoh 1, term adalah product dari satuatau lebih faktor. – Ekspresi. Dalam Contoh 1, ekspresi adalah penjumlahan
satu atau lebih term .
8/18/2019 analisis sintaksis
40/66
Contoh 11
• Berikut grammar yang tidak ambigu yang me-generate bahasa yang sama dengan bahasa yang di-generate oleh grammar dalam Contoh 10:
I a | b | Ia | Ib | I0 | I1F I | (E)T F | T * F
E T | E + T• Dalam grammar tersebut, F, T dan E berturut-turut
menyatakan faktor, term , dan ekspresi.
8/18/2019 analisis sintaksis
41/66
Contoh (lanjutan)
• Grammar tsbmemungkinkan hanyasatu parse tree untuk
string a + a * a, yaitu
E
E + T
T * FT
F F
I
I
aI
aa
8/18/2019 analisis sintaksis
42/66
Leftmost Derivation dan Ambiguitas
• Penurunan dapat tidak unik walaupungrammar tidak ambigu.
•
Dalam sebuah grammar yang tidak ambigu,leftmost derivation dan rightmost derivationakan unik.
8/18/2019 analisis sintaksis
43/66
Contoh 12
• Perhatikan parse tree dalam Gambar a dan b padaContoh 10, yang menghasilkan E + E * E.
• Leftmost derivation dari kedua parse tree tersebut: – E (lm) E + E (lm) I + E (lm) a + E (lm) a + E * E (lm)
a + I * E (lm) a + a * E (lm) a + a * I
(lm) a + a * a –
E (lm) E * E (lm) E + E * E (lm) I + E * E(lm) a + E * E (lm) a + I * E (lm) a + a * E
(lm) a + a * I (lm) a + a *a
8/18/2019 analisis sintaksis
44/66
Top Down Parsing : Brute Force• Metode ini akan memilih produksi mulai dari
yang paling kiri• Melakukan expand semua non terminal pada
aturan produksi sampai yang tersisa hanya simbolterminal.
• Kemungkinan pertama string sukses di parsing• Bila terjadi ekspnasi yang salah untuk suatu
simbol variabel maka akan dilakukan backtrack.• Algoritma ini mencoba segala kemungkinan untuk
setiap simbol non terminal
h
8/18/2019 analisis sintaksis
45/66
Contoh Brute Force
8/18/2019 analisis sintaksis
46/66
Brute Force Parsing• Metoda Brute-Force tidak dapat menggunakan
grammar rekursi kiri, yaitu grammar yangmengandung produksi rekursi kiri (leftrecursion) : A →A∝ .
• Produksi rekursi kiri akan menyebabkan parsingmengalami looping tak hingga.
• Agar tidak menghasilkan looping tak hingga,
grammar rekursi kiri harus ditransformasi.• Untuk contoh di bawah ini transformasi berarti
merubah produksi A →Ab menjadi A →bA.
8/18/2019 analisis sintaksis
47/66
8/18/2019 analisis sintaksis
48/66
Top Down Parsing : Recursive DescentParser
• Kelas metoda tanpa backup, termasuk metoda recursive descent,• Meerupakan metoda parsing yang tidak menggunakan produksi
alternatif ketika hasil akibat penggunaan sebuah produksi tidaksesuai dengan simbol input.
• Jika produksi A mempunyai dua buah ruas kanan atau lebih
maka produksi yang dipilih untuk digunakan adalah produksidengan simbol pertama ruas kanannya sama dengan input yangsedang dibaca.
• Jika tidak ada produksi yang demikian maka dikatakan bahwaparsing tidak dapat dilakukan.
• Ketentuan produksi yang digunakan metoda recursive descentadalah : Jika terdapat dua atau lebih produksi dengan ruas kiriyang sama maka karakter pertama dari semua ruas kanan produksitersebut tidak boleh sama. Ketentuan ini tidak melarang adanyaproduksi yang bersifat rekursi kiri.
8/18/2019 analisis sintaksis
49/66
8/18/2019 analisis sintaksis
50/66
Cara Menghilangkan Rekursive kiri
CFGmengandung
aturan produksiyang rekursif kiri
Aturan produksiyang tidak rekursif
kiri
Aturan produksiyang rekursif kiri
Lakukanpenggantian,
munculkan aturanproduksi baru dan
symbol variabelbaru
CFG bebas dariaturan produksi
yang rekursif kiri
8/18/2019 analisis sintaksis
51/66
Penghilangan Rekursif Kiri
Steps :
• Pisahkan aturan produksi yang rekursif kiri dan yang tidak.
Aturan produksi yang rekursif kiri diberi simbol n setelahvariabel:
A A 1 A 2 A 3 …….. A nAturan produksi yang tidak rekursif kiri (termasuk produksi ) diberi simbol m
A 1 2 3 …….. m
• Lakukan penggantian aturan produksi yang rekursif kiri, menjadi sebagai berikut:
A 1 Z 2 Z ……… m ZZ 1 2 3 …… n
Z 1Z 2Z 3Z …… nZ
8/18/2019 analisis sintaksis
52/66
Penghilangan Rekursif Kiri – Hasil akhir berupa aturan produksi pengganti ditambah dengan aturan produksi
semula yang tidak rekursif kiri.Contoh:Lakukanlah penghilangan rekursif kiri untuk tata bahas bebas konteks dibawah:
1. S Sab aSc dd ff Sbd
2. S Sab Sb cAA Aa a bd
• Aturan produksi yang rekursif kiri:S Sab Sbd
Untuk symbol S1 = ab, 2 = bd
• Aturan produksi yang tidak rekursif kiri:S aSc dd ff
Untuk symbol S1 = aSc, 2 = dd, 3 = ff
8/18/2019 analisis sintaksis
53/66
1 = ab, 2 = bd & 1 = aSc, 2 = dd, 3 = ff
• Lakukan penggantian aturan produksi yang rekursif kiri
S Sab Sbd, digantikan oleh: – S 1 Z1 2 Z1 3 Z1 – S aSc Z1 dd Z1 ff Z1 – Z1 1 2 – Z1 1 Z1 2 Z1 – Z1 ab bd – Z1 ab Z1 bd Z1
8/18/2019 analisis sintaksis
54/66
Contoh
2. Aturan produksi yang rekursif kiri:
S Sab SbA Aa
Untuk symbol S 1 = ab, 2 = bUntuk symbol A 1 = a
• Aturan produksi yang tidak rekursif kiri:S cAA a bd
Untuk symbol S 1 = cAUntuk symbol A 1 = a, 2 = bd
• Lakukan penggantian aturanproduksi yang rekursif kiri
S Sab Sb, digantikan oleh: – S 1 Z1 – Z1 1 2 – Z
1 1Z
1
2Z
1
A Aa, digantikan oleh: – A 1 Z2 2 Z2 – Z2 1 – Z2 1 Z2
8/18/2019 analisis sintaksis
55/66
S 1 = ab, 2 = b , 1 = cAA
1= a ,
1= a,
2= bd
• Lakukan penggantian aturan produksi yangrekursif kiri
S Sab Sb, digantikan oleh: – S cAZ1 – Z1 ab b – Z1 ab Z1 bZ1
A Aa, digantikan oleh: – A a Z2 bd Z2 – Z2 a – Z2 aZ2
Hasil akhir setelah penghilanganrekursif kiri adalah:
S cAA a bdS cAZ1
Z1
ab bZ1 ab Z1 bZ1A aZ2 bdZ2
Z2 aZ2 aZ2
8/18/2019 analisis sintaksis
56/66
Metode Parsing• Bottom Up Parsing
– Bottom Up parser berusaha mencocokkan input denganaturan produksi.
– Dalam kalimat koala MEMAKAN KURSI, parser akanmelihat kata KOALA, lalu mencari aturan apa yangmenghasilkan KOALA, dan kesimpulannya adalah, lalu berikutnya kata MEMAKAN adalah dan KURSI adalah . Dari ketigaaturan tersebut, kita bisa mereduksi menjadi sebuah
, dan ternyata aksi ini bisa direduksi lagi menjadi sehingga input tersebut adalah valid
– Kakas Bantu dengan metode Bottom Up : YACC/Bison
8/18/2019 analisis sintaksis
57/66
Shift-reduce Parsing
Comp 412, Fall 2010 57
To implement a bottom-up parser, we adopt the shift-reduce paradigm
A shift-reduce parser is a stack automaton with four actions• Shift — next word is shifted onto the stack• Reduce — right end of handle is at top of stackLocate left end of handle within the stack
Pop handle off stack & push appropriate lhs• Accept — stop parsing & report success• Error — call an error reporting/recovery routine
Accept & Error are simpleShift is just a push and a call to the scannerReduce takes | rhs | pops & 1 push
But how does the parser know when to shift and when to reduce? It shifts until it has a handle at the top of the stack.
8/18/2019 analisis sintaksis
58/66
Bottom-up Parser
Comp 412, Fall 2010 58
A simple shift-reduce parser: push INVALIDtoken next_token( )repeat until (top of stack = Goal and token = EOF )
if the top of the stack is a handle A then // reduce to A
pop | | symbols off the stack push A onto the stack
else if (token EOF )then // shift
push tokentoken next_token( )
else // need to shift, but out of inputreport an error
Figure 3.7 in EAC
What happens on an error?It fails to find a handle
Thus, it keeps shifting
Eventually, it consumesall input
This parser reads all inputbefore reporting an error, not adesirable property.
Error localization is an issue inthe handle-finding process thataffects the practicality of shift-
reduce parsers…We will fix this issue later.
8/18/2019 analisis sintaksis
59/66
Back to x - 2 * y
Comp 412, Fall 2010 59
Stack Input Handle Action
$ id - num * id none shift $ id - num * id
1. Shift until the top of the stack is the right end of a handle
2. Find the left end of the handle and reduce
0 Goal Expr
1 Expr Expr + Term2 | Expr - Term
3 | Term
4 Term Term * Factor
5 | Term / Factor
6 | Factor
7 Factor number
8 | id
9 | ( Expr )
8/18/2019 analisis sintaksis
60/66
Back to x - 2 * y
Comp 412, Fall 2010 60
Stack Input Handle Action$ id - num * id
none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 4 $ Expr - num * id
1. Shift until the top of the stack is the right end of a handle
2. Find the left end of the handle and reduce
0 Goal Expr
1 Expr Expr + Term2 | Expr - Term
3 | Term
4 Term Term * Factor
5 | Term / Factor
6 | Factor
7 Factor number
8 | id
9 | ( Expr )
8/18/2019 analisis sintaksis
61/66
Back to x - 2 * y
Comp 412, Fall 2010 61
Stack Input Handle Action$ id - num * id none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 4 $ Expr - num * id
1. Shift until the top of the stack is the right end of a handle
2. Find the left end of the handle and reduce
0 Goal Expr
1 Expr Expr + Term2 | Expr - Term
3 | Term
4 Term Term * Factor
5 | Term / Factor
6 | Factor
7 Factor number
8 | id9 | ( Expr )Expr is not a handle at this point because it does not occur at this
point in the derivation.
While that statement sounds like oracular mysticism, we will seethat the decision can be automated efficiently.
8/18/2019 analisis sintaksis
62/66
Back to x - 2 * y
Comp 412, Fall 2010 62
Stack Input Handle Action$ id - num * id none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 3$ Expr - num * id none shift $ Expr - num * id none shift $ Expr - num * id
1. Shift until the top of the stack is the right end of a handle
2. Find the left end of the handle and reduce
0 Goal Expr
1 Expr Expr + Term2 | Expr - Term
3 | Term
4 Term Term * Factor
5 | Term / Factor
6 | Factor
7 Factor number
8 | id9 | ( Expr )
8/18/2019 analisis sintaksis
63/66
Back to x - 2 * y
Comp 412, Fall 2010 63
Stack Input Handle Action$ id - num * id none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 3$ Expr - num * id none shift $ Expr - num * id none shift
$ Expr - num * id 7,3 reduce 7 $ Expr - Factor * id 6,3 reduce 6$ Expr - Term * id
1. Shift until the top of the stack is the right end of a handle
2. Find the left end of the handle and reduce
0 Goal Expr
1 Expr Expr + Term2 | Expr - Term
3 | Term
4 Term Term * Factor
5 | Term / Factor
6 | Factor
7 Factor number
8 | id9 | ( Expr )
8/18/2019 analisis sintaksis
64/66
Back to x - 2 * y
Comp 412, Fall 2010 64
Stack Input Handle Action$ id - num * id none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 3$ Expr - num * id none shift $ Expr - num * id none shift
$ Expr - num * id 7,3 reduce 7 $ Expr - Factor * id 6,3 reduce 6$ Expr - Term * id none shift $ Expr - Term * id none shift $ Expr - Term * id
1. Shift until the top of the stack is the right end of a handle
2. Find the left end of the handle and reduce
0 Goal Expr
1 Expr Expr + Term2 | Expr - Term
3 | Term
4 Term Term * Factor
5 | Term / Factor
6 | Factor
7 Factor number
8 | id9 | ( Expr )
8/18/2019 analisis sintaksis
65/66
Back to x - 2 * y
Comp 412, Fall 2010 65
5 shifts +9 reduces + 1accept
Stack Input Handle Action$ id - num * id none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 3$ Expr - num * id none shift $ Expr - num * id none shift
$ Expr - num * id 7,3 reduce 7 $ Expr - Factor * id 6,3 reduce 6$ Expr - Term * id none shift $ Expr - Term * id none shift $ Expr - Term * id 8,5 reduce 8$ Expr - Term * Factor 4,5 reduce 4 $ Expr - Term 2,3 reduce 2 $ Expr 0,1 reduce 0 $ Goal none accept
1. Shift until the top of the stack is the right end of a handle
2. Find the left end of the handle and reduce
0 Goal Expr
1 Expr Expr + Term2 | Expr - Term
3 | Term
4 Term Term * Factor
5 | Term / Factor
6 | Factor
7 Factor number
8 | id9 | ( Expr )
8/18/2019 analisis sintaksis
66/66
Back to x - 2 * y
Goal
Term
Fact.
Expr –
Expr
Fact.
Fact.Term
Term
*
Stack Input Action$ id - num * id shift $ id - num * id reduce 8$ Factor - num * id reduce 6$ Term - num * id reduce 3$ Expr - num * id shift $ Expr - num * id shift
$ Expr - num * id reduce 7 $ Expr - Factor * id reduce 6$ Expr - Term * id shift $ Expr - Term * id shift $ Expr - Term * id reduce 8$ Expr - Term * Factor reduce 4 $ Expr - Term reduce 2 $ Expr reduce 0 $ Goal accept
Corresponding Parse Tree
Recommended