abba stack input output
Download
Report
Transcript abba stack input output
Pergerakan LL(1) Parser dengan input abba
a
S aBa
B bB |
stack
input
$S
abba$
S
S aBa
B
B
output
b
B bB
$
Pergerakan LL(1) Parser dengan input abba
a
S aBa
B bB |
S
S aBa
B
B
stack
input
output
$S
$aBa
$
$aB
abba$
abba$
bba$
S aBa
Pop(a)
b
B bB
$
Pergerakan LL(1) Parser dengan input abba
a
S aBa
B bB |
S
S aBa
B
B
stack
input
output
$S
$
$aBa
$aB
$a Bb
b
$aB
abba$
abba$
bba$
ba$
a$
S aBa
Pop(a)
B bB
Pop(b)
b
B bB
$
Pergerakan LL(1) Parser dengan input abba
a
S aBa
B bB |
S
S aBa
B
B B
stack
input
output
$S
$
$aBa
$aB
$a Bb
b
$aB
$a
$
abba$
abba$
bba$
ba$
a$
a$
$
S aBa
Pop(a)
B bB
Pop(b)
B
Pop(a)
b
B bB
$
Pergerakan LL(1) Parser dengan input abba
a
S aBa
B bB |
S
S aBa
B
B
stack
input
output
$S
$
$aBa
$aB
$a Bb
b
$aB
$a
$
abba$
abba$
bba$
ba$
a$
a$
$
S aBa
Parsing Sukses
Pop(a)
B bB
Pop(b)
B
Pop(a)
Accepted
b
B bB
$
Pergerakan parsing dengan input abba
Derivasi language:
S aBa
B bB
B
Input:
abba
Parse tree:
S
a
a
B
b
B
b
Contoh Top down parsing
Tabel parsing:
id
id
Input: id + id
E
E TE’
+
*
(
)
$
E TE’
E’ +TE’
E’
E’’
T FT’
T T FT’
T’
T’ *FT’
T’
T’’
id
F (E)
F F id
Pergerakan LL(1) Parsing
stack
input
output
Parse tree:
E
$E
E TE’
id+id$
$E’T
id+id$
T FT’
$E’T’F
F id
id+id$
E’
T
Pop(id)
$E’T’id
id+id$
$E’T’
T’
+id$
F
+ T E’
$E’
E’ +TE’
+id$
Pop(+)
$E’T+
+id$
$E’T
id$
T FT’
’
T
F
’
’
id
$E T F
id$
F id
Pop(id)
$E’T’id
id$
$
T’
$E’T’
id
E’
$E’
$
accepted
$
$
E’
T’
Contoh mencari FIRST
E TE
First(E) = First(TE) = First(T)
T FT
First(T) = First(FT) = First(F)
F (E) id
First(F) = First(‘(E)’) | First(id) = { ( , id }
E +TE
First(E) = First(+TE) | First() = { + , }
T FT
First(T) = First(FT) | First() = { , }
Contoh mencari FOLLOW (pada non terminal)
Derivasi:
E TE’
E’ +TE’ |
(Rule 1)
E start simbol Follow(E) = { $ }
T FT’
T’ *FT’ |
F (E) | id
Rules:
1. If S is the start symbol $ is in FOLLOW(S)
2. If A B is a production rule everything in FIRST() is FOLLOW(B) except
3. If ( A B is a production rule ) or ( A B is a production rule and is in FIRST() )
everything in FOLLOW(A) is in FOLLOW(B).
Contoh mencari FOLLOW (pada non terminal)
E start simbol Follow(E) = { $ }
F (E) (Rule 2) Follow(E) = { ) }
E TE
E
(Rule 3)
Follow(E) = { ), $ }
Follow(T) = Follow(E) = { $, ) }
Follow(T)= { +, ), $ }
E +TE (Rule 2) Follow(T) = First(E) - = { + }
T FT’
(Rule 3) Follow(F) = Follow(T) = {+, ), $ }
T’
Follow(F)={*,+, ), $}
T’ *FT’ (Rule 2) Follow(F) = First(T) - = {*}
Rules:
1. If S is the start symbol $ is in FOLLOW(S)
2. If A B is a production rule everything in FIRST() is FOLLOW(B) except
3. If ( A B is a production rule ) or ( A B is a production rule and is in FIRST() )
everything in FOLLOW(A) is in FOLLOW(B).
Contoh mencari FOLLOW (pada non terminal)
E TE’
dengan = T
T FT’
dengan = F
(rule 3)
Follow(E’) = Follow(E) = { ), $ }
(rule 3)
Follow(T’) = Follow(T) = { +, ), $ }
Rules:
1. If S is the start symbol $ is in FOLLOW(S)
2. If A B is a production rule everything in FIRST() is FOLLOW(B) except
3. If ( A B is a production rule ) or ( A B is a production rule and is in FIRST() )
everything in FOLLOW(A) is in FOLLOW(B).
Pembuatan tabel parsing top-down
Follow(E) = { $, ) }
Follow(E’) = { $, ) }
Follow(T) = { +, ), $ }
Follow(T’) = { +, ), $ }
Follow(F) = {+, *, ), $ }
First(E) = { (, id }
First(E’) = { +, }
First(T) = { (, id }
First(T’) = { , }
First(F) = { (, id }
Algoritma pembuatan tabel parsing:
•for each production rule A of a grammar G
1. for each terminal a in FIRST() add A to M[A,a]
2. If in FIRST() for each terminal a in FOLLOW(A) add A to M[A,a]
3. If in FIRST() and $ in FOLLOW(A) add A to M[A,$]
•All other undefined entries of the parsing table are error entries.
Algoritma pembuatan tabel parsing:
E TE’
•for each production rule A of a grammar G
E’ +TE’
1. for each terminal a in FIRST() add A to M[A,a]
2. If in FIRST() for each terminal a in FOLLOW(A) add A to M[A,a]
E’
T
3. If in FIRST() and $ in FOLLOW(A) add A to M[A,$]
FT’
•All other undefined entries of the parsing table are error entries.
T’ *FT’
T’
First(TE’) = { (, id } dengan aturan 1
F (E)
F id
id
E
E’
T
T’
F
+
*
(
)
$
Algoritma pembuatan tabel parsing:
•for each production rule A of a grammar G
E’ +TE’
1. for each terminal a in FIRST() add A to M[A,a]
2. If in FIRST() for each terminal a in FOLLOW(A) add A to M[A,a]
E’
T
3. If in FIRST() and $ in FOLLOW(A) add A to M[A,$]
FT’
•All other undefined entries of the parsing table are error entries.
T’ *FT’
T’
First(+TE’) = { + }
F (E)
dengan aturan 1
F id
id
E
E’
T
T’
F
E TE’
+
*
(
E TE’
)
$
Algoritma pembuatan tabel parsing:
•for each production rule A of a grammar G
1. for each terminal a in FIRST() add A to M[A,a]
2. If in FIRST() for each terminal a in FOLLOW(A) add A to M[A,a]
E’
T
3. If in FIRST() and $ in FOLLOW(A) add A to M[A,$]
FT’
•All other undefined entries of the parsing table are error entries.
T’ *FT’
T’
Follow(E’) = { $, ) } dengan aturan 2
F (E)
F id
id
E
E’
T
T’
F
+
E TE’
*
(
E TE’
E’ +TE’
)
$
Algoritma pembuatan tabel parsing:
•for each production rule A of a grammar G
1. for each terminal a in FIRST() add A to M[A,a]
2. If in FIRST() for each terminal a in FOLLOW(A) add A to M[A,a]
T
3. If in FIRST() and $ in FOLLOW(A) add A to M[A,$]
FT’
•All other undefined entries of the parsing table are error entries.
T’ *FT’
T’
First(FT’) = { (, id } dengan aturan 1
F (E)
F id
id
E
E’
T
T’
F
+
E TE’
*
(
)
$
E TE’
E’ +TE’
E’ E’
Algoritma pembuatan tabel parsing:
•for each production rule A of a grammar G
1. for each terminal a in FIRST() add A to M[A,a]
2. If in FIRST() for each terminal a in FOLLOW(A) add A to M[A,a]
3. If in FIRST() and $ in FOLLOW(A) add A to M[A,$]
•All other undefined entries of the parsing table are error entries.
T’ *FT’
T’
First(*FT’) = { * }
F (E)
dengan aturan 1
F id
id
E
E TE’
T’
F
*
(
T FT’
)
$
E TE’
E’ +TE’
E’
T
+
E’ E’
T FT’
Algoritma pembuatan tabel parsing:
•for each production rule A of a grammar G
1. for each terminal a in FIRST() add A to M[A,a]
2. If in FIRST() for each terminal a in FOLLOW(A) add A to M[A,a]
3. If in FIRST() and $ in FOLLOW(A) add A to M[A,$]
•All other undefined entries of the parsing table are error entries.
T’
Follow(T’) = { +, ), $ } dengan aturan 2 & 3
F (E)
F id
id
E
T’
F
*
E TE’
(
)
$
E TE’
E’ +TE’
E’
T
+
E’ E’
T FT’
T FT’
T’ *FT’
Algoritma pembuatan tabel parsing:
•for each production rule A of a grammar G
1. for each terminal a in FIRST() add A to M[A,a]
2. If in FIRST() for each terminal a in FOLLOW(A) add A to M[A,a]
3. If in FIRST() and $ in FOLLOW(A) add A to M[A,$]
•All other undefined entries of the parsing table are error entries.
First(“(E)”) = { ( }
F (E)
dengan aturan 1
F id
id
E
T’
F
*
E TE’
(
)
$
E TE’
E’ +TE’
E’
T
+
E’ E’
T FT’
T FT’
T’
T’ *FT’
T’ T’
Algoritma pembuatan tabel parsing:
•for each production rule A of a grammar G
1. for each terminal a in FIRST() add A to M[A,a]
2. If in FIRST() for each terminal a in FOLLOW(A) add A to M[A,a]
3. If in FIRST() and $ in FOLLOW(A) add A to M[A,$]
•All other undefined entries of the parsing table are error entries.
First(id) = { id } dengan aturan 1
F id
id
E
T’
F
*
E TE’
(
)
$
E TE’
E’ +TE’
E’
T
+
E’ E’
T FT’
T FT’
T’
T’ *FT’
T’ T’
F (E)
Algoritma pembuatan tabel parsing:
•for each production rule A of a grammar G
1. for each terminal a in FIRST() add A to M[A,a]
2. If in FIRST() for each terminal a in FOLLOW(A) add A to M[A,a]
3. If in FIRST() and $ in FOLLOW(A) add A to M[A,$]
•All other undefined entries of the parsing table are error entries.
Selain itu adalah error
id
+
*
(
)
$
E TE’
error
error
T FT’
E
E TE’
E’
error
E’ +TE’
T
T FT’
error
error
error
error
T’
error
T’
T’ *FT’
error
F
F id
error
error
F (E)
error
error
E’ E’
error
error
T’ T’
error
error
Self Assessment
1. Jika diketahui grammar dengan derivasi sbb:
S aBa
B bB |
Maka nilai First(B) adalah:
a.) a
b.) b
c.) $
d.) S
2. Dari soal no.1 nilai dari First(S) adalah:
a.) a
b.) b
c.) $
d.) S
3. Dari soal no. 1 nilai dari Follow(S) adalah:
a.) a
b.) b
c.) $
d.) S
4. Simbol yang digunakan sebagai tanda akhir input dalam pergerakan parsing
adalah:
a.) a
b.) b
c.) $
d.) S
Summary
• Top down parsing melakukan parsing dari
start simbol sehingga terbentuk parse tree
• Untuk melakukan top down parsing
dengan stack pertama-tama isi stack
adalah $ dan start simbol
• Untuk membuat tabel parsing harus dicari
dulu nilai first dan follow dari setiap non
terminal simbol.