2013年3月18日 星期一

Brainf*k: 超精簡程式語言之口譯篇

偶然的機遇下,我認識了一個超精簡的程式語言brainf*k(下稱BF)。這個程式語言的特性是,只有8個指令,卻被認為可以完成任何的計算(似乎是Turing-complete特性。),正所謂「麻雀雖小,五臟俱全」。

也因為這個程式語言的簡潔性(每個操作均由一個字元表示,而且沒有運算子順序等等的問題...),讓我想:不如就做一個BF直譯器吧!依據當時我腦袋瓜子裡的規劃(「用一個main直接解決它吧!」),應該只要一個下午,頂多再加上一個晚上就可以完成了吧?

的確啦。如果依照當時擺在腦袋裡的藍圖來寫的話應該沒問題,就算遲交也不會超過一天。然而,手放到鍵盤上之後,就開始想到了許多問題:作個堆疊如何('['和']'要配對)?要不要作虛擬碼層?最佳化系統呢?...等等的雜七雜八問題。總之這些問題的共同部份就是要進行模組化,會消耗不少時間。雪上加霜的是,我沒有非常專心的做這個東西(「SIGSEGV?唉去玩個小遊戲吧」),導致一些擾人的小錯誤不斷的在過程中出現。當然,會在這裡寫這個文章,就代表程式已經差不多完成了。

東西的原始碼在這裡。利用內附的CMakeList.txt配合cmake就可以得到完成品bfi,BF的直譯器。直譯器本身只經過簡單的測試(Hello world, factorial等在網路上隨意找的程式),但我對它相當的有信心,畢竟這是我絞了一週的腦汁所得到的呢!

做這個直譯器的過程中我做最棒的決定是實行模組化。當底層的模組全部完工並且通過測試之後,要正確無誤的完成直譯器就變成了小菜一碟。雖然模組化的規劃花了不少時間,但的確是相當值得的。

接下來?美化這個直譯器,或許寫些文件,或許做出可以輸出x86-64組合語言的編譯器吧。BF很有趣呢~

沒有留言:

張貼留言