Skip to content

Commit

Permalink
再遇分詞
Browse files Browse the repository at this point in the history
  • Loading branch information
MROS committed Oct 9, 2024
1 parent 3d9579c commit f3b55bf
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 19 deletions.
6 changes: 5 additions & 1 deletion book/.vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ export default defineConfig({
text: "音界咒零.一版設計與定義",
link: "/零.一版/音界咒零.一版設計與定義",
},
{ text: "全形字體選擇", link: "/全形字體選擇" },
{
text: "編譯目標:精五門(RISC-V)真言極簡子集",
link: "/零.一版/編譯目標:精五門(RISC-V)真言極簡子集",
Expand Down Expand Up @@ -72,11 +71,16 @@ export default defineConfig({
text: "設計與概述",
link: "/零.二版/設計與概述.md",
},
{
text: "再遇分詞",
link: "/零.二版/再遇分詞.md",
},
],
},
{
text: "雜項",
items: [
{ text: "全形字體選擇", link: "/全形字體選擇" },
{
text: "精五組語除錯器介紹",
link: "/雜項/精五組語除錯器介紹.md",
Expand Down
Binary file added book/image/零・二版分詞狀態機.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions book/零.二版/再遇分詞.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
欲再做分詞,需先細數零.二版加入了哪些新詞。

運算子方面,有:
-
- ==
- !=
-
- >=
-
- <=

特殊符號有:
-
-

關鍵字則有:
-
-
- 或若
- 不然
-

若不以功能性區分,以詞固有的性質來區分:
運算子與特殊符號用到的符號都不允許出現在識別子(變數名、術名),可以歸為一類討論。其中,長度為 1 的詞有可能恰為長度為 2 的詞的前綴,此狀況需要特殊判定。其餘 1 字詞判定與+-*/處理方式相同。

關鍵字中的 1 字詞處理方式與零.一版的``相同,2 字詞與 1 字詞也類似,只是會增加一個狀態。

回憶零.一版的分詞狀態機:
![零・一版分詞狀態機](../image/零・一版分詞狀態機.png)

以此為基礎繪製零.二版的分詞狀態機,貧道略去 1 字特殊符號的狀態,而 1 字關鍵字僅以``為代表,並以`不然`為 2 字關鍵字之代表,`>=```為前綴問題之代表。

此外,除變數名之外,術名也允許非特殊符字符任意組合,今統一稱此二者為`識別子`

![零・二版分詞狀態機](../image/零・二版分詞狀態機.png)

新圖中`x`的含義與零.一版並不相同,其意義改變為「其他出邊字符之外的所有非特殊字符」。
TODO: 修改零.一版分詞狀態圖,使 x 之意義相同。

本次分詞就不再附上代碼,在零.一版的基礎上依狀態機畫葫蘆即可得。
36 changes: 18 additions & 18 deletions book/零.二版/設計與概述.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,37 +59,37 @@
- ``
- 小於

以上算子的求值結果皆為整數,若式子成立,值為1,否則值為0。
以上算子的求值結果皆為整數,若式子成立,值為1,否則值為0。運算優先級彼此相等,但比加減乘除都還要低。

#### 餘數

`` 取餘數。
`` 取餘數。優先級介於乘除與加減間。

### 「若」語句

```音界
若(甲==乙)
若(甲==乙)
...
```
在括號內條件不為0時,執行〖 〗內語句,括號內為0時,注意到括號內並不限定是比較算子,可以是任意算式,乃至數字或變數。
在括號內條件不為0時,執行【 】內語句,括號內為0時,注意到括號內並不限定是比較算子,可以是任意算式,乃至數字或變數。

貧道不採用塵界常見的花括號,是因為全形的花括號並不容易與圓括號區分,貧道自用的微軟正黑體是如此,恐此問題普遍存在,故採`〖 〗`,此類括號似乎沒有通用的念法,在此給它取個名吧!
貧道不採用塵界常見的花括號,是因為全形的花括號並不容易與圓括號區分,貧道自用的微軟正黑體是如此,恐此問題普遍存在,故採`【 】`,此類括號似乎沒有通用的念法,在此給它取個名吧!

道友請看,此括號一面平,一面弧,若置平面朝下、弧面朝上,便好似能擺放蛋或球體的基座。故吾名之曰**基座括號**或簡稱**基括號**

與「若」連用的尚有「或若」、「不然」兩關鍵字。

```音界
若(甲>10)
若(甲>10)
...
或若(乙==1)
或若(乙==1)
...
或若(乙==0)
或若(乙==0)
...
〗不然〖
】不然【
...
# 決策結尾
```

Expand All @@ -98,12 +98,12 @@
###

```
術.輾轉相處(甲、乙)
若(乙==0)
術.輾轉相處(甲、乙)
若(乙==0)
歸.甲
歸.輾轉相除(乙、甲%乙)
```

上例展示一遞迴術——輾轉相除術,以下逐詞解釋:
Expand All @@ -112,9 +112,9 @@
2. ``:音界號,用以區隔關鍵字與術名
3. `輾轉相除`:術名
4. `(甲、乙)`:參數列表,參數之間以頓號``為間隔
5. ``:左基括號,術體開始
6. `若(乙==0) 歸.甲 `:符合條件時,將甲作為術的求值結果(歸值),結束術。
5. ``:左基括號,術體開始
6. `若(乙==0) 歸.甲 `:符合條件時,將甲作為術的求值結果(歸值),結束術。
7. `歸.輾轉相除(乙、甲%乙)`:施展`輾轉相除(乙、甲%乙)`,以其歸值為歸值,結束術。
5. ``:右基括號,術體結束
5. ``:右基括號,術體結束

在零.二版中,術的參數與歸值(回傳值)都是整數。若在任意分支中,術沒有歸值,編譯器應報錯。

0 comments on commit f3b55bf

Please sign in to comment.