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

标签 c parsing data-structures

具有以下分层文本数据输入(实际上类似于 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/

相关文章:

c - fscanf 和 printf 停止工作

c - C语言实现linux下shell的输入输出

java - 如何从 SOAP 响应中获取单个元素的值? ( java )

python - Python 代码中的十六进制模式解析(使用位串)

具有唯一列表 ID 的链表的 C 实现

data-structures - 合并两个排序的链表——理解为什么它是 O(1) vs. O(N) 空间复杂度

c++ - 合并链表时输出错误

c - 如何退出子进程并从 execvp() 返回其状态?

parsing - 如何将多行字符串编码为 yaml 值

c++ - C/C++ getopt optstring 语法