軟體界經歷幾十年的發展,已經沉澱下數以億計的程式碼,然而這些程式碼盤根錯節,彼此之間互相緊密依賴。舉例來說,寫一個網站,必須跑在瀏覽器上,瀏覽器又跑在作業系統之上,主流作業系統又都是由 C/C++ 編譯器編譯出來,依賴可以追溯很多很多層。(甚至會成環,例如編譯器通常也需要作業系統作為執行環境。)
將現代軟體當做一個世界,從學會寫程式的第一天開始,絕大多數的人就永遠也脫離不了它。本作企圖指引人們如何離開原世界(下稱塵界),再造一個新世界,故名:離塵指引。
而離塵的第一步,是自舉一門自定義的程式語言。
上圖展示了當前零.一版音界咒編譯器的各個部件。(除了目的平臺優化,在圖片中淡化) 本章節將介紹零.一版編譯器的最後一步:優化。完成後,全部件如下圖: 語法樹...
編譯器開發到了後端,可以開始生成目的碼(精五組語)之後,就得常常去除精五組語的錯。組語雖然已經十分接近真言的機器碼,但仍然要經過組譯、鏈結兩階段才會變成執行檔,...
零.一版是沒法自舉的,它甚至難以稱之為「咒」。「咒」必須圖靈完備,圖靈完備之後,才有條件自舉。 在零.二版,貧道將嘗試定義一極度簡單但圖靈完備的法咒。 圖靈完備...
零.一版音界咒已有循序與修改記憶體的能力,再加上決策語句便能完備。 音界咒零.二版選擇的是遞迴,想必道友們並不會太意外,畢竟那句古老的偈語早就深植人心: 遞迴...
欲再做分詞,需先細數零.二版加入了哪些新詞。 運算子方面,有: % == != > >= < <= 特殊符號有: 【 】 、 關鍵字則有: 術 若 或...
把狀態機完整畫完,再在零.一版的分詞器源碼的基礎上依狀態機畫葫蘆即可寫出分詞器。 先將關鍵字當識別子 但若真的把整套狀態機畫出來,會發現頗為繁雜,關鍵字會製造出...
零・二版新增了「若」、「術」兩語句,並增加了比較、餘數運算子。 運算子優先級語法定義 零・一版的算式語法如下: 算式 = 乘除式・(+・乘除式)*...
回憶零.一版實作遞迴下降時,吾人曾歸納,遞迴下降函數中主要是兩種短路結構,一是「或」結構,一是「且」結構。 「或」結構對應語法的 | ,「且」結構對應語法的 ....
零.一版僅做了十分簡單的語義分析,即檢查符號使用之前是否有宣告。 零.二版的情況沒這麼簡單了。 巢狀作用域 首先,「若」語句以及「術」宣告語句中的基括號【】將法...
執行檔所定義的事情,不外乎數據如何存放與程式如何執行。 在零.一版中,所有的變數都是全域變數,程式執行也是一行一行往下。 但零.二版引入了術之後,一切都變了,術...