Let's Build A Simple Interpreter
Let's Build A Simple Interpreter
https://www.zhihu.com/question/265364484/answer/293645562
知乎上面一個(gè)回答推薦的
最開始看得就是這個(gè)档礁,斷斷續(xù)續(xù)看了蠻久狱从。
從這個(gè)系列里面亮瓷,知道了詞法分析和語法分析的實(shí)現(xiàn), EBNF 語法表示以及對(duì)應(yīng)代碼翻譯抡草。
整個(gè)系列都非常簡(jiǎn)單明了,入門非常推薦。
從零開始的 JSON 庫教程
從零開始的 JSON 庫教程
看來 Let's Build A Simple Interpreter 系列之后锅知,心癢難耐,自己試著用 python 解析 json 脓钾。
后面在網(wǎng)上看到這個(gè) json 解析教程售睹,使用 C 語言實(shí)現(xiàn),解析思路跟 Let's Build A Simple Interpreter 一樣——遞歸下降解析可训。
這個(gè)教程最大的收獲就是里面對(duì)于 utf-8 編碼的講解昌妹。
《用 Go 語言自制解釋器》
同事推薦的一本書捶枢,寫得很好。
作者用 Go 語言實(shí)現(xiàn)了 AST 解釋器捺宗,手?jǐn)]了詞法分析柱蟀、語法分析、AST 解釋蚜厉。
書里唯一有點(diǎn)難懂的是——優(yōu)先級(jí)的解析长已,作者用了另外一種方式,而不是通用的遞歸下降解析昼牛。
《用 Go 語言自制編譯器》
同一個(gè)作業(yè)寫的書术瓮,從 AST 編譯成字節(jié)碼,實(shí)現(xiàn)虛擬機(jī)執(zhí)行字節(jié)碼贰健。
兩本書看完胞四,對(duì)腳本語言的通用實(shí)現(xiàn)就有了一個(gè)清晰的認(rèn)知,也可以自己實(shí)現(xiàn)一個(gè)腳本語言伶椿。
crafting interpreters
crafting interpreters
中文版
后面自己想用 C 語言實(shí)現(xiàn)腳本語言辜伟,最大的障礙便是垃圾回收。之前看的資料中都沒有涉及這一塊脊另,雖然各種說明講解文章一大堆导狡,但怎么實(shí)現(xiàn)還是兩眼一抹黑。
主要看了其中 clox 部分偎痛,學(xué)會(huì)了標(biāo)記-清除的垃圾回收實(shí)現(xiàn)旱捧。
到這步之后, C 語言實(shí)現(xiàn)腳本語言已經(jīng)頗具模樣踩麦∶渡模可以繼續(xù)添加自己想要的特性,比如模塊功能谓谦。
其他
在網(wǎng)上找到的各種各樣的相關(guān)資料
Writing a C compiler in 500 lines of Python
Writing a C compiler in 500 lines of Python
作者用 python 將 C 語言的一個(gè)子集編譯到 wasm
北大的編譯課程
北大的編譯課程
北大的編譯課程贫橙,分為兩部分,一是將一門自制語言編譯成自制 IR 茁计,二是將自制 IR 編譯成 RISC-V 指令料皇。
手把手教你構(gòu)建 C 語言編譯器
手把手教你構(gòu)建 C 語言編譯器
標(biāo)題雖說是編譯器,其實(shí)更像是解釋器星压。
同樣的將 C 語言的一個(gè)子集編譯到自制指令集践剂,實(shí)現(xiàn)虛擬機(jī)執(zhí)行,可以自舉娜膘。
chibicc
chibicc——可能是可讀性最強(qiáng)的 C 編譯器
chibicc
https://www.sigbus.info/compilerbook 作者寫的日語書籍逊脯,但是沒有完成
因?yàn)闀疀]有完成,后面的內(nèi)容需要自己看 git 的提交學(xué)習(xí)竣贪,有點(diǎn)難度军洼。
chibicc 是一個(gè)完成度非常高的 C 編譯器巩螃,通過這個(gè),你可以看到 C 語言是如何編譯成匯編語言匕争。