随笔-341  评论-2670  文章-0  trackbacks-0
04 2009 档案
JIT脚本引擎:C Minus语言语法树定型      摘要: 今天照着C Minus的语法(略有修改)设计出了C Minus的语法树。语法树的设计尽量让生成语法树的代码易于编写。每一个结构的意义十分明确,而且结构与结构之间不需要有相互联系。下面是语法树的代码:  阅读全文
posted @ 2009-04-24 00:58 陈梓瀚(vczh) 阅读(3141) | 评论 (5)  编辑
JIT脚本引擎:开始做第一门编译成机器码的脚本引擎      摘要: 把中间指令都搞定了之后,得开始做一门JIT的脚本引擎了。但是这门脚本引擎不是用来写的,而是用来给更高级的语言编译的。这是什么意思呢?虽然我现在写了个语法分析器,提供了语法树,但是我的目的是让我以后设计的更高级的语言可以编译成这门相对底层的语言,而不是直接编译成中间指令。这样很多事情都会好做很多。

这一门语言主要模仿C,提供指针、结构、数组、基本类型和函数指针。还有extern函数做外部链接用。因为编译成机器码,所以可以直接把一个函数指针丢进我的脚本引擎,就可以这么用了。而且我的脚本里面的函数也可以直接作为一个函数指针提供出来。复合类型组要勇于跟C++交互。在C++与脚本里面声明同样的struct,不需要做额外工作,就可以互相使用了。
  阅读全文
posted @ 2009-04-18 00:17 陈梓瀚(vczh) 阅读(3221) | 评论 (7)  编辑
JIT脚本引擎:完成20个浮点函数      摘要:
FPU写起来还真是囧啊,下面20个函数实现到想死……
Sin,Cos,Tan,Cot,Sec,Csc,ASin,ACos,ATan,ACot,ASec,ACsc,Sqrt,Exp,Ln,Abs,Round,Trunc,Ceil,Floor
下面是这20个函数的汇编代码,其中Exp更是登峰造极……  阅读全文
posted @ 2009-04-16 05:39 陈梓瀚(vczh) 阅读(4983) | 评论 (3)  编辑
JIT脚本引擎:测试除特殊浮点函数外的所有指令通过      摘要: 昨天为机器码编译程序写了个专用的unit test框架,今天用中间语言在这个框架上写了个程序。程序将12个字符串连接起来,然后跟另外一个字符串进行比较,如果相等返回true。当然程序如果返回false了,要么就是程序有问题,要么就是编译器有问题。当然现在是测试通过了。程序如下:  阅读全文
posted @ 2009-04-15 21:15 陈梓瀚(vczh) 阅读(2177) | 评论 (1)  编辑
JIT脚本引擎:成功将第一个脚本编译成机器码      摘要: 这次工作将一个中间语言的程序翻译成了汇编,然后再翻译成机器码。这一次产生的汇编比较烂,到时候做个窥孔优化稍微处理一下就好了。等上层的设施搞定之后再将这个中间语言到汇编的程序重写。下面是一个菲薄纳气数列的例子。  阅读全文
posted @ 2009-04-14 00:11 陈梓瀚(vczh) 阅读(2790) | 评论 (9)  编辑
JIT脚本引擎:继续工作      摘要: 大约两个多星期没做JIT了,经过之前些其他代码消遣,现在还是继续做下去的好。目前的成果是完成了汇编数据结构、完成了汇编到机器码的转换器、知道了成员对齐、调用转换的约定、知道如何实现异常处理以及完成了中间指令的数据结构和检查。现在需要做的事中间指令到汇编的转换程序。  阅读全文
posted @ 2009-04-10 23:30 陈梓瀚(vczh) 阅读(1968) | 评论 (1)  编辑
搞定模板元编程(meta programming)      摘要: 今天闲得无聊,早上起来习惯性瞟一瞟boost,突然看中了它的MPL库,所以自己实现了一个子集消磨时间。

已经实现的功能有:整数运算、闭包、列表处理等。我用了自己的unit test框架,通过写一个函数输出一个属于自己的MPL类型的字符串(譬如List,List,Empty>>产生"[0 , 1]"),然后用自己写的字符串比较,可以发现库里面是否有错。

一下有两份代码,第一份是使用,第二份是自己的MPL的源代码:  阅读全文
posted @ 2009-04-08 05:17 陈梓瀚(vczh) 阅读(3807) | 评论 (13)  编辑
C++轻量级文法分析器更新,代码+DEMO×3(下载)      摘要:
对上一次的分析器进行重构之后,Combinator Parser加入了对字符串、词法分析器以及正则表达式的新支持。功能上则添加了对于歧义和非歧义的控制。

源代码与Demo下载内详
  阅读全文
posted @ 2009-04-06 06:18 陈梓瀚(vczh) 阅读(10290) | 评论 (34)  编辑
C++轻量级可配置语法分析器(开源)      摘要: 这个分析器包含了四个文件:
VL_Data_Basic.h(使用了其中的智能指针VL_AutoPtr和一些类型重命名)
VL_CpData.h(数据结构)
VL_CpKernel.h/cpp(词法分析器和语法分析器)

这个东西供给熟悉编译原理(至少熟悉BNF notation)的人互相学习交流。
内附代码下载以及使用的例子。  阅读全文
posted @ 2009-04-03 01:21 陈梓瀚(vczh) 阅读(6376) | 评论 (9)  编辑