Vczh Free Script
Vczh Free Script的開發歷程
今天在硬盤上發現了去年寫的一個小型IDE
摘要: 當Vczh Free Script還處于1.0版本的時候,我用C#寫了一個IDE出來。因為腳本本身是不能產生exe的,所以這個IDE只有執行而沒有編譯的功能。不過有兩個個困難的地方。
RichTextBox里面的修改會讓顏色變化。我找不到C#中的有效做法,所以只好把自己的正則表達式引擎包一層插入C#,每次修改的時候都重新生成整個RTF文檔插入RichTextBox。后來測試的時候,發現只要腳本在1000行左右的時候速度仍然是可以接受的。沒有進行更多的測試。
腳本自己也是可以調用編譯器的。腳本代碼可以用字符串產生一段新的代碼然后執行。因此IDE也要動態的【發現】并【調試】這些動態產生的代碼。下面貼了4幅圖。
閱讀全文
posted @
2008-06-14 00:20 陳梓瀚(vczh) 閱讀(4211) |
評論 (14) 編輯
Vczh Free Script 2.0的Syngram庫完成
摘要: 今天在測試封裝在FreeScript內的正則表達式接口的時候發現了一個垃圾收集器的Bug,不過很容易就看出來了,于是立刻fix掉。出錯的原因在于垃圾收集的時候只標記了運算堆棧的內容,忘了標記調用堆棧的內容。
這個新的Syngram包含了三個工具,分別是正則表達式、詞法分析器和語法分析器。
正則表達式分純、安全和貪婪三種。純正則表達式僅僅用于匹配,速度非常快(以前的測試表明一秒鐘可以匹配44萬次),但是沒有預查和捕獲等功能。安全和貪婪兩種正則表達式則是通過不同的搜索方法來匹配字符串的內容,雖然慢了一點,不過有了預查和捕獲等功能。之前的文章有提到過關于一個少回溯多捕獲的測試用例下的速度。安全分析法回溯將會占用很多時間,而貪婪分析法則回溯基本是沒什么消耗的。
詞法分析器則可以輸入不同的正則表達式,然后將字符串切割成匹配和不匹配的段落,并告訴你匹配的部分實際上是匹配了哪一條正則表達式。這個功能在分析很多字符串的時候都是相當好用的。
至于語法分析器,則是實現了一個上下文無關文法庫。語法
閱讀全文
posted @
2008-05-19 00:56 陳梓瀚(vczh) 閱讀(1637) |
評論 (4) 編輯
Vczh Free Script 2.0中namespace和大部分操作符重載完成!
摘要: 今天上完課回來繼續把昨天晚上剩下的using字句完成。使用Syngram寫編譯器真是舒服啊,直接在代碼里面加兩條推導式就完成了。昨天發現了InsertEnv指令的bug以后,改過來了。不過InsertEnv不能用在using身上,只好另外寫了一個UsingEnv指令,把環境以及上游的鏈表而不是多個環境插進當前的環境中。這里展示了class和namespace是如何通過閉包(函數)來實現的,以及他們的構造過程。
class以及namespace都是通過在return的跳轉目標后添加指令而保證return結束但是不修改class和namespace表達式的返回值。
class函數的參數是父類的構造子,class函數在所有代碼之前首先構造好一個父類的鏈表,然后通過InsertEnv將這個表引用到自己身上,從而實現了正確的scope。然后讓constructor為空函數。ClassName.new()的時候首先運行class函數(使用callctor而不是invoke來自動找到父類并添加到參數中),然后復制堆棧,獲取construct
閱讀全文
posted @
2008-05-11 21:37 陳梓瀚(vczh) 閱讀(1530) |
評論 (4) 編輯
今天發現了Vczh Free Script 2.0的一個bug
摘要: 今天抓到了一個隱藏了3個月的bug。這個bug以前一直沒有被找到,因為以前寫的用于測試腳本的代碼都沒有出現類成員函數使用非全局的外部對象的情況。Vampire.Kiss用我的Vczh Free Script代替PHP開發了一個網站,過程中也向我提了不少要求。其中有一套就是想在腳本中加入namespace。其實這是相當合理的,只是我沒想到腳本第一次應用就會被用來開發庫。因此今晚就加上了namespace。
實際上在目前的結構中添加namespace并不復雜,因為namespace也可以用閉包來模擬。其實閉包不僅僅是函數,而是一段帶了上下文的指令表。因為namespace本身也是用于控制符號在上下文中解釋方法工具,因此使用閉包來做也就是十分合適的了。想到以前是用閉包模擬class的時候,曾經實現了一個把一堆環境鏈接到上下文中的指令。類的繼承實際上也是控制符號在類成員函數的符號在上下文解釋方法的工具,因此我使用了如下方法來讓閉包可以順利地模擬class的繼承:
閱讀全文
posted @
2008-05-11 10:07 陳梓瀚(vczh) 閱讀(1847) |
評論 (5) 編輯