Skip to content

Commit 4a33d9e

Browse files
committed
介紹抽象語法樹
1 parent 5f44bd5 commit 4a33d9e

3 files changed

Lines changed: 45 additions & 0 deletions

File tree

64.6 KB
Loading
16.7 KB
Loading

book/零.一版/剖析(語法分析).md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,3 +216,48 @@
216216
```
217217

218218
算式被改寫了真多次,由此可見寫出易於剖析的語法不是一件易事。所幸,這是零・一版最後一次重寫語法了。
219+
220+
零・一版語法規則整理如下:
221+
```
222+
音界咒檔 = 音界咒・檔案結尾
223+
224+
音界咒 = 句
225+
| 句・音界咒
226+
227+
句 = 變數宣告式
228+
| 算式
229+
230+
變數宣告式 = "元"・"・"・變數・"="・算式
231+
232+
算式 = 乘除式・重複乘除式
233+
234+
重複乘除式 = +・重複乘除式
235+
| −・重複乘除式
236+
| e
237+
238+
乘除式 = 原子式・重複原子式
239+
240+
重複原子式 = *・重複乘除式
241+
| /・重複乘除式
242+
| e
243+
244+
原子式 = 數字
245+
| 變數
246+
| "("・算式・")"
247+
```
248+
249+
## 抽象語法樹
250+
251+
依照回溯剖析算法(或是其他剖析算法),吾人能得到一棵紀錄了所有生成符展開點的語法樹。然而,語法樹中的許多細節並無實際意義。
252+
253+
`變數宣告式`為例,`元・甲=(1)`,若嚴格按照展開規則,會得到如下繁複的語法樹:
254+
255+
![變數宣告式具體語法樹](../image/變數宣告式具體語法樹.png)
256+
257+
這種嚴格按照語法規則展開的語法樹,吾人稱其為「具體語法樹」,然而,具體語法樹中,某些節點含有的資訊對接下來的編譯器後端毫無用處,例如``````這些協助詞法分隔的符號,在任何`變數宣告式`裡都有,所以沒有紀錄的意義。另外,以如此深的樹來紀錄`(1)`這個`算式`也是極度冗餘的。
258+
259+
真正有意義的內容只有:
260+
261+
![變數宣告式抽象語法樹](../image/變數宣告式抽象語法樹.png)
262+
263+
這種精簡後,但在語義上沒有損失的語法樹,又被稱為抽象語法樹。在明確的語境中,也可能直接叫語法樹。

0 commit comments

Comments
 (0)