File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -38,7 +38,6 @@ export default defineConfig({
3838 text : "音界咒零.一版設計與定義" ,
3939 link : "/零.一版/音界咒零.一版設計與定義" ,
4040 } ,
41- { text : "全形字體選擇" , link : "/全形字體選擇" } ,
4241 {
4342 text : "編譯目標:精五門(RISC-V)真言極簡子集" ,
4443 link : "/零.一版/編譯目標:精五門(RISC-V)真言極簡子集" ,
@@ -72,11 +71,16 @@ export default defineConfig({
7271 text : "設計與概述" ,
7372 link : "/零.二版/設計與概述.md" ,
7473 } ,
74+ {
75+ text : "再遇分詞" ,
76+ link : "/零.二版/再遇分詞.md" ,
77+ } ,
7578 ] ,
7679 } ,
7780 {
7881 text : "雜項" ,
7982 items : [
83+ { text : "全形字體選擇" , link : "/全形字體選擇" } ,
8084 {
8185 text : "精五組語除錯器介紹" ,
8286 link : "/雜項/精五組語除錯器介紹.md" ,
Original file line number Diff line number Diff line change 1+ 欲再做分詞,需先細數零.二版加入了哪些新詞。
2+
3+ 運算子方面,有:
4+ - %
5+ - ==
6+ - !=
7+ - >
8+ - >=
9+ - <
10+ - <=
11+
12+ 特殊符號有:
13+ - 【
14+ - 】
15+
16+ 關鍵字則有:
17+ - 術
18+ - 若
19+ - 或若
20+ - 不然
21+ - 歸
22+
23+ 若不以功能性區分,以詞固有的性質來區分:
24+ 運算子與特殊符號用到的符號都不允許出現在識別子(變數名、術名),可以歸為一類討論。其中,長度為 1 的詞有可能恰為長度為 2 的詞的前綴,此狀況需要特殊判定。其餘 1 字詞判定與+-*/處理方式相同。
25+
26+ 關鍵字中的 1 字詞處理方式與零.一版的` 元 ` 相同,2 字詞與 1 字詞也類似,只是會增加一個狀態。
27+
28+ 回憶零.一版的分詞狀態機:
29+ ![ 零・一版分詞狀態機] ( ../image/零・一版分詞狀態機.png )
30+
31+ 以此為基礎繪製零.二版的分詞狀態機,貧道略去 1 字特殊符號的狀態,而 1 字關鍵字僅以` 元 ` 為代表,並以` 不然 ` 為 2 字關鍵字之代表,` >= ` 與` > ` 為前綴問題之代表。
32+
33+ 此外,除變數名之外,術名也允許非特殊符字符任意組合,今統一稱此二者為` 識別子 ` 。
34+
35+ ![ 零・二版分詞狀態機] ( ../image/零・二版分詞狀態機.png )
36+
37+ 新圖中` x ` 的含義與零.一版並不相同,其意義改變為「其他出邊字符之外的所有非特殊字符」。
38+ TODO: 修改零.一版分詞狀態圖,使 x 之意義相同。
39+
40+ 本次分詞就不再附上代碼,在零.一版的基礎上依狀態機畫葫蘆即可得。
Original file line number Diff line number Diff line change 5959- ` < `
6060 - 小於
6161
62- 以上算子的求值結果皆為整數,若式子成立,值為1,否則值為0。
62+ 以上算子的求值結果皆為整數,若式子成立,值為1,否則值為0。運算優先級彼此相等,但比加減乘除都還要低。
6363
6464#### 餘數
6565
66- ` % ` 取餘數。
66+ ` % ` 取餘數。優先級介於乘除與加減間。
6767
6868### 「若」語句
6969
7070``` 音界
71- 若(甲==乙)〖
71+ 若(甲==乙)【
7272 ...
73- 〗
73+ 】
7474```
75- 在括號內條件不為0時,執行〖 〗 內語句,括號內為0時,注意到括號內並不限定是比較算子,可以是任意算式,乃至數字或變數。
75+ 在括號內條件不為0時,執行【 】 內語句,括號內為0時,注意到括號內並不限定是比較算子,可以是任意算式,乃至數字或變數。
7676
77- 貧道不採用塵界常見的花括號,是因為全形的花括號並不容易與圓括號區分,貧道自用的微軟正黑體是如此,恐此問題普遍存在,故採` 〖 〗 ` ,此類括號似乎沒有通用的念法,在此給它取個名吧!
77+ 貧道不採用塵界常見的花括號,是因為全形的花括號並不容易與圓括號區分,貧道自用的微軟正黑體是如此,恐此問題普遍存在,故採` 【 】 ` ,此類括號似乎沒有通用的念法,在此給它取個名吧!
7878
7979道友請看,此括號一面平,一面弧,若置平面朝下、弧面朝上,便好似能擺放蛋或球體的基座。故吾名之曰** 基座括號** 或簡稱** 基括號** 。
8080
8181與「若」連用的尚有「或若」、「不然」兩關鍵字。
8282
8383``` 音界
84- 若(甲>10)〖
84+ 若(甲>10)【
8585 ...
86- 〗 或若(乙==1)〖
86+ 】 或若(乙==1)【
8787 ...
88- 〗 或若(乙==0)〖
88+ 】 或若(乙==0)【
8989 ...
90- 〗不然〖
90+ 】不然【
9191 ...
92- 〗
92+ 】
9393# 決策結尾
9494```
9595
9898### 術
9999
100100```
101- 術.輾轉相處(甲、乙)〖
102- 若(乙==0)〖
101+ 術.輾轉相處(甲、乙)【
102+ 若(乙==0)【
103103 歸.甲
104- 〗
104+ 】
105105 歸.輾轉相除(乙、甲%乙)
106- 〗
106+ 】
107107```
108108
109109上例展示一遞迴術——輾轉相除術,以下逐詞解釋:
1121122 . ` . ` :音界號,用以區隔關鍵字與術名
1131133 . ` 輾轉相除 ` :術名
1141144 . ` (甲、乙) ` :參數列表,參數之間以頓號` 、 ` 為間隔
115- 5 . ` 〖 ` :左基括號,術體開始
116- 6 . ` 若(乙==0)〖 歸.甲 〗 ` :符合條件時,將甲作為術的求值結果(歸值),結束術。
115+ 5 . ` 【 ` :左基括號,術體開始
116+ 6 . ` 若(乙==0)【 歸.甲 】 ` :符合條件時,將甲作為術的求值結果(歸值),結束術。
1171177 . ` 歸.輾轉相除(乙、甲%乙) ` :施展` 輾轉相除(乙、甲%乙) ` ,以其歸值為歸值,結束術。
118- 5 . ` 〗 ` :右基括號,術體結束
118+ 5 . ` 】 ` :右基括號,術體結束
119119
120120在零.二版中,術的參數與歸值(回傳值)都是整數。若在任意分支中,術沒有歸值,編譯器應報錯。
You can’t perform that action at this time.
0 commit comments