摘要: 腳本引擎的作用在于增強程序的可配置性。從游戲到管理系統都需要腳本,甚至連工業級產品的Office、3DS Max以及AutoCAD等都添加了屬于自己的腳本語言。DHTML的出現讓我們可以在網頁代碼中嵌入腳本語言,PHP和ASP等技術的出現讓我們可以將一個應用程序的界面換成網頁,而邏輯使用腳本語言編寫。現在腳本語言的種類繁多,Python的發展讓BOOST庫擁有了對Python的支持,Rails框架的出現壯大了Ruby的實力,LUA更是被大量應用在游戲開發中。Windows甚至提供了wscript以便讓我們能夠調用javascript和vbscript的代碼。
既然有了這么多可供選擇的腳本引擎,為什么我們仍然要開發自己的腳本引擎呢?
閱讀全文
posted @
2008-07-07 07:45 陳梓瀚(vczh) 閱讀(21639) |
評論 (12) |
編輯 收藏
考試結束了,Vczh Free Script 2.0也放出來了,正則表達式的代碼也一并發包含在VFS 2.0里面了。于是想寫一個關于如何開發腳本引擎的系列。過幾天要去實習了,如果找到晚上上網的辦法的話會陸續發出來,要不然的話只能在實習結束之后一并發上來了。
腳本引擎在很多時候都能用上,而且現在也有很多腳本引擎的產品了。為什么還要學習如何寫腳本引擎呢?其一是為了學習,其二是為了了解。學習對于自己的編程水平的提高很有幫助,了解對于使用當今的腳本引擎也很有幫助。而且自己開發腳本引擎的好處在于可以自己控制安全問題。雖然這個在大多數情況下并不是優先考慮的條件。
腳本引擎的開發是有一定的方法的。首先,要把輸入的腳本代碼變成記號,也就是說把“printf("Hello World");”變成print、(、"HelloWorld"、)和;五個部分。至于開發可配置的高速詞法分析器可以看這篇文章。接下來就是語法分析器。這個時候首先需要了解為什么代碼是一棵樹(數據結構的樹),然后才能開始工作。至于如何寫語法分析器,或者詞法分析器也想手寫的話,可以看這篇文章。為了執行效率,我們需要將語言抽象成指令集,就像X86的指令集一樣,但是更加簡單。可以使用堆棧機。
一門支持能垃圾收集的string、array和不能垃圾收集的class的語言是很容易編譯成機器碼的。現在我正在閱讀intel的文檔了解x86(32位)的指令格式。如果在寫文章的過程中這個問題被我解決了的話,我也會順便把如何將腳本編譯成機器碼以便加快執行速度的辦法寫出來。現在我對于x86指令集的模式已經了解了,剩下具體問題。垃圾收集器的資料并不多,我唯一找到的就是《Garbage Collection,Algorithms for Automatic Dynamic Memory Management》。中文版貌似賣完了,我只能下載英文版的影印版看。很慘。在文章里面我會講述一種比較簡單的單代compact垃圾收集器(.NET用的是多代)。
文章的組織暫時決定使用如下方法:
·如何設計合適自己使用的語言
·詞法分析器、語法分析器與語法樹的結構(一開始只有函數、字符串以及能進行垃圾收集的數組,弱類型語言)
·如何設計合適的指令集
·指令集(堆棧機)的數據結構以及從語法樹翻譯到指令集的方法
·虛擬機的開發
·如何向虛擬機加入外部函數以便讓腳本可以調用程序提供的其他功能
·進一步修改語言,加上其他特性等
如果x86的指令集研究的速度夠快的話,將會添加如下內容
·分配寄存器的算法
·x86指令格式
·如何調用自己產生的機器碼
這個系列持續的時間將比較久,而且每一篇文章將附帶示例代碼。如果只需要了解方法而不需要看具體的實現的朋友們可以略過這個部分。關于具體實現的部分我將可能在文章中標明出來。
posted @
2008-07-06 08:37 陳梓瀚(vczh) 閱讀(2280) |
評論 (5) |
編輯 收藏
摘要: 作者保留對源代碼的一切權利
文件是一個rar壓縮包,結構如下:
【產品】
【Demo】兩個Demo的編譯結果。這個文件夾里面的腳本代碼僅供測試用。
【庫】編譯結果以及Vczh Free Script 2.0提供的插件封裝,使用Vczh Free Script腳本語言編寫。
【文檔>】使用說明書。
【源代碼】源代碼僅能使用Visual C++ 2005或以上編譯器編譯。
【FreeScript】使用FsRuntime.dll寫的C++Demo,控制臺虛擬機。
【FreeScript_CSharp】使用FsRuntime_clr.dll寫的C#Demo,控制臺虛擬機。
【FsRuntime】Vczh Free Script 2.0 DLL接口。
【FsRuntime_CLR】使用FsRuntime.dll寫的.NET接口。
【Library】
【Data】數據輸出以及必要的操作系統接口封裝。
閱讀全文
posted @
2008-07-01 05:35 陳梓瀚(vczh) 閱讀(11168) |
評論 (23) |
編輯 收藏
摘要: 玩了幾天空之軌跡 FC,終于快結束了。距離最后一門考試還有3天,于是把整個XPath的代碼寫完了。于是試用一下。
現在展示一下我那個XPath的使用方法:
1 VL_List
Result;
2 VL_XPath XPath(L"http://Files//File[contains(@RelativePath,\".cpp\") or contains(@RelativePath,\".h\")]");
3 XPath.Query(Doc.GetRootElement(),Result); 第一行聲明一個XML節點列表,第二行構造一個XPath,第三行將XPath作用在一個XML文檔的根節點上。這個XPath用于把VC++9.0的工程文件中包含的所有.h文件和.cpp文件提取出來。雖然Files里面包含若干Filter,每一個Filter包含一些Filter和File,不過輸出結果Output.xml把所有的滿足要求的File節點都找了出來。
閱讀全文
posted @
2008-06-27 20:55 陳梓瀚(vczh) 閱讀(2411) |
評論 (2) |
編輯 收藏
摘要: 花了2個小時終于把XPath的數據結構和語法分析做完了。這個XPath的語法完全按照MSDN所說的做,除了減少了2個跟DTD相關的函數和11個Microsoft擴展的"ms:"開頭的函數以外,剩下的功能將一概支持。
代碼寫完了之后,我打開MSDN找里面的幾十條XPath Example進行測試,發現了一些Bug,然后修正。現在MSDN所列舉的所有例子都通過了,接下來只有自己寫Example進行測試了。因為MSDN的例子并沒有覆蓋所有等價類。
下面是運行結果和測試程序的代碼:
閱讀全文
posted @
2008-06-21 00:34 陳梓瀚(vczh) 閱讀(2451) |
評論 (2) |
編輯 收藏
摘要: 為了整理出可以實現的XPath,我把根DTD相關的兩個內置函數去掉了,Microsoft擴展的11個函數也沒有考慮進去。XPath是一門非圖靈完備的、沒有副作用的、弱類型以及很難看的語言,用于把一個XML的某個節點轉換成一些節點。
Context:上下文。指的是使用指定條件正在搜索的XML路徑的節點。
ContextList:被PREDICATE過濾的列表... 閱讀全文
posted @
2008-06-20 01:44 陳梓瀚(vczh) 閱讀(4908) |
評論 (1) |
編輯 收藏
摘要: 為了紀念自己為了明天的XML考試復習了半天,特地根據MSDN描述的標準做了一個XML的解釋器。接口類似DOM和SAX的混合體。
目前什么都不支持,不過以后打算做完DTD和XPath。XSD和XSL就先算了。反正是寫著玩的。把代碼貼出來先。這個代碼使用了自己開發的一套C++基礎庫。
閱讀全文
posted @
2008-06-19 05:28 陳梓瀚(vczh) 閱讀(3155) |
評論 (8) |
編輯 收藏
摘要: 首先吐槽一下:今天考IT項目管理,100道選擇題。前幾天考配置管理,10道大題。如今的老師都喜歡走極端……
這個方法是在考完試回宿舍的路上想到的,適用于2D與3D。主要想法是這樣的。給定兩個幾何圖形A、B,把A和B都分成『內『、『外』兩部分。A的『內』就是處于B內部的部分。于是A和B就變成了A內、A外、B內、B外。然后就有如下公式:
·A and B=A外+B外
·A sub B=A外+B內
·A or B=A內+B內
·A xor B=A外+B外+A內+B內
這種數據結構是為了滿足如下算法:一個A點在圖形內<==>過這個點的直線交圖形與點集P,其中|{Pi|Pi<=A}|和|{Pi|Pi>=A}|都是奇數。注意我們使用的是<=和>=,這樣的話兩個集合的數量的奇偶性都是一致的。這個算法無論2D、3D多邊形還是3D多面體都能適用,就算是這個圖形有孔(鑲嵌)也可以,而且跟凹凸體無關。這個算法只有一種情況是不能用的:就是自己跟自己有交叉,譬如我們習慣的5條直線構成五角星的畫法。這 閱讀全文
posted @
2008-06-16 19:20 陳梓瀚(vczh) 閱讀(4543) |
評論 (7) |
編輯 收藏
摘要: 網龍公司招聘
網龍公司是中國網絡游戲開發商和運營商的領導者之一,總部位于中國福建省福州市。
1、大型WEB2.0網站架構師
2、3D游戲引擎程序設計師
3、游戲客戶端程序員
4、游戲服務端程序員
5、游戲工具開發程序員
6、手機平臺開發程序員
7、驅動開發程序工程師
8、B/S程序員
9、WEB2.0游戲社區軟件開發工程師
10、應用軟件開發程序員
月薪6千起,優秀者月薪不封頂。享受基本養老、醫療、失業、工傷、生育等保險,以及公積金和公司福利。
聯系方式:
QQ:611990694(請備注:您的姓名和應聘崗位)
EMAIL:hr@nd.com.cn
內詳,版主勿刪。 閱讀全文
posted @
2008-06-16 07:35 陳梓瀚(vczh)|
編輯 收藏
摘要: 在寫可配置的語法分析器之前,我覺得還是先說說如何手寫語法分析器好。因為對于大部分人來說,開發一個可配置的語法分析器并沒有什么作用,反而針對某種特定的語法開發特定的語法分析器是特別有必要的。典型的有表達式計算器、某種格式化的文件(HTML、XML等)或者是其他的復雜而且符合樹型結構的字符串。根據目前論壇的反應來看,有一些朋友們對如何開發一套自己的腳本引擎比較感興趣。等基礎的文章都寫完以后我會考慮撰寫一個系列的文章介紹如何開發自己的腳本引擎。
這篇文章會附帶一些必要的代碼以便幫助讀者們理解。為了方便,代碼使用DevC++開發。 閱讀全文
posted @
2008-06-15 05:59 陳梓瀚(vczh) 閱讀(40143) |
評論 (28) |
編輯 收藏