随笔-341  评论-2670  文章-0  trackbacks-0
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 16:20 陈梓瀚(vczh) 阅读(3679) | 评论 (14)  编辑
Vczh Free Script 2.0类插件完成
posted @ 2008-05-29 14:50 陈梓瀚(vczh) 阅读(1450) | 评论 (0)  编辑
Vczh Free Script 2.0的Syngram库完成      摘要: 今天在测试封装在FreeScript内的正则表达式接口的时候发现了一个垃圾收集器的Bug,不过很容易就看出来了,于是立刻fix掉。出错的原因在于垃圾收集的时候只标记了运算堆栈的内容,忘了标记调用堆栈的内容。

这个新的Syngram包含了三个工具,分别是正则表达式、词法分析器和语法分析器。

正则表达式分纯、安全和贪婪三种。纯正则表达式仅仅用于匹配,速度非常快(以前的测试表明一秒钟可以匹配44万次),但是没有预查和捕获等功能。安全和贪婪两种正则表达式则是通过不同的搜索方法来匹配字符串的内容,虽然慢了一点,不过有了预查和捕获等功能。之前的文章有提到过关于一个少回溯多捕获的测试用例下的速度。安全分析法回溯将会占用很多时间,而贪婪分析法则回溯基本是没什么消耗的。

词法分析器则可以输入不同的正则表达式,然后将字符串切割成匹配和不匹配的段落,并告诉你匹配的部分实际上是匹配了哪一条正则表达式。这个功能在分析很多字符串的时候都是相当好用的。

至于语法分析器,则是实现了一个上下文无关文法库。语法  阅读全文
posted @ 2008-05-19 16:56 陈梓瀚(vczh) 阅读(1437) | 评论 (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-12 13:37 陈梓瀚(vczh) 阅读(1337) | 评论 (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-12 02:07 陈梓瀚(vczh) 阅读(1585) | 评论 (5)  编辑