diff --git a/book/.vitepress/config.mts b/book/.vitepress/config.mts index d2c69f1..d031d2e 100644 --- a/book/.vitepress/config.mts +++ b/book/.vitepress/config.mts @@ -38,7 +38,6 @@ export default defineConfig({ text: "音界咒零.一版設計與定義", link: "/零.一版/音界咒零.一版設計與定義", }, - { text: "全形字體選擇", link: "/全形字體選擇" }, { text: "編譯目標:精五門(RISC-V)真言極簡子集", link: "/零.一版/編譯目標:精五門(RISC-V)真言極簡子集", @@ -72,11 +71,16 @@ export default defineConfig({ text: "設計與概述", link: "/零.二版/設計與概述.md", }, + { + text: "再遇分詞", + link: "/零.二版/再遇分詞.md", + }, ], }, { text: "雜項", items: [ + { text: "全形字體選擇", link: "/全形字體選擇" }, { text: "精五組語除錯器介紹", link: "/雜項/精五組語除錯器介紹.md", diff --git "a/book/image/\351\233\266\343\203\273\344\272\214\347\211\210\345\210\206\350\251\236\347\213\200\346\205\213\346\251\237.png" "b/book/image/\351\233\266\343\203\273\344\272\214\347\211\210\345\210\206\350\251\236\347\213\200\346\205\213\346\251\237.png" new file mode 100644 index 0000000..246b278 Binary files /dev/null and "b/book/image/\351\233\266\343\203\273\344\272\214\347\211\210\345\210\206\350\251\236\347\213\200\346\205\213\346\251\237.png" differ diff --git "a/book/\351\233\266\357\274\216\344\272\214\347\211\210/\345\206\215\351\201\207\345\210\206\350\251\236.md" "b/book/\351\233\266\357\274\216\344\272\214\347\211\210/\345\206\215\351\201\207\345\210\206\350\251\236.md" new file mode 100644 index 0000000..f6bbe2a --- /dev/null +++ "b/book/\351\233\266\357\274\216\344\272\214\347\211\210/\345\206\215\351\201\207\345\210\206\350\251\236.md" @@ -0,0 +1,40 @@ +欲再做分詞,需先細數零.二版加入了哪些新詞。 + +運算子方面,有: +- % +- == +- != +- > +- >= +- < +- <= + +特殊符號有: +- 【 +- 】 + +關鍵字則有: +- 術 +- 若 +- 或若 +- 不然 +- 歸 + +若不以功能性區分,以詞固有的性質來區分: +運算子與特殊符號用到的符號都不允許出現在識別子(變數名、術名),可以歸為一類討論。其中,長度為 1 的詞有可能恰為長度為 2 的詞的前綴,此狀況需要特殊判定。其餘 1 字詞判定與+-*/處理方式相同。 + +關鍵字中的 1 字詞處理方式與零.一版的`元`相同,2 字詞與 1 字詞也類似,只是會增加一個狀態。 + +回憶零.一版的分詞狀態機: +![零・一版分詞狀態機](../image/零・一版分詞狀態機.png) + +以此為基礎繪製零.二版的分詞狀態機,貧道略去 1 字特殊符號的狀態,而 1 字關鍵字僅以`元`為代表,並以`不然`為 2 字關鍵字之代表,`>=`與`>`為前綴問題之代表。 + +此外,除變數名之外,術名也允許非特殊符字符任意組合,今統一稱此二者為`識別子`。 + +![零・二版分詞狀態機](../image/零・二版分詞狀態機.png) + +新圖中`x`的含義與零.一版並不相同,其意義改變為「其他出邊字符之外的所有非特殊字符」。 +TODO: 修改零.一版分詞狀態圖,使 x 之意義相同。 + +本次分詞就不再附上代碼,在零.一版的基礎上依狀態機畫葫蘆即可得。 diff --git "a/book/\351\233\266\357\274\216\344\272\214\347\211\210/\350\250\255\350\250\210\350\210\207\346\246\202\350\277\260.md" "b/book/\351\233\266\357\274\216\344\272\214\347\211\210/\350\250\255\350\250\210\350\210\207\346\246\202\350\277\260.md" index d155b72..0509d0d 100644 --- "a/book/\351\233\266\357\274\216\344\272\214\347\211\210/\350\250\255\350\250\210\350\210\207\346\246\202\350\277\260.md" +++ "b/book/\351\233\266\357\274\216\344\272\214\347\211\210/\350\250\255\350\250\210\350\210\207\346\246\202\350\277\260.md" @@ -59,37 +59,37 @@ - `<` - 小於 -以上算子的求值結果皆為整數,若式子成立,值為1,否則值為0。 +以上算子的求值結果皆為整數,若式子成立,值為1,否則值為0。運算優先級彼此相等,但比加減乘除都還要低。 #### 餘數 -`%` 取餘數。 +`%` 取餘數。優先級介於乘除與加減間。 ### 「若」語句 ```音界 -若(甲==乙)〖 +若(甲==乙)【 ... -〗 +】 ``` -在括號內條件不為0時,執行〖 〗內語句,括號內為0時,注意到括號內並不限定是比較算子,可以是任意算式,乃至數字或變數。 +在括號內條件不為0時,執行【 】內語句,括號內為0時,注意到括號內並不限定是比較算子,可以是任意算式,乃至數字或變數。 -貧道不採用塵界常見的花括號,是因為全形的花括號並不容易與圓括號區分,貧道自用的微軟正黑體是如此,恐此問題普遍存在,故採`〖 〗`,此類括號似乎沒有通用的念法,在此給它取個名吧! +貧道不採用塵界常見的花括號,是因為全形的花括號並不容易與圓括號區分,貧道自用的微軟正黑體是如此,恐此問題普遍存在,故採`【 】`,此類括號似乎沒有通用的念法,在此給它取個名吧! 道友請看,此括號一面平,一面弧,若置平面朝下、弧面朝上,便好似能擺放蛋或球體的基座。故吾名之曰**基座括號**或簡稱**基括號**。 與「若」連用的尚有「或若」、「不然」兩關鍵字。 ```音界 -若(甲>10)〖 +若(甲>10)【 ... -〗或若(乙==1)〖 +】或若(乙==1)【 ... -〗或若(乙==0)〖 +】或若(乙==0)【 ... -〗不然〖 +】不然【 ... -〗 +】 # 決策結尾 ``` @@ -98,12 +98,12 @@ ### 術 ``` -術.輾轉相處(甲、乙)〖 - 若(乙==0)〖 +術.輾轉相處(甲、乙)【 + 若(乙==0)【 歸.甲 - 〗 + 】 歸.輾轉相除(乙、甲%乙) -〗 +】 ``` 上例展示一遞迴術——輾轉相除術,以下逐詞解釋: @@ -112,9 +112,9 @@ 2. `.`:音界號,用以區隔關鍵字與術名 3. `輾轉相除`:術名 4. `(甲、乙)`:參數列表,參數之間以頓號`、`為間隔 -5. `〖`:左基括號,術體開始 -6. `若(乙==0)〖 歸.甲 〗`:符合條件時,將甲作為術的求值結果(歸值),結束術。 +5. `【`:左基括號,術體開始 +6. `若(乙==0)【 歸.甲 】`:符合條件時,將甲作為術的求值結果(歸值),結束術。 7. `歸.輾轉相除(乙、甲%乙)`:施展`輾轉相除(乙、甲%乙)`,以其歸值為歸值,結束術。 -5. `〗`:右基括號,術體結束 +5. `】`:右基括號,術體結束 在零.二版中,術的參數與歸值(回傳值)都是整數。若在任意分支中,術沒有歸值,編譯器應報錯。