抽象語法樹

源代碼語法結構的抽象表示形式

在計算機科學中,抽象語法樹(Abstract Syntax Tree,AST),或簡稱語法樹(Syntax tree),是源代碼語法結構的一種抽象表示。

簡要介紹


在計算機科學中,抽象語法樹(AbstractSyntaxTree,AST),或簡稱語法樹(Syntax tree),是源代碼語法結構的一種抽象表示。它以樹狀的形式表現編程語言的語法結構,樹上的每個節點都表示源代碼中的一種結構。之所以說語法是“抽象”的,是因為這裡的語法並不會表示出真實語法中出現的每個細節。比如,嵌套括弧被隱含在樹的結構中,並沒有以節點的形式呈現;而類似於if-condition-then這樣的條件跳轉語句,可以使用帶有兩個分支的節點來表示。
和抽象語法樹相對的是具體語法樹(通常稱作分析樹)。一般的,在源代碼的翻譯和編譯過程中,語法分析器創建出分析樹。一旦AST被創建出來,在後續的處理過程中,比如語義分析階段,會添加一些信息。

語法分析器


在計算機科學和語言學中,語法分析(英語:syntactic analysis,也叫parsing)是根據某種給定的形式文法對由單詞序列(如英語單詞序列)構成的輸入文本進行分析並確定其語法結構的一種過程。
語法分析器(parser)通常是作為編譯器或解釋器的組件出現的,它的作用是進行語法檢查、並構建由輸入的單片語成的數據結構(一般是語法分析樹、抽象語法樹等層次化的數據結構)。語法分析器通常使用一個獨立的詞法分析器從輸入字元流中分離出一個個的“單詞”,並將單詞流作為其輸入。實際開發中,語法分析器可以手工編寫,也可以使用工具(半)自動生成。

主要分類


語法分析器的任務主要是確定是否可以以及如何從語法的起始符號推導出輸入符號串(輸入文本),主要可以通過兩種方式完成:
• 自頂向下分析:根據形式語法規則,在語法分析樹的自頂向下展開中搜索輸入符號串可能的最左推導。單詞按從左到右的順序依次使用。
• 自底向上分析:語法分析器從現有的輸入符號串開始,嘗試將其根據給定的形式語法規則進行改寫,最終改寫為語法的起始符號。