iT邦幫忙

鐵人檔案

2024 iThome 鐵人賽
回列表
Software Development

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

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

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

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


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

零.一版優化之常數折疊

上圖展示了當前零.一版音界咒編譯器的各個部件。(除了目的平臺優化,在圖片中淡化) 本章節將介紹零.一版編譯器的最後一步:優化。完成後,全部件如下圖: 語法樹...

2024-10-05 ‧ 由 mros 分享
DAY 22

雜項:精五(RISC-V)組語除錯器介紹

編譯器開發到了後端,可以開始生成目的碼(精五組語)之後,就得常常去除精五組語的錯。組語雖然已經十分接近真言的機器碼,但仍然要經過組譯、鏈結兩階段才會變成執行檔,...

2024-10-06 ‧ 由 mros 分享
DAY 23

音界咒零.二版設計(上)圖靈完備

零.一版是沒法自舉的,它甚至難以稱之為「咒」。「咒」必須圖靈完備,圖靈完備之後,才有條件自舉。 在零.二版,貧道將嘗試定義一極度簡單但圖靈完備的法咒。 圖靈完備...

2024-10-07 ‧ 由 mros 分享
DAY 24

音界咒零.二版設計(下)引入「術」、「若」語句

零.一版音界咒已有循序與修改記憶體的能力,再加上決策語句便能完備。 音界咒零.二版選擇的是遞迴,想必道友們並不會太意外,畢竟那句古老的偈語早就深植人心: 遞迴...

2024-10-08 ‧ 由 mros 分享
DAY 25

音界咒零.二版再遇分詞(一)狀態機

欲再做分詞,需先細數零.二版加入了哪些新詞。 運算子方面,有: % == != > >= < <= 特殊符號有: 【 】 、 關鍵字則有: 術 若 或...

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

音界咒零.二版再遇分詞(二)視關鍵字為特殊識別子

把狀態機完整畫完,再在零.一版的分詞器源碼的基礎上依狀態機畫葫蘆即可寫出分詞器。 先將關鍵字當識別子 但若真的把整套狀態機畫出來,會發現頗為繁雜,關鍵字會製造出...

2024-10-10 ‧ 由 mros 分享
DAY 27

音界咒零.二版再遇剖析(一)調車場算法

零・二版新增了「若」、「術」兩語句,並增加了比較、餘數運算子。 運算子優先級語法定義 零・一版的算式語法如下: 算式 = 乘除式・(+・乘除式)*...

2024-10-11 ‧ 由 mros 分享
DAY 28

音界咒零.二版再遇剖析(二)組合子剖析器 (parser combinator)

回憶零.一版實作遞迴下降時,吾人曾歸納,遞迴下降函數中主要是兩種短路結構,一是「或」結構,一是「且」結構。 「或」結構對應語法的 | ,「且」結構對應語法的 ....

2024-10-12 ‧ 由 mros 分享
DAY 29

音界咒零.二版語義分析之類型檢查

零.一版僅做了十分簡單的語義分析,即檢查符號使用之前是否有宣告。 零.二版的情況沒這麼簡單了。 巢狀作用域 首先,「若」語句以及「術」宣告語句中的基括號【】將法...

2024-10-13 ‧ 由 mros 分享
DAY 30

音界咒零.二版真言生成(一)術與棧

執行檔所定義的事情,不外乎數據如何存放與程式如何執行。 在零.一版中,所有的變數都是全域變數,程式執行也是一行一行往下。 但零.二版引入了術之後,一切都變了,術...

2024-10-14 ‧ 由 mros 分享