如何存储树聚合

时间:2017-10-09 04:24:09

标签: haskell

使用megaparsec解析源代码后,我有一个抽象的语法树。在第二阶段,我计算每个子树的聚合,例如它包含的变量列表,通过聚合叶值,我想将它们存储在某个地方,所以我不必在以后重新计算它们。我该怎么做?

我考虑过这些选择。

  • 向每个节点添加聚合值。我需要修改每个节点的数据类型。
  • 将每个节点数据类型包装在通用聚合数据类型中。
  • 使用泛型节点数据类型和聚合,但我担心编译错误消息不会那么清楚。
  • 构建一个“影子树”,其拓扑结构与AST相同,但包含聚合。

我应该选择什么?

1 个答案:

答案 0 :(得分:0)

Trees that Grow方法(由@danidiaz建议)看起来像我正在寻找的。