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.
© Copyright 2024 Paperzz