什麼是抽象語法樹(AST)

以運算與敘述作為節點的樹來表示程式的結構。省略括號或分隔符號等沒有意義的資訊,運算子的優先順序以樹的形狀表示。

日文名稱: 抽象構文木(AST)

「抽象語法樹(AST)」出現在1領域的2道練習題中(編譯器等)。

這個名詞所屬的領域: 編譯器

練習抽象語法樹(AST)的題目

關於抽象語法樹(AST)的特徵,下列何者正確?

  1. A連原始碼的括號與分隔符號都全部保留為節點
  2. B省略與語意無關的符號,並以樹狀結構表示運算子的優先順序
  3. C與CPU的指令一對一對應,可直接執行
查看答案與解析

正確答案:B. 省略與語意無關的符號,並以樹狀結構表示運算子的優先順序

語法分析會依照文法規則產生連括號與分隔符號都包含在內的樹(具體語法樹),但其中含有許多後續處理不需要的資訊。抽象語法樹則是只將程式語意所需的運算與敘述作為節點的樹,例如在(a + b) * c中,加法節點位於乘法節點之下,因此即使沒有括號也能得知運算的順序。與CPU指令對應的,是更後面的階段所產生的程式碼。

運算式 2 + 3 * 4 的抽象語法樹之形狀,下列何者正確?

  1. A根節點是 + 的節點,其右子節點是表示 3 * 4 的 * 節點
  2. B根節點是 * 的節點,其左子節點是表示 2 + 3 的 + 節點
  3. C2、3、4、+、* 這5個節點全部並列為根節點的直接子節點
查看答案與解析

正確答案:A. 根節點是 + 的節點,其右子節點是表示 3 * 4 的 * 節點

乘法的優先順序高於加法,所以此運算式會被解釋為 2 + (3 * 4)。在抽象語法樹中,越先計算的運算會放在越下面,所以根節點是 +,其左子節點是2,右子節點是以3和4為子節點的 * 節點。若由下往上對樹求值,會先計算 3 * 4 = 12,再得到 2 + 12 = 14。根節點成為 * 的是寫成 (2 + 3) * 4 的情況,而把全部並列在根節點之下,則無法表示計算的順序。

解析中的「抽象語法樹(AST)」

出現「抽象語法樹(AST)」的題目(2題)

  1. 關於抽象語法樹(AST)的特徵,下列何者正確?
  2. 運算式 2 + 3 * 4 的抽象語法樹之形狀,下列何者正確?

相關名詞

語法分析 中間表示法(IR) 共同子運算式消除 向量化 行內展開 指令排程 迴圈展開 基本區塊 常數摺疊 強度削減

前往名詞解釋列表