如果你是一個從來沒有上過一節電腦課,半道出家的程式猿.像我一樣,一定被各種電腦名稱詞唬過,什麼演算法啦,編譯原理啦.被唬過後的你去買過演算法導論,虎書回去啃,結果啃的很辛苦,更苦逼的是中國人寫的書,特別是大學的教材,看不懂那真不是你智商問題.
作為一個普通的應用程式開發人員,我相信大部分人都沒有真正認真啃完過那些厚書,我始終覺得大學時候你不把妹,你在那啃演算法,這種人是不是有病.畢業時候二十來歲,不去玩樂,天天在寫字樓裡盯著螢幕,只能是DIAO絲(我承認我是這種廝).哪怕像我這樣馬馬虎虎啃過一些的,瞭解這些除瞭解惑,還真沒用上過.平時做項目的時候,一個星期還在那哼唧哼唧編代碼,什麼介面效果也看不到,老大就彪了:"什麼?!,搞到現在啥也看不到?!" 兩星期功能沒增加,介面沒啥變化. "什麼?這段時間你們在幹啥?"
別人說啥你也不會相信,你天天在寫js的時候用不上編譯原理,非要花時間去折騰弄懂,那就推薦幾篇文章,瞭解一下所謂的編譯原理.讓你節約一點時間去陪陪家人,鍛煉一下身體,以免技術還不突出的時候,頸椎已經突出了.
Create a Language Compiler for the .NET Framework
http://msdn.microsoft.com/en-us/magazine/cc136756.aspx
如果你是.NET的程式猿,這篇文章就是為你準備的,這篇文章用C#實現了一個簡單的語言然後最終產生IL代碼.列印下來一共十幾頁,就這麼點東西.所謂的詞法分析(Lexer),文法分析器(Parser)產生AST(Abstract Syntax Tree)抽象文法樹,到編譯器後端都有了.你還需要知道什麼.
Let's Build a Compiler
http://compilers.iecc.com/crenshaw/
這是一個物理學Phd 寫的,寫這些文章的時候,我出生沒多久.搞物理的懂吧,完全的和我一樣門外漢,所以一定很容易懂.代碼是Pascal的.看了第一篇我都沒多大興趣看完這個了.
我這輩子很顯然沒機會,有機會也不會去寫個毛編譯器,哪怕是IronPython那種轉換,生命是如此的短暫,卻去Hacker這些玩意,那麼還是可能會有需要寫個轉換器,那麼看一點Antlr吧. 只要瞭解一點NBNF寫個grammar,那玩意把你lexer,parser都產生好了,產生java,python,c#隨你.
探索Antlr
http://dreamhead.blogbus.com/logs/10756716.html
Five minute introduction to ANTLR 3
http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3
OK了,差不多了,好久沒有全休過完整的雙休日,去做個飯.