Bottom-Up Evaluation
Synthesized attribute dievaluasi dengan metode bottom-up parsing. Harga dari synthesized attribute disimpan dalam stack (extra fields). Pada saat reduksi: Harga yang harus dihitung berdasarkan harga dari symbol yang sudah ada di stack (extra field).
Untuk produksi A | XYZ
Sebelum reduksi dilakukan evaluasi terhadap harga X, Y dan Z.
L-attribute
- Syntax directed definition bersifat L-attribute jika setiap atribut dari produksi A→ X1, X2, ..., Xj-1 yang terletak disebelah kiri Xj
- Inherited attribute A
Catatan:
Setiap S - attribute definition bersifat L - attribute, karena batasan (1) dan (2) hanya berlaku untuk inherited attribute.
Contoh:
Syntax directed definition di bawah ini tidak bersifat L - attribute karena inherited attribute Q.i dan simbol grammar Q tergantung pada attribute symbol R yang terletak di sebelah kanannya.
Production | Semantic Rules | |
A -> L M | L.i:=1(A.i) | |
M.i:=m(L.s) | ||
A.s:=f(M.s) | ||
A -> Q R | R.i:=r(A.i) | |
Q.i:=q(R.s) | ||
A.s:=f(Q.s) |
Translation schemes
- Merupakan context free di mana semantic action ditambahkan pada sisi kanan dari produksi.
- Semantic action dituliskan di antara tanda { dan }
Contoh:
rest → + term {print (' + ')} rest1
Parse tree dari produksi tersebut:
Contoh translation schemes yang mengubah notasi infix menjadi notasi postfix.
E→ TR
R→ addop T {print(addop.lexeme)}R1|
T→ num {print(num.val)}
Parse tree untuk input 9-5+2 dengan menggunakan grammar diatas adalah: