QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 687|回复: 1

麻烦转成c语言

[复制链接]
发表于 2004-10-11 16:07:44 | 显示全部楼层 |阅读模式
(3) 分解temp2文件
根据前面所说的named.conf文件结构,我们定义这样的一个结构体
struct STATEMENT{
    char* statement;
    char* statement_name;
    char* statement_class;
    GList * options_list;    //{}里内容
    struct STATEMENT * parent;
}
然后定义一个关于STATEMENT的链表,该GList *指向的对象的data域是一个STATEMENT对象。
所以可以实际上写成这样一个STATEMENT对象,它的第一层指向的是named.conf,statement是“named.conf”,statement_name和statement_class是空,其options_list指向的是一串STATEMENT对象,这些对象位于第二层;第二层的STATEMENT对象的statement分别是acl、options、zone、controls、key、server等......依次类推,最后一层STATEMENT对象的options_list指向NULL。
这样由STATEMENT对象构成一个树状结构。
其中下一级的statement是根据上一级的statement来决定,这些在前面的声明部分有说明。
针对STATEMENT对象,在界面上的对应的是treeview构件。另外有三个文本框,分别表示statement、statement和statement_class;

所以本程序读入使用一个递归算法:
a 开始的时候初始化一个STATEMENT对象,这个对象的statement是named.conf(这个值可以任意定义,但要特殊一点)。
b 判断文件有否结束,如果没结束,转c;如果结束,转f
c 依次读文件,如果读到的是单词,则,读入的第一个单词是statement,第二个单词是statement_name(有双引号的),第三个单词是statement_class,允许后两个单词是空,直到读到";、{”,转到d;如果读到的不是单词,而是“}”,则转到e
d 新建一个STATEMENT对象。。如果后面读到的字符是“;”,则表示结束,添加新的STATEMENT对象到当前STATEMENT对象的options_list尾部>转到b;如果读到“{”,则指向新建的STATEMENT的options_list(下移一级),转到b;
e 如果接着读到“;”,则使用当前STATEMENT的parent的options_list(上移一级),转到b;再接着读到的是其他字符,转g。
f temp2加载结束
g 错误处理
发表于 2004-10-11 19:21:59 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 09:31 , Processed in 0.065655 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表