随笔-77  评论-413  文章-0  trackbacks-0
  置顶随笔
2008年08月25日 Vczh Library++ 2.0 GUI Framework 预览版代码以及示例程序

2008年07月07日 手把手教你写脚本引擎(一)(二)(三)(四)

2008年07年01日 Vczh Free Script 2.0 beta发布

2008年06月15日 如何手写语法分析器

2008年05月22日  《构造正则表达式引擎》和《构造可配置词法分析器》
    《正则表达式引擎:C语言实现的一些感想》:网友的读后感。

2008年05月21日  使用高阶函数开发语法分析器。 
posted @ 2008-06-06 01:36 陈梓瀚(vczh) 阅读(410) | 评论 (0)编辑 收藏
  2008年10月8日
     摘要: 今天将Haskell的一部分列表处理函数抄进了Kernel FP里,坚持所有函数(模板函数)不写类型,而让编译器进行类型推导:  阅读全文
posted @ 2008-10-08 00:10 陈梓瀚(vczh) 阅读(114) | 评论 (0)编辑 收藏
  2008年10月6日
     摘要: 经过上一次的成功试验,这次终于完成了剩余的表达式类型的类型推导。过程及结果如下:  阅读全文
posted @ 2008-10-06 22:47 陈梓瀚(vczh) 阅读(483) | 评论 (1)编辑 收藏
  2008年10月4日
     摘要: 我终于在实验阶段解决了这个困扰了我5个月(虽然实际上我花了3个星期)的问题。目标是这样的:你写程序,可以尽可能的不写一些类型信息,譬如函数参数和返回值的类型信息等。我的编译器帮你把它的类型算出来。

内详,有例子、方法和模型。  阅读全文
posted @ 2008-10-04 23:19 陈梓瀚(vczh) 阅读(906) | 评论 (3)编辑 收藏
  2008年10月2日
     摘要: 经过了5个小时的艰苦奋斗,符号表终于计算出来了,而且也做了一部分语法分析。接下来的工作是类型推导。今天的结果如下。  阅读全文
posted @ 2008-10-02 23:46 陈梓瀚(vczh) 阅读(922) | 评论 (1)编辑 收藏
     摘要: 输入:
pattern : 含有通配符*与?的字符串
string : 被匹配的字符串
输出:true与false代表匹配成功与失败

仅19行  阅读全文
posted @ 2008-10-02 01:41 陈梓瀚(vczh) 阅读(864) | 评论 (0)编辑 收藏
  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)编辑 收藏
仅列出标题  下一页