随笔-341  评论-2670  文章-0  trackbacks-0
 
     摘要: 国庆7天容易无聊,于是我打算实现一下以前失败过的一种语言的特性:类型推导。于是顺便做一做惰性计算吧。于是我尝试设计了一门特性尽可能少的语言,并且强制让一个函数的返回值仅跟输入的参数有关。虽然这个特性不适合用来做IO,但是是有办法解决的,而且不需要修改语言就可以直接支持。

这门语言的定义及其简单,需要预先定义的部分也是很少的,于是我尝试实现了if、逻辑运算符以及itoa和atoi两个函数  阅读全文
posted @ 2008-09-28 07:14 陈梓瀚(vczh) 阅读(2140) | 评论 (4)编辑 收藏
     摘要: 经过三个小时的努力,一个供调试用的模拟器终于做出来了。对于一份语法说明来讲,我们需要提供调试器,一直到调试完了才生成代码,这样比较容易找到问题。同时为了验证自己的那个设计,于是做了一个调试器出来。这个调试器使用了这篇文章里的数据结构文件以及文法文件,以及使用了这篇文章里开发的一个树到图的转换程序,成功得到结果!  阅读全文
posted @ 2008-09-14 07:22 陈梓瀚(vczh) 阅读(1830) | 评论 (1)编辑 收藏
     摘要: 除了错误处理文件还没有定义好以外,现在语法定义跟语法树的数据结构定义以及分析器都完成了!有了这两个文件,我的工具就可以替你生成一个函数和一堆类,让你使用这个函数就可以将一份代码转换为一颗语法树啦。娃哈哈……

现在让我们来看一个例子  阅读全文
posted @ 2008-09-14 00:53 陈梓瀚(vczh) 阅读(1422) | 评论 (3)编辑 收藏
    为了生成编译器的代码,对语法树的数据结构进行定义是必不可少的一项工作。在这里我设计了一套用于生成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 05:49 陈梓瀚(vczh) 阅读(1224) | 评论 (0)编辑 收藏
     摘要: 『啊,葱爆羊肉真是香啊。』一边回忆着这个令人感动的美食,一边心不在焉地写了个程序。这个小程序实现了一个很简单的功能,将一棵树转换成bmp图片并自动排版。  阅读全文
posted @ 2008-09-07 04:18 陈梓瀚(vczh) 阅读(2858) | 评论 (3)编辑 收藏
     摘要: 我们知道Yacc和Bison都是产生C++的代码作为编译器的前端的。但是有时候我们需要动态地产生一个编译器前端,极端一点讲,譬如“文法调试器”。调试器总不能动态生成.y文件,让yacc编译,让gcc再度编译,然后execute,最后将程序的输出结果读进来。这样就太麻烦了,于是我们需要重新写一个生成编译器前端的程序。  阅读全文
posted @ 2008-09-06 02:45 陈梓瀚(vczh) 阅读(2290) | 评论 (3)编辑 收藏
     摘要: 现在的OOP都提倡将操作与数据结构结合在一起。为什么这里要提出将算法与数据结构分开呢?第一个原因是一个算法可能是用来处理一组数据结构的。第二个原因是算法并不属于操作。我们可以借鉴访问者模式来实现这个分离,但是这里有一个特别之处:我们要将访问者模式带给我们的那个接口实现得让我们用起来很漂亮。  阅读全文
posted @ 2008-09-02 04:43 陈梓瀚(vczh) 阅读(2600) | 评论 (10)编辑 收藏
     摘要: 大概一年前曾经用C++开发了一个可以在C++中直接写上下文无关文法的上下文无关文法分析器。这玩意儿叫Syngram。Syngram曾经做了两次,第一次做成了用一个类去读文法文件,后来不爽就改成了直接在C++里面写的。我弄了一个叫Term的类,重载了一些操作符,于是你可以搞分支、可选、错误处理等复杂的文法推导式。现在打算做一个周边工具。  阅读全文
posted @ 2008-08-27 05:11 陈梓瀚(vczh) 阅读(1853) | 评论 (5)编辑 收藏
     摘要: GUI Preview Demo完成!代码结构、下载以及注意事项内详。  阅读全文
posted @ 2008-08-25 04:17 陈梓瀚(vczh) 阅读(20269) | 评论 (18)编辑 收藏
     摘要: 为了展示Vczh Library++2.0中GUI Framework的强大威力,我制作了一个Regular Expression Debugger。这个软件可以用来调试正则表达式,主要用于检查正则表达式语法、观察表达式的语法树以及各种状态机、还有匹配测试等。这个Demo已经接近完成。GUI Framework和Demo的代码将在Demo彻底完成的时候放上来。下面贴图和创建界面的代码:  阅读全文
posted @ 2008-08-23 23:18 陈梓瀚(vczh) 阅读(2089) | 评论 (6)编辑 收藏
仅列出标题
共35页: First 24 25 26 27 28 29 30 31 32 Last