軟體界經歷幾十年的發展,已經沉澱下數以億計的程式碼,然而這些程式碼盤根錯節,彼此之間互相緊密依賴。舉例來說,寫一個網站,必須跑在瀏覽器上,瀏覽器又跑在作業系統之上,主流作業系統又都是由 C/C++ 編譯器編譯出來,依賴可以追溯很多很多層。(甚至會成環,例如編譯器通常也需要作業系統作為執行環境。)
將現代軟體當做一個世界,從學會寫程式的第一天開始,絕大多數的人就永遠也脫離不了它。本作企圖指引人們如何離開原世界(下稱塵界),再造一個新世界,故名:離塵指引。
而離塵的第一步,是自舉一門自定義的程式語言。
貧道採用 Rust 法咒來撰寫零版編譯器,以下展示其分詞器實作。 類型定義 首先,寫出合適的類型來表達詞的種類: // Rust 慣以駝峰式命名類型 // 漢語...
繼續觀察漢語「嫉妒使我面目全非」,分詞後得到「嫉妒」、「使」、「我」、「面目全非」。接下來,我們試著了解這些詞是如何組成一個句子的,這樣的組成是否合乎語法,試分...
為方便觀看,以下將音界咒零・一版全部語法定義縮排後寫在一起,並加入一條音界咒檔 = 音界咒・檔案結尾,以生成檔案結尾(EOF)而完整描述音界咒檔案。 音界咒檔...
再整理一次音界咒語法。 音界咒檔 = 音界咒・檔案結尾 音界咒 = 句 | 句・音界咒 句 = 變數宣告式...
零・一版語法規則整理如下: 音界咒檔 = 音界咒・檔案結尾 音界咒 = 句 | 句・音界咒 句 = 變數宣告式...
先定義剖析器的輸出——抽象語法樹節點的型別。 抽象語法樹節點型別定義 pub type O語法樹 = O咒; pub struct O咒 { 句: V...
元・甲=1 乙+1 這個範例的語法完全正確,但乙並沒有先宣告再使用,因此仍是非法的程式。 由此可見,一份源碼能被剖析成語法樹,吾人仍需對它進行更多檢查,以確認...
至此,貧道已經展示了零.一版音界咒的分詞、剖析、語義檢查,若程式能通過這些步驟,代表它完全合法。接下來,就可以生成目標碼了,在本指引中,貧道會示範如何生成精五真...
在語法樹中,算式是一棵二元樹,要從樹形轉換為循序、線性的真言並不是一目瞭然的事情。若先將算術二元樹轉換為後序表達式,計算的順序會比較明瞭一些。道友們在煉氣(學習...
以下展示一份精五真言生成的實作。 這是生成器的定義,其接收一個語法樹,把精五真言輸入到真言檔。變數集可以在符號檢查時取得。 pub struct O真言生成器...