从表达式转换为图形 (DAG) 表示的算法

Algorithm to transform from an expression to a graph (DAG) representation

我正在阅读统一算法,高效的算法似乎将 DAG 作为输入,我的理解是表达式中共享的术语不是重复节点(如 AST)。

我确信有一些众所周知的算法可以将表达式从 "string representation" 或 AST 转换为 DAG。 这样的算法存在吗?我只是想避免重新发明轮子。

这很容易在构建 AST 时通过记忆来实现。

由于 AST 是在后序中构建的,因此在创建每个节点时,检查记忆缓存以查看是否已经存在等效节点。如果是这样,请使用预先存在的节点。否则使用新节点并将其添加到缓存中。

检查预先存在的节点的缓存时,该节点的子节点已经被记忆,因此您可以通过身份比较它们而不是重新检查它们的子图。