【文章內(nèi)容簡介】
1 翻譯方案 2 L → E print() print_post(post)。 E → E1 + E2 := || || 39。+39。 post(k) := 39。+39。 k := k+1。 print(+)。 E → num := 。 post(k) := lexval。 k := k+1。 print(lexval)。 另一種翻譯方案:無需存放中間過程,直接在分析的過程中輸出表達(dá)式的后綴形式。 原因:自下而上分析過程是對表達(dá)式分析樹的一次后續(xù)遍歷,而遍歷次序與表達(dá)式的后綴表示正好一致。 13 語法制導(dǎo)翻譯簡介 翻譯方案中需要考慮的問題: ① 采用什么樣的語法分析方法,不同的分析方法對語義處理的次序不同 ② 為屬性分配存儲空間 ③ 考慮計算次序 翻譯方案 1,自下而上計算, LR分析。以 3+5+8為例,歸約時翻譯。 LEE + E3 5E + E 8產(chǎn)生式 翻譯方案 1 L → E print_post(post)。 E → E1 + E2 post(k) := 39。+39。 k := k+1。 E → num post(k) := lexval。 k := k+1。 post:(3 5 + 8 +) 14 語法制導(dǎo)翻譯簡介 3. 屬性作為分析樹的注釋 將屬性附著在分析樹對應(yīng)文法符號上,形成 注釋分析樹 。 [例 ] 3+5+8的分析樹和注釋分析樹: LE ( p r i n t ( + ) )E ( p r i n t ( + ) ) + E ( p r i n t ( 8 ) )E ( p r i n t ( 3 ) ) + E ( p r i n t ( 5 ) ) 83 5產(chǎn)生式 語法制導(dǎo)定義 翻譯方案 2 L → E print() E → E1 + E2 := || || 39。+39。 print(+)。 E → num := 。 print(lexval)。 .post=3 .post=5 .post=8 .post=35+ .post=35+8+ (print(35+8+)) LEE + EE + E 83 515 語法制導(dǎo)翻譯簡介 4. 注釋分析樹上看繼承屬性與綜合屬性 ? 繼承屬性是自上而下計算的 ? 綜合屬性是自下而上計算的 提醒:除非特別提醒,本章討論的語法制導(dǎo)翻譯是 綜合屬性 。 .post=3 .post=5 .post=8 .post=35+ .post=35+8+ (print(35+8+)) LEE + EE + E 83 516 語法制導(dǎo)翻譯簡介 ? LR分析翻譯方案的設(shè)計 LR分析中的語法制導(dǎo)翻譯實質(zhì)上是對 LR語法分析的擴(kuò)充: ① 擴(kuò)充 LR分析器的功能 :當(dāng)執(zhí)行歸約產(chǎn)生式的動作時,也執(zhí)行產(chǎn)生式對應(yīng)的語義動作。由于是 歸約時執(zhí)行語義動作 ,限制語義 動作僅能放在產(chǎn)生式右