gpt4 book ai didi

c++ - 是否有用于数据翻译/转换的好的模式/习语?

转载 作者:搜寻专家 更新时间:2023-10-31 02:01:00 25 4
gpt4 key购买 nike

对于这个问题的通用标题,我很抱歉,但我希望我能够不那么笼统地表达它。 :-}

我想编写一个软件(在本例中使用 C++),将输入标记流转换为输出标记流。只有五个输入标记(我们称它们为 0、1、2、3、4),每个标记都可以有几个不同的属性(例如,可能有一个 4.x 属性或 0.foo)。还有一些输出标记,大约十个,我们称它们为 (Out0..Out9),每个标记也有一些属性。

现在,我们一直致力于将序列从输入标记映射到可能的输出标记,如下所示:

01 -> Out0
34 -> Out1
0101 -> Out3

...所以不同的输入标记序列映射到单个输出标记。

在我的场景中,输入标记集是固定的,但输出标记集不是——我们可能决定引入新的“产品”。我的问题是:

有人知道在这种情况下是否有好的模式和/或习语可以帮助吗?

现在我有一组“Compressor”对象,每个对象都可以吃掉输入 token 并最终产生输出 token 。问题是一些输入 token 冲突,请考虑上述情况中的“Out0”和“Out3”。输入“0101”应产生 Out3 但不会产生 Out0。但是,输入 '0104 应该产生 Out0,然后将 0 和 4 留在队列中。

我想知道是否存在来自数据压缩或其他领域的可能有益的模式。

这种将低级标记的输入“减少”为高级标记并处理可能的冲突的工作在解析器编写者中很常见,不是吗?那里有有用的模式吗?

更新:

更多信息:

  1. 在我的具体案例中,输入标记是 C 结构,输出标记是 C++ 对象。我无法控制 token 的输入流,但我可以将它们排队,然后在有利的情况下修改队列。

  2. 我通过先尝试匹配 Out3 然后再匹配 Out0 来解决冲突(例如 Out3 (0101) 与 Out0 (01)),但这有点难看。可能的产生式在一个列表中,我只是尝试将它们一个接一个地应用于输入流

  3. 用户可以扩展可能产生式的列表,所以我无法生成一个巨大的 DAG,然后使用一个状态机来实现它来处理每个可能的转换。当然,这意味着用户可以添加碰撞,但事实就是如此。

最佳答案

您可以定义一个图,其中每个节点都包含一个输入标记和一个关联的输出。每个节点的链接描述了可能的下一个标记。因此,图中的一条路径描述了一个可能的转换规则。

要转换数据,从与第一个输入标记对应的节点开始,并尝试在可能的最长路径上导航图形,将下一个输入标记与链接到当前节点的节点相匹配。当没有链接节点与下一个输入节点匹配时,将与当前节点关联的输出作为结果。

关于c++ - 是否有用于数据翻译/转换的好的模式/习语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1232951/

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