2013年5月16日 星期四

利用lua帶給brainf*k編譯器無限美好的未來(XD)

打完這標題我都笑了XD
之前提過我一個作品,brainf*k(下稱bf)直譯器。它可以讀取一段bf程式並且立刻把執行的結果告訴你。當時的設計把底層和直譯器界面分離,所以只要建立編譯器的界面就可以完成一個編譯器了。當時相當有野心的畫了塊餅:做一個超級有彈性的編譯器,讓它可以把bf程式輸出成各種不同的形式。
(完成品請見這裡

這個編譯器的bf部份使用和bf直譯器相同的一組程式碼,而程式碼輸出的部份,相對於大部分編譯器寫死的狀態(需要在編譯的時候決定它的輸出能力),這個編譯器能做多少種的輸出,由使用者提供的lua script決定。只可惜..這樣子的設計要做出可以輸出各種格式的二進位檔(也就是直接輸出執行檔)似乎非常難以辦到。目前我想不到讓使用者可以動態載入所需要模組(動態連結程式庫,像是libelf)的方法,所以說對於那些想輸出二元檔的人來說,只能用手刻了呢Orz

所以,bf編譯器的現狀是,略懂lua的人可以按照我的規則來提供bf編譯器輸出各種不同平台的組合語言原始碼,接著使用者必須把輸出的程式碼轉交給組譯器(GNU as之類)來輸出最後的執行檔,不然就幫它弄好墊子,好好封存吧~

目前bf編譯器有附贈直接輸出虛擬碼的lua程式,之後會增加輸出x86-64-linux的lua程式。目前就先這樣吧!

沒有留言:

張貼留言