出於分享學習心得和獲得同伴討論的目的,我打算寫乙個教程給想要學習如何實現lua直譯器的同學提供乙個參考。
我在去年4月開始接觸到遊戲引擎的指令碼引擎,那時我在讀一本名為《遊戲指令碼高階教程》的書。
這本書在我的腦子裡植入了乙個想法:指令碼引擎是乙個方便的開發工具。
經過一些搜尋和學習,我選擇了lua語言並決定實現它。
我從4月開發到8月底,加上今年3月到5月,共計半年的時間,完成了python和c#兩個版本。
這裡我使用了原型開發方法:先使用python開發專案原型,理解實現框架和基本概念,使用pythonic的方式編寫優雅的**,忽略邊界條件和細節。然後再用c#重寫並最終實現專案。
我提供乙個學習路線:
首先需要一些程式設計的經驗,應該掌握一門靜態型別語言和一門動態型別語言。
c和lua是必須的,因為lua是用c實現的。
不必過於糾結細節,語言本身要通過使用來增進理解。
然後需要編譯原理的知識,包括以下主題:
然後實現乙個json解析器,參見milo yip的json教程。
milo yip:從零開始的 json 庫教程zhuanlan.zhihu.com
json是乙個簡潔的資料定義語言,適合作為實現lua的熱身練習。
此外,你可以發現lua的表構造表示式(table constructor)和json非常相似,可以認為是抽出一部分先實現了。
然後才開始實現lua,獲取以下資料後結合lua源**學習如何實現lua:
我提供乙個實現路線:
將lua分為前端編譯器和後端虛擬機器兩個部分。
首先實現虛擬機器。為了測試虛擬機器,實現undump模組,使用clua編譯出二進位制chunk檔案,由undump讀取出proto例項,餵給虛擬機器執行。
然後再實現編譯器,按詞法分析,語法分析,**生成的順序即可。
指令碼引擎初步研究
2006年09月28日 15 12 00 由於組態軟體裡要嵌入指令碼引擎,以前雖然在ioserver中嵌入了vbscript,但指令碼引擎的概念實在是不甚明白,這幾天集中突擊了指令碼引擎的相關知識,收穫還不少。尤為重要的是,python指令碼引擎進入了我的視野,因為它支援多個平台,連wince平台也...
C 指令碼執行引擎
先曬曬 以及執行結果 extern c void do const char str extern c void doint int class cx extern cx pmyclass class ct int dt int inum int main 執行結果就不抓圖了,簡單說下指令碼中關心的...
指令碼引擎初步研究
由於組態軟體裡要嵌入指令碼引擎,以前雖然在ioserver中嵌入了vbscript,但指令碼引擎的概念實在是不甚明白,這幾天集中突擊了指令碼引擎的相關知識,收穫還不少。尤為重要的是,python指令碼引擎進入了我的視野,因為它支援多個平台,連wince平台也支援,這正是我需要的,用了一上午的時間熟悉...