GitHub 上有沒有什麼簡單精緻的編譯器源碼適合初學者研讀??

不需要太複雜的優化,但演算法和編碼上比較出色,邏輯清晰 , 適合初學者細細研究的編譯器 源碼, 求推薦?


LLVM文檔,Kaleidoscope語言。

這個語言比較簡單。可以順便熟悉一下LLVM。

lcc,ANSI C編譯器,沒有要太複雜的優化,但算是工業級的。

可參考書籍《可變目標C編譯器》,網上也有相關的源碼分析文章。

Lua解釋器。學習基本的虛擬機、GC、閉包、協程等實現

雲風《Lua源碼欣賞》http://www.codingnow.com/temp/readinglua.pdf 。其他類似博客有很多..

最近我也在寫Lua + LuaJIT源碼實現的筆記。二月份大概能貼出來吧。。

《自製編程語言》,兩個類似JS和Java的語言

實現策略都是最簡單的。主要問題是這本書寫得不怎麼樣(代碼風格也略鬼畜。。)。不是很推薦

題外話:

無事莫跳語言坑 。希望能在動手前,或者在動手的過程中,把一些基本概念搞清楚。


c4 - C in four functions (525 lines): rswier/c4 · GitHub


從另一個角度談一談。我還真不認為所謂代碼量小的就是好讀的 code。代碼量小,還要看文檔是否全面。比如說 Lua 的 compiler,雖然並不簡單,但是有作者的一本書,有詳細的 Reference 文檔,有作者的三四篇論文,有網上十幾篇討論的 blog,有 PDF 的 5.1 指令集詳述。所以我讀下來了。

相比之下,8000 多行的 Luna,如果我沒讀過 Lua,如果 Luna 這個語言沒告訴我它是 Lua-like 語言,就從 Github 上下一份它的 code 給我,我不一定能讀懂。

所以你真的要找比 Lua 還好懂的,只有教科書,還得是寫的比較好的,上面的例子。Github 是個錯誤的地方。


可參考 github 上的 XOC 編譯器,分層編譯,同時支持 register ssa 和 常規 du chain,非常適合學習研究。 如果想研究 c front end 的話 也可以搜一下 xocfe.


GitHub - larva-lang/larva-lang: The larva programming Language

簡單的純手工製作,附帶blog


編譯原理課程設計 :) 沒學過的可以看 http://lotabout.me/2015/write-a-C-interpreter-0/


yinwang0/yin · GitHub

完成度低,代碼短且精美

還是Java寫的

太適合初學者了

edit:最後的公開代碼應該在 https://github.com/0x55aa/yin


https://github.com/lsegal/my_toy_compiler

收藏了很久


建議看llvm官方例子…另:動手寫一個比什麼都強


試試我吧

https://github.com/xhd2015/x2cc

用c++書寫的編譯器,包含

1.詞法分析器

2.通用有限自動狀態機DFA(預計再加一個NFA來識別正則這表達式)

3.LL文法工具(左遞歸消除,左因子消除,FIRST集,FOLLOW集)

4.LR文法工具(LR0, LR1)

5.中間代碼生成

6.一個x86的目標代碼生成器

參照龍書一步一步寫出來的,真心推薦龍書。

這是這學期我們編譯原理的實驗,10周寫完的,LR分析器寫出來的時候我自己都哭了:((開個玩笑)

+龍書,源代碼絕對好讀


tinyscheme


Luna


javac 入門用


《自製編程語言》有一份實現diksam的編譯器源碼


首先,短小的不一定易讀,比如c4,tcc。

說下兩個我讀過覺得還比較易讀的,Luna和8cc,都在github上託管著,有興趣可以看看。


C編譯器剖析 - 鄒昌偉 (豆瓣) UCC編譯器


推薦閱讀:

為什麼大部分傑出的程序員都在內心傾向於研究操作系統和編譯器?
GNU GCC使用ld鏈接器進行鏈接的完整過程是怎樣的?
VC++ __FUNCTION__的實現原理是什麼?能通過這個拿到整個的函數列表嗎?
做編譯器的人如果遇到了bug,他們怎麼判斷是編譯器自己的問題還是編譯這個編譯器的編譯器的問題?
學習編譯原理只是研究lex和yacc嗎?

TAG:演算法 | 編譯原理 | 編譯器 |