File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ 這種精簡後,但在語義上沒有損失的語法樹,又被稱為抽象語法樹。在明確的語境中,也可能直接叫語法樹。
You can’t perform that action at this time.
0 commit comments