• 抽象語法樹

    編輯
    本詞條由“匿名用戶” 建檔。

    抽象語法樹

    編輯

    計算機科學中,抽象語法樹(AST),或只是語法,是用一種形式語言編寫的文本(通常是源代碼)的抽象語法結構的樹狀表示。樹上的每個節點都表示文本中出現的一個結構。語法是抽象的,因為它并不代表真實語法中出現的每一個細節,而只是代表結構或內容相關的細節。例如,分組括號在樹狀結構中是隱含的,所以這些括號不需要作為單獨的節點來表示。同樣地,像if-condition-then語句這樣的語法結構可以用一個有三個分支的節點來表示。這就把抽象的語法樹與具體的語法樹(傳統上稱為解析樹)區分開來。在源代碼翻譯和編譯過程中,解析樹通常由解析器構建。一旦建成,通過后續處理,例如上下文分析,額外的信息被添加到AST中。抽象語法樹也被用于程序分析和程序轉換系統中。

    在編譯器中的應用

    編輯

    抽象語法樹是編譯器中廣泛使用的數據結構,用來表示程序代碼的結構。語法樹通常是一個編譯器的語法分析階段的結果。它經常作為程序的中間表示,通過編譯器需要的幾個階段,對編譯器的最終輸出有很大影響。

    抽象語法樹的動機

    編輯

    一個AST有幾個特性,可以幫助編譯過程的后續步驟。一個AST可以被編輯和增強,它包含的每個元素都有屬性和注釋等信息。與源代碼相比,AST不包括不必要的標點和定界符(大括號、分號、小括號等)。由于編譯器的連續分析階段,AST通常包含關于程序的額外信息。例如,它可以存儲每個元素在源代碼中的位置,允許編譯器打印有用的錯誤信息。由于編程語言及其文檔的固有性質,需要AST。語言在本質上往往是含糊不清的。為了避免這種模糊性編程語言通常被指定為無語境語法(CFG)。然而,編程語言的某些方面往往是CFG所不能表達的,但卻是語言的一部分,并被記錄在其規范中。這些細節需要一個上下文來確定其有效性和行為。

    抽象語法樹

    例如,如果一種語言允許聲明新的類型,CFG不能預測這種類型的名稱,也不能預測它們的使用方式。即使一種語言有一套預定義的類型,強制執行正確的使用通常也需要一些上下文。另一個例子是鴨子類型,其中一個元素的類型可以根據上下文而改變。運算符重載是另一種情況,正確的用法和最終的功能都取決于上下文。

    抽象語法樹的設計

    編輯

    一個AST的設計通常與編譯器的設計和它的預期功能密切相關。核心要求包括以下幾點。變量類型必須被保留,以及每個聲明在源代碼中的位置。可執行語句的順序必須被明確表示和很好地定義。二進制操作的左和右組件必須被存儲和正確識別。對于賦值語句必須存儲標識符和它們的賦值。這些要求可以用來設計AST的數據結構。有些操作總是需要兩個元素,例如加法的兩個項。然而,有些語言結構需要任意多的子元素,例如從命令外殼傳遞給程序的參數列表。因此,用于表示用這種語言編寫的代碼的AST也必須足夠靈活,以允許快速增加未知數量的子元素。為了支持編譯器的驗證,應該可以將AST解讀為源代碼的形式。在重新編譯時,產生的源代碼應該與原始代碼在外觀上有足夠的相似性,并且在執行上也是相同的。AST在語義分析中被大量使用,編譯器檢查程序和語言元素的正確用法。在語義分析期間,編譯器還根據AST生成符號表。對樹的完整遍歷可以驗證程序的正確性。在驗證了正確性之后,AST作為代碼生成的基礎。AST經常被用來生成一個中間表示法(IR),有時被稱為中間語言,用于代碼生成。

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/163750/

    (0)
    詞條目錄
    1. 抽象語法樹
    2. 在編譯器中的應用
    3. 抽象語法樹的動機
    4. 抽象語法樹的設計

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久