Inherited Attributes
Dragon book 進入第五章 syntax-directed translation。本來我以為基本上應該就是 parse tree 上面的 fold,可是與這個概念最直接的對應只是 "S-attributed translations" (S for "synthesised"),另外還有一種 "inherited attributes"。一個 production rule 左側 symbol 的
- synthesised attributes 是從 production rule body 裡面各個成份的 attributes 合成出來的,而
- inherited attributes 則是由「該 symbol 在 parse tree 裡面的 parent」所給的值。
pExpr'
傳回的是個 function ExprTree -> ExprTree
,它的 parameter 其實就是 dragon book 所謂的 inherited attribute。Dragon book 接下來就談怎麼判斷 attributes 的求值順序(dependency graphs and topological sort, naturally),因為必須先算好 inherited attribute 的值才能算 Expr'
的 attribute 值。不過在 functional programming 似乎完全不用麻煩,ExprTree -> ExprTree
的解法把求值順序打回最基本的 fold 了。某種層面來看,synthesised attributes 所蘊含的 dependency edges 藏在 fold 的結構裡面,inherited attributes 所帶來的額外 dependency edges 則由 function arrows 表示。求值的時候,電腦就會神奇地根據隱含的 dependency graph 自己找出一個求值順序。
--
這一段和 FP 這邊兩相對照會很有意思 XD。
另外 "acyclic graphs ==> exists topological order" 的證明也很有意思,結構和 foundationalism 對 Agrippan scepticism 的回應一模一樣。我們宣稱這樣的圖裡面必存在一個點,沒有任何入射邊。若不然,Agrippan scepticism 的前提「任何信念都必須由另一個信念證成」(任何點都有入射邊)就滿足了,現在有三種可能:
- 無窮後退:沿著一條一條的入射邊往回走,無窮下去,但 |V| = finite number,矛盾;
- 拒絕舉證:到某個信念的時候拒絕提供證成,但這就和前提「任何點都有入射邊」矛盾;
- 循環論證:沿著入射邊走回某個先前遇過的點,但這就形成 cycle 而與 acyclic graph 的前提矛盾。
--
我就直接把兩邊的詞彙混在一起用了 XD。
Labels: Compiler, Epistemology, Graph Theory
<< 回到主頁