具有以下层次输入的文本数据(JUNOS样,其实)我需要把它解析为一些合适的数据结构,我可以 执行查询,以获得该树的一些用户指定的分支,然后将其线性化(?)为某种映射,我可以使用它来让用户更改/插入/删除等,然后再次将其作为树写回输出文件(将原始数据存储在“版本”文件中以允许稍后的“历史”或“回滚”操作 - 如前所述的全套操作)。层次文本数据结构解析器建议需要
version 1.0;
description "Example data";
weights {
weight low {
value 1;
description Forgetable;
}
weight medium {
value 2;
description Important;
}
weight high {
value 3;
description Critical;
}
}
tags {
tag foo {
description "Some foo";
}
tag bar {
description "Some bar";
}
tag baz {
description "Some baz";
}
}
tag-sets {
tag-set foo\ bar {
tag [ foo bar ];
description Foo\ and\ bar;
}
tag-set "foo bar baz" {
tag-set "foo bar";
tag baz;
description "Foo, bar and baz";
}
}
问题:
1)什么数据结构套件的输入最好?你建议使用哪种C结构?
2)我不想用yacc/lex来解析它(不需要额外的步骤和复杂的协作工作,而不是每个人 - 甚至我 - 喜欢/知道要使用这些工具) - 最简单的解析方法是什么对于这种解析问题?
3)用什么方法你建议保持源代码节点的“类型”? 我目前看起来相当棘手(实际上我不知道如何去做)。例如,有一些“版本”类型的节点需要一些“单词”作为参数。还知道 节点“版本”仅作为层次的根分支的一部分存在。另一个例子可能是有几个“描述”节点以“单词”或“字符串 ”作为它们的参数。“描述”节点属于层次结构的每个节点。如 如何应对这类问题?
说明解释的目的:产生的效用将存储在文本数据文件非常相似 到我上面提供和用户将查询/修改/插入/数据删除对 维护一些例如“版本”的一些数据(例如待办事项列表或任何其他内容)作为例子,考虑它是一种简单的数据库而不是配置文件或类似的东西(对不起,我的英文),想法是提供一个CLI,b)命令-line工具,c)允许 用户编辑其编辑中的数据或者,如果不想使用)或b)...
至少有一些“一般”的建议是高度赞赏。
谢谢你的回答。这正是我想在这种情况下获得的答案。完善。 – mjf 2011-05-06 06:15:42
太好了。如果您觉得这可以被接受为足以显示为“已接受”的答案,请点击复选标记。 – jsherer 2011-05-06 17:02:50