10 / 1 - 6
Syntax-directed definition sebagai generalisasi CFG dimana setiap symbol grammar diasosiasikan suatu atribut Atribut terdiri 2 bagian : Synthesized attribute inherited attribute
Teknik Kompilasi
10 / 2 - 6
ATRIBUT SINTETIS
Annotated parse tree menunjukkan harga atribut pada setiap node. Attribut simbol disebelah kiri produksi grammar dievaluasi berdasarkan attribut simbol disebelah kanan, contohnya :
Produksi L E E E + T E T T T * F T F F (E) F digit Sematik Rule Print (E.val) E.val := E.val + T.val E.val := T.val T.val := T.val * F.val T.val := F.val F.val := E.val F.val := digit.lexval
Teknik Kompilasi
10 / 3 - 6
INHERITED ATTRIBUTES
Attribute suatu node ditentukan oleh atrribut dari rootnya, contoh :
Produksi D TL T int T real L L1 , id L id Sematik Rule L.int := T.type T.type := integer T.type := real L1.type := L.in addtype(id.entry, L.in) addtype(id.entry, L.in)
DEPENDENCY GRAPHS
Menunjukkan urutan evaluasi atribut suatu node. contoh atribut sintetis : E E1 + E2 Dependency graph :
E val E1 val + E2 val
Teknik Kompilasi
10 / 4 - 6
4
type in
in
5 L ,
L 8 , id2
6 id3 2 entry 3
entry
7 10
L Id1
1 entry
diatas,
urutan
evaluasi
a4 := real; a5 := a4; addtype ( id3.entry, a5 ); a7 := a5; addtype ( id2.entry, a7 ); a9 := a7; addtype ( id1. entry, a9 );
Teknik Kompilasi
10 / 5 - 6
SYNTAX TREE
Merupakan bentuk lebih sederhana parse tree Operator atau keywords tidak akan muncul pada leaves tetapi muncul sebagai parent dari suatu node. Semantic rules merupakan procedure untuk membuat node dan mengisi field dari node.
Teknik Kompilasi
10 / 6 - 6
mkleaf(id, entry) Membuat suatu node identifier dengan label id dan field yang berisi entry serta suatu pointer ke simbol table entry untuk identifier mkleaf(num, val) Membuat suatu node bilangan dengan label num dan suatu field berisi val Contoh : Suatu ekspresi : a 4 + c Dalam sekuens ini bahwa : p1, p2, , p5 adalah node pointer dan entrya, entryb adalah pointer entry simbol table untuk identifier a dan c, untuk jelasnya :
1) 2) 3) 4) 5)
p1 := mkleaf (id, entrya); p2 := mkleaf (num, 4); p3 := mknode (-, p1, p2); p4 := mkleaf (id, entryc); p5 := mknode (+, p3, p4)