
2008年10月4日
摘要: 我终于在实验阶段解决了这个困扰了我5个月(虽然实际上我花了3个星期)的问题。目标是这样的:你写程序,可以尽可能的不写一些类型信息,譬如函数参数和返回值的类型信息等。我的编译器帮你把它的类型算出来。
内详,有例子、方法和模型。
阅读全文
posted @
2008-10-04 23:19 陈梓瀚(vczh) 阅读(906) |
评论 (3) |
编辑 收藏

2008年10月1日
摘要: 语法分析器终于完成了,总共花了7个小时的时间。其中遇到了一些小问题,譬如lambda expression的\param->expression和let-in expression的let declaration-list in expression里面的expression需要尽可能长的解决办法。因为用了Syngram,所以不得不调整出符合需求的文法。
为了大概看一看文法有没有写对,我写了一个程序,读入KernelFP语言写的一份代码,将其格式化并输出。
阅读全文
posted @
2008-10-01 17:31 陈梓瀚(vczh) 阅读(869) |
评论 (0) |
编辑 收藏

2008年9月28日
摘要: 国庆7天容易无聊,于是我打算实现一下以前失败过的一种语言的特性:类型推导。于是顺便做一做惰性计算吧。于是我尝试设计了一门特性尽可能少的语言,并且强制让一个函数的返回值仅跟输入的参数有关。虽然这个特性不适合用来做IO,但是是有办法解决的,而且不需要修改语言就可以直接支持。
这门语言的定义及其简单,需要预先定义的部分也是很少的,于是我尝试实现了if、逻辑运算符以及itoa和atoi两个函数
阅读全文
posted @
2008-09-28 23:14 陈梓瀚(vczh) 阅读(1062) |
评论 (4) |
编辑 收藏

2008年9月14日
摘要: 经过三个小时的努力,一个供调试用的模拟器终于做出来了。对于一份语法说明来讲,我们需要提供调试器,一直到调试完了才生成代码,这样比较容易找到问题。同时为了验证自己的那个设计,于是做了一个调试器出来。这个调试器使用了这篇文章里的数据结构文件以及文法文件,以及使用了这篇文章里开发的一个树到图的转换程序,成功得到结果!
阅读全文
posted @
2008-09-14 23:22 陈梓瀚(vczh) 阅读(1019) |
评论 (1) |
编辑 收藏
摘要: 除了错误处理文件还没有定义好以外,现在语法定义跟语法树的数据结构定义以及分析器都完成了!有了这两个文件,我的工具就可以替你生成一个函数和一堆类,让你使用这个函数就可以将一份代码转换为一颗语法树啦。娃哈哈……
现在让我们来看一个例子
阅读全文
posted @
2008-09-14 16:53 陈梓瀚(vczh) 阅读(860) |
评论 (3) |
编辑 收藏

2008年9月12日
为了生成编译器的代码,对语法树的数据结构进行定义是必不可少的一项工作。在这里我设计了一套用于生成C++代码的数据结构的数据结构定义文件的格式。
这份定义支持enum、class和typedef三种命名方法,支持基本类型、C++类型、列表、映射、指针以及智能指针等。因为结构简单,所以我直接贴一份示例出来。这份示例用于代表
这篇文章里的科学计算器表达式文法对应的语法树的结构。Expression本应是空的,为了对上述的例子进行说明,所以那些没用上的功能就全部加在Expression里面了。
1 enum BinopType
2 {
3 Plus
4 Minus
5 Mul
6 Div
7 }
8 enum SinopType
9 {
10 Negative
11 }
12
13 class Expression
14 {
15 list<int> IntList
16 map<string,int> IntMap
17 Expression^ Autoptr
18 Expression* Pointer
19 "CustomType" Custom
20 }
21 typedef Expression^ ExpPtr
22 class Number
23 {
24 double Number
25 }
26 class Binop
27 {
28 BinopType Operator
29 ExpPtr LeftOp
30 ExpPtr RightOp
31 }
32 class Sinop
33 {
34 SinopType Operator
35 ExpPtr Operand
36 }
列表、映射和智能指针在Vczh Library++ 2.0里都有对应的工具来表达,将来生成的编译器的代码数据结构将依赖于Vczh Library++ 2.0,而语法分析部分则直接使用库中的Syngram。
posted @
2008-09-12 21:49 陈梓瀚(vczh) 阅读(837) |
评论 (0) |
编辑 收藏