0

标记的 AST 节点可以在 X3 中使用annotation_base::on_success.

我可以获取他们的地址(并存储以及其他信息,例如相应的输入范围迭代器对)并parse在使用它们时依赖其不变性(对于所有人,但可能除了顶级 AST 节点,它可以在之后移动/复制)之后?

我可以假设 AST 节点已经分配了一个状态,返回时不会改变parse

AST 是聚合和 STL 容器的组合:递归树。

4

1 回答 1

1

当然,所有中间 AST 节点也可以移动/复制。

例如,如果您意识到x_rule解析成X然后解析x_rule % ','. 向量(或其他容器)将移动/复制Xin,并且所有其他元素可能由于重新分配而移动。

如果目标是在树外附加一些数据,而不会使 AST 节点增长太多,您可以考虑单独存储信息并引用它(通过 id、指针或某种引用)。

在这种情况下,您可能只需要“垃圾收集”您单独存储的数据(并在大量回溯的情况下防止失控积累)。使用 ashared_ptr可以让您更方便地获得更多开销。

于 2016-01-24T03:47:08.027 回答