合成屬性和繼承屬性的區別
合成屬性和繼承屬性都是語言語義的一部分,它們為語言的結構(如標記和語法結構)提供含義。語義有助於解釋符號、它們的型別以及它們彼此之間的關係,並且語義分析判斷源程式中構建的語法結構是否有意義。現在,根據屬性的特徵,我們可以區分合成屬性和繼承屬性。
以下是合成屬性和繼承屬性之間的一些重要區別。
序號 | 關鍵點 | 合成屬性 | 繼承屬性 |
---|---|---|---|
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 使用。 |
廣告