合成屬性和繼承屬性的區別


合成屬性和繼承屬性都是語言語義的一部分,它們為語言的結構(如標記和語法結構)提供含義。語義有助於解釋符號、它們的型別以及它們彼此之間的關係,並且語義分析判斷源程式中構建的語法結構是否有意義。現在,根據屬性的特徵,我們可以區分合成屬性和繼承屬性。

以下是合成屬性和繼承屬性之間的一些重要區別。

序號關鍵點合成屬性繼承屬性
1定義合成屬性是一個屬性,其語法樹節點的值由子節點的屬性值確定。例如,假設以下產生式 S → ABC,如果 S 從其子節點(A、B、C)獲取值,則稱其為合成屬性,因為 ABC 的值被合成到 S 中。另一方面,如果一個屬性的語法樹節點值由父節點和/或兄弟節點的屬性值確定,則稱其為繼承屬性。在 S → ABC 的情況下,如果 A 可以從 S、B 和 C 獲取值,B 可以從 S、A 和 C 獲取值,同樣,C 可以從 S、A 和 B 獲取值,則稱 S 為繼承屬性。
2設計如上所述,對於合成屬性,產生式必須以非終結符作為其頭部。另一方面,對於繼承屬性,產生式必須在其主體中包含非終結符作為符號。
3評估合成屬性可以在語法樹的單次自底向上遍歷中進行評估。而另一方面,繼承屬性可以在語法樹的單次自頂向下和橫向遍歷中進行評估。
4終結符終結符和非終結符都可以包含合成屬性。另一方面,只有非終結符可以包含繼承屬性。
5用法合成屬性被 S 屬性 SDT 和 L 屬性 STD 使用。另一方面,繼承屬性僅被 L 屬性 SDT 使用。

更新於: 2020年6月9日

17K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告