- Synthesized attribute dievaluasi dengan metode bottom-up parsing.
- Harga dari synthesized attribute disimpan dalam stack ( extra fields )
- Pada saat reduksi : Harga yang baru dihitung berdasarkan harga dari symbol yang sudah ada di stack
- Untuk produksi A ? XYZ : Sebelum reduksi dilakukan evaluasi terhadap harga X, Y , dan Z.
L-ATTRIBUTE
Syntax directed definition adalah bersifat L-attribute jika setiap attribute dari produksi A?X1X2......Xn adalah synthesized atau inherited attribute dari Xj yang tergantung hanya pada :
Syntax directed definition adalah bersifat L-attribute jika setiap attribute dari produksi A?X1X2......Xn adalah synthesized atau inherited attribute dari Xj yang tergantung hanya pada :
1. Attribute dari simbol X1,X2,...Xj�1 yang terletak disebelah kiri XJ
2. Atribut Inherited dari A Contoh :
2. Atribut Inherited dari A Contoh :
S-attribute definition bersifat L-attribute. Syntax directed definition berikut tidak bersifat L-attribute, karena atribut simbol Q tergantung pada atribut simbol R yang terletak disebelah kanannya
TRANSLATION SCHEMES
� Merupakan Context Free Grammar dimana atribut tergabung dengan simbol-simbol grammar dan semantic
action pada sisi kanan dari produksi
� Semantic action dituliskan diantara braces ( { } )
Contoh :
rest ? + term { print (�+�) } rest1 Parse tree dari produksi tersebut :
rest ? + term { print (�+�) } rest1 Parse tree dari produksi tersebut :
Contoh translation schemes yang merubah notasi infix menjadi notasi
postfix berikut :
E ? TR
R ? addop T { print (addop.lexeme) } R1 ?e
T ? num {print (num.val)}
postfix berikut :
E ? TR
R ? addop T { print (addop.lexeme) } R1 ?e
T ? num {print (num.val)}
TOP-DOWN TRANSLATION
Eliminasi left recursion untuk mentransformasi translation schemes dengan attributes sintetis.
Translation schemes dengan grammar left recursive sebagai berikut :
Eliminasi left recursion untuk mentransformasi translation schemes dengan attributes sintetis.
Translation schemes dengan grammar left recursive sebagai berikut :
G: E -> E1 + T { E.val := E1.val + T.val}
E -> E1 � T { E.val := E1.val - T.val}
E -> T { E.val := T.val}
T -> (E) { T.val := E.val}
T -> num { T.val := num.val}
Bila input suatu ekspresi : 9-5+2 maka
translation schemes adalah : 95-2+
Tidak ada komentar:
Posting Komentar