随笔-341  评论-2670  文章-0  trackbacks-0
    为了生成编译器的代码,对语法树的数据结构进行定义是必不可少的一项工作。在这里我设计了一套用于生成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 on 2008-09-12 05:49 陈梓瀚(vczh) 阅读(1224) 评论(0)  编辑 收藏 引用 所属分类: 脚本技术

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理