預期式屬性一般屬於繼承性屬性(inherited attribute)。原因如下:
從上而下傳遞:預期式屬性通常由語法樹中的父節點或祖先節點決定並傳遞給子節點。例如,在處理一個運算表達式時,父節點可能會期望子節點具有特定的數據類型(如整數或浮點數)。
依賴上下文:預期式屬性依賴於語法樹中上層節點的上下文信息。這種信息需要從語法樹的上層傳遞到下層,以便子節點能夠正確地了解其應該符合的類型要求。
語義分析:在語義分析階段,需要檢查各個子節點是否符合其預期的類型。因此,預期式屬性往往是由父節點設定的,然後傳遞給其子節點。
實際式屬性一般屬於合成性屬性(synthesized attribute)。原因如下:
自下而上傳遞:實際式屬性通常由語法樹中的子節點決定並傳遞給父節點。例如,子節點的實際類型會影響父節點如何解釋和處理該子節點的值。
局部計算:實際式屬性可以直接從子節點的本地信息計算得出,然後再傳遞到父節點。例如,一個數字節點的實際類型可以是根據它的字面值(如整數或浮點數)來決定的,然後這個類型信息會傳遞到包含這個數字節點的父節點。
語義分析:在語義分析階段,需要根據子節點的實際類型來確定父節點的行為和類型。因此,實際式屬性通常是由子節點計算並傳遞到父節點的。
這種屬性分類方式有助於在語法樹遍歷和語義分析過程中進行清晰的類型檢查和屬性傳遞。