gpt4 book ai didi

c - 需要分层文本数据结构解析器建议

转载 作者:行者123 更新时间:2023-12-02 02:26:19 25 4
gpt4 key购买 nike

具有以下分层文本数据输入(实际上类似于 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) 你建议用什么方法来维护源代码中节点的“类型”?这似乎很棘手我现在(事实上我还不知道该怎么做)。例如,有一些类型为“version”的节点将一些“word”作为参数。据了解,节点“版本”仅作为层次结构根分支的一部分存在。另一个例子可能是有几个“描述”节点取一个“词”或一个“字符串”作为他们的论点。 “描述”节点属于层次结构的每个节点。等等。如何应对此类问题?

注意解释目的:生成的实用程序将“版本”存储在文本数据文件中的一些数据非常相似对于我上面提供的示例,用户将查询/更改/插入/删除数据到维护某种特定信息(例如,待办事项列表或其他任何信息)。将其视为一种简单的数据库,而不是配置文件或类似的东西(对不起我的英语)。这个想法是提供 a) CLI,b) 命令行工具,c) 允许用户在他们的编辑器中编辑数据,如果不想使用 a) 或 b)...

至少要高度赞赏一些“一般”建议。

最佳答案

我会使用递归下降解析器结合某种哈希表或映射来存储数据。从外观上看,它与 JSON 非常相似,但又不完全相同。不过似乎支持字符串、数字、列表和字典。一个简单的“对象”类型类就可以完成存储它的技巧(类似于 javascript)。

为了管理数据结构的历史,您可以像 OMeta 世界一样实现它(参见:http://www.vpri.org/pdf/rn2008001_worlds.pdf)。它利用原型(prototype)对象模型来管理范围和历史。

关于c - 需要分层文本数据结构解析器建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5824902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com