05 2009 档案
使用COM实现控件内容的Drag and Drop
摘要: 查了MSDN,发现Windows支持Drag and Drop的方法是四个COM:IEnumFORMATETC、IDataObject、IDropSource和IDropTarget。为了让自己做的一个代码编辑文本框里面的代码可以被拖出去拖进来,无奈之下只好实现了这四个东西。
实现了之后,程序刚开始需要调用OldInitialize(NULL);,结束的时候调用OnUninitialize();,控件创建的时候调用RegisterDragDrop,控件结束的时候调用RevokeDragDrop。然后就可以通过这些COM来做Drag and Drop了。下面是接口的实现:
阅读全文
posted @
2009-05-29 21:17 陈梓瀚(vczh) 阅读(3098) |
评论 (4) 编辑
【源码下载】JIT脚本引擎:CMinus 0.1版开放下载
摘要: 说明:CMinus是一个读入修改过语法的C源程序,然后编译成x86指令集写入内存,最后用__stdcall调用约定跟C++互相交流的脚本引擎。
目标:CMinus的定位是中间语言,用于将其他语言编译到CMinus上,享受本地指令带来的好处。
进度:完成所有功能,但是由于指令集生成的算法不好,打算修改。
下载:【内详】。
阅读全文
posted @
2009-05-22 00:32 陈梓瀚(vczh) 阅读(10017) |
评论 (24) 编辑
JIT脚本引擎:CMinus编译冒泡排序程序
摘要: 虽然CMinus到中间指令的代码是精心控制的,但是中间指令到x86的代码却是很随意写出来的。现在看来用窥孔优化只是一种治标不治本的方法。打算在CMinus整个都完成了之后,将中间指令到x86的代码生成那部分重写,使用一种广为人知的寄存器分配算法来做。下面是冒泡排序的程序:
阅读全文
posted @
2009-05-19 16:51 陈梓瀚(vczh) 阅读(3036) |
评论 (3) 编辑
JIT脚本引擎:第一个CMinus程序运行成功
摘要: 目前其实只能编译单目运算符和return语句,主要是为了看看整个大框架有没有错误。如果没有发现错误的话,其他种类的表达式和语句的代码生成很容易加上去。下面是一个CMinus程序的例子和编译结果(汇编):
阅读全文
posted @
2009-05-17 23:00 陈梓瀚(vczh) 阅读(2648) |
评论 (1) 编辑
丘奇数(Church Numerals)和lambda calculus
摘要: 以前为了开发KFP,特别学习了一下lambda calculus(也就是我的博客的标题啦)。lanbda calculus是一门神奇的语言,在计算机出现之前就已经被搞出来了。这门语言只有三种语法,然后可以用这个语法来构造整数(!!!)、布尔型和很多递归数据结构等。
内含代码
阅读全文
posted @
2009-05-11 04:30 陈梓瀚(vczh) 阅读(5486) |
评论 (7) 编辑
手把手教你写脚本引擎(五)——简单的高级语言(3,符号表)
摘要: 符号表的结构的复杂度跟语言的语义规则的复杂度有关。对于C#来说,每一个符号都附带了一大堆信息,譬如位置啦,所在的namespace啦,类型啦什么的。对于JavaScript来说,符号表几乎是不需要的,因为东西都动态了,编译时几乎不检查内容。语义分析的输出是符号表,代码生成的输入是符号表和语法树。因此语法树除了放语法相关的内容,语义相关的内容最好放到符号表里面(譬如说表达式的类型啦,语句的scope结果啦)。
阅读全文
posted @
2009-05-10 18:48 陈梓瀚(vczh) 阅读(7327) |
评论 (1) 编辑
【转】How to make programming hard for yourself
摘要: 这篇转载的文章主要讲了为什么写非工作的代码的时候,要时不时刁难自己。
内详。
阅读全文
posted @
2009-05-09 06:55 陈梓瀚(vczh) 阅读(3245) |
评论 (0) 编辑
JIT脚本引擎:基本完成CMinus的语义分析
摘要: 整整写了一天,终于基本写完了CMinus的语义分析的代码,只剩下一个检查struct是否可以计算出长度的问题(环引用造成的)。下面贴出语义分析的结果,从结果中可以看出符号表的结构以及构造方法:
阅读全文
posted @
2009-05-06 08:13 陈梓瀚(vczh) 阅读(3096) |
评论 (4) 编辑
JIT脚本引擎:CMinus大部分语法测试通过
摘要: 今天写了一些CMinus程序供语法分析器分析,然后程序从语法树重新生成格式化后的代码,两边比较检查优先级什么的是否正确处理。下面是CMinus写的冒泡排序、菲薄纳气数列、链表操作函数以及其他程序:
阅读全文
posted @
2009-05-04 19:44 陈梓瀚(vczh) 阅读(2023) |
评论 (1) 编辑
Combinator Parser修改错误处理方法
摘要: 在实验了CMinus语法分析器的错误处理之后发现一个问题,Combinator Parser返回的错误是最上级的错误,而不是最底层的错误。因此修改了语法分析器的一部分代码:
阅读全文
posted @
2009-05-04 02:35 陈梓瀚(vczh) 阅读(1887) |
评论 (1) 编辑
JIT脚本引擎:实现CMinus语法分析器
摘要: 这一次的语法分析器,我使用Vczh Combinator Parser,按照文法的定义,将字符串转换成了语法树。Vczh Combinator Parser构造较大规模的编译器的时候还是较为吃力,主要原因出在Visual C++竟然限制一个类型全名不能超过某个长度T_T……下面是代码:
阅读全文
posted @
2009-05-03 19:25 陈梓瀚(vczh) 阅读(2911) |
评论 (11) 编辑