diff --git a/book/.vitepress/config.mts b/book/.vitepress/config.mts index d031d2e..dbe9a2f 100644 --- a/book/.vitepress/config.mts +++ b/book/.vitepress/config.mts @@ -75,6 +75,10 @@ export default defineConfig({ text: "再遇分詞", link: "/零.二版/再遇分詞.md", }, + { + text: "再遇剖析(一)決定算子優先級", + link: "/零.二版/再遇剖析(一)決定算子優先級.md", + }, ], }, { diff --git "a/book/\351\233\266\357\274\216\344\272\214\347\211\210/\345\206\215\351\201\207\345\211\226\346\236\220.md" "b/book/\351\233\266\357\274\216\344\272\214\347\211\210/\345\206\215\351\201\207\345\211\226\346\236\220\357\274\210\344\270\200\357\274\211\346\261\272\345\256\232\347\256\227\345\255\220\345\204\252\345\205\210\347\264\232.md" similarity index 97% rename from "book/\351\233\266\357\274\216\344\272\214\347\211\210/\345\206\215\351\201\207\345\211\226\346\236\220.md" rename to "book/\351\233\266\357\274\216\344\272\214\347\211\210/\345\206\215\351\201\207\345\211\226\346\236\220\357\274\210\344\270\200\357\274\211\346\261\272\345\256\232\347\256\227\345\255\220\345\204\252\345\205\210\347\264\232.md" index 72f8ad2..6ba7148 100644 --- "a/book/\351\233\266\357\274\216\344\272\214\347\211\210/\345\206\215\351\201\207\345\211\226\346\236\220.md" +++ "b/book/\351\233\266\357\274\216\344\272\214\347\211\210/\345\206\215\351\201\207\345\211\226\346\236\220\357\274\210\344\270\200\357\274\211\346\261\272\345\256\232\347\256\227\345\255\220\345\204\252\345\205\210\347\264\232.md" @@ -45,7 +45,7 @@ 而手寫遞迴下降中充斥大量為了處理優先級而生的函數,也會降低可讀性。那有沒有其他方法能決定優先級呢? -### 決定優先級的算法 +## 決定優先級的算法 道友們可能在煉氣時就學過或自己想到過該如何巧用棧,從左到右掃過一個算式求其值。該算法名為[調車場算法](https://en.wikipedia.org/wiki/Shunting_yard_algorithm),而其遞迴版本(遞迴跟棧關係密切啊!)有另一個名字,叫[優先級爬升算法](https://en.wikipedia.org/wiki/Operator-precedence_parser)。 @@ -106,7 +106,7 @@ x 兩側的 - 優先級相等,但 - 是左結合,優先往左側結合,故 ``` 該算法稍作加強,也能處理括號,基本想法是每當遇到右括號時,就當做算子已經暫時讀取完畢,算子算式由右一直向左結合直到碰到左括號。 -#### 以棧實作:調車場算法 +### 以棧實作:調車場算法 此過程能以棧輕易模擬,具體作法可參照下方源碼: ```rust @@ -176,11 +176,11 @@ impl 調車場 { ``` -#### 遞迴實作:優先級爬升算法 +### 遞迴實作:優先級爬升算法 TODO: -### 混用回溯剖析與優先級決定算法 +## 混用回溯剖析與優先級決定算法 那吾人不妨在剖析器中將算子、算元與括號順序保留,再由此優先級爬升算法來處理優先級。