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.