iT邦幫忙

鐵人檔案

2024 iThome 鐵人賽
回列表
Software Development

離塵指引.卷之一.試結丹:程式語言自舉 系列

軟體界經歷幾十年的發展,已經沉澱下數以億計的程式碼,然而這些程式碼盤根錯節,彼此之間互相緊密依賴。舉例來說,寫一個網站,必須跑在瀏覽器上,瀏覽器又跑在作業系統之上,主流作業系統又都是由 C/C++ 編譯器編譯出來,依賴可以追溯很多很多層。(甚至會成環,例如編譯器通常也需要作業系統作為執行環境。)

將現代軟體當做一個世界,從學會寫程式的第一天開始,絕大多數的人就永遠也脫離不了它。本作企圖指引人們如何離開原世界(下稱塵界),再造一個新世界,故名:離塵指引。

而離塵的第一步,是自舉一門自定義的程式語言。


鐵人鍊成 | 共 36 篇文章 | 4 人訂閱 訂閱系列文 RSS系列文 團隊天堂製造
DAY 11

零.一版分詞器(三)實作

貧道採用 Rust 法咒來撰寫零版編譯器,以下展示其分詞器實作。 類型定義 首先,寫出合適的類型來表達詞的種類: // Rust 慣以駝峰式命名類型 // 漢語...

2024-09-25 ‧ 由 mros 分享
DAY 12

零.一版剖析器(一)語法定義

繼續觀察漢語「嫉妒使我面目全非」,分詞後得到「嫉妒」、「使」、「我」、「面目全非」。接下來,我們試著了解這些詞是如何組成一個句子的,這樣的組成是否合乎語法,試分...

2024-09-26 ‧ 由 mros 分享
DAY 13

零.一版剖析器(二)歧義消除

為方便觀看,以下將音界咒零・一版全部語法定義縮排後寫在一起,並加入一條音界咒檔 = 音界咒・檔案結尾,以生成檔案結尾(EOF)而完整描述音界咒檔案。 音界咒檔...

2024-09-27 ‧ 由 mros 分享
DAY 14

零.一版剖析器(三)回溯剖析與左遞迴問題

再整理一次音界咒語法。 音界咒檔 = 音界咒・檔案結尾 音界咒 = 句 | 句・音界咒 句 = 變數宣告式...

2024-09-28 ‧ 由 mros 分享
DAY 15

零.一版剖析器(四)抽象語法樹

零・一版語法規則整理如下: 音界咒檔 = 音界咒・檔案結尾 音界咒 = 句 | 句・音界咒 句 = 變數宣告式...

2024-09-29 ‧ 由 mros 分享
DAY 16

零.一版剖析器(五)實作遞迴下降剖析器

先定義剖析器的輸出——抽象語法樹節點的型別。 抽象語法樹節點型別定義 pub type O語法樹 = O咒; pub struct O咒 { 句: V...

2024-09-30 ‧ 由 mros 分享
DAY 17

零.一版語義分析之符號檢查

元・甲=1 乙+1 這個範例的語法完全正確,但乙並沒有先宣告再使用,因此仍是非法的程式。 由此可見,一份源碼能被剖析成語法樹,吾人仍需對它進行更多檢查,以確認...

2024-10-01 ‧ 由 mros 分享
DAY 18

零.一版精五真言生成(一)變數儲存

至此,貧道已經展示了零.一版音界咒的分詞、剖析、語義檢查,若程式能通過這些步驟,代表它完全合法。接下來,就可以生成目標碼了,在本指引中,貧道會示範如何生成精五真...

2024-10-02 ‧ 由 mros 分享
DAY 19

零.一版精五真言生成(二)堆疊機

在語法樹中,算式是一棵二元樹,要從樹形轉換為循序、線性的真言並不是一目瞭然的事情。若先將算術二元樹轉換為後序表達式,計算的順序會比較明瞭一些。道友們在煉氣(學習...

2024-10-03 ‧ 由 mros 分享
DAY 20

零.一版精五真言生成(三)實作

以下展示一份精五真言生成的實作。 這是生成器的定義,其接收一個語法樹,把精五真言輸入到真言檔。變數集可以在符號檢查時取得。 pub struct O真言生成器...

2024-10-04 ‧ 由 mros 分享