在面向对象的语言中,使用简单的层次结构(复合模式)实现AST(抽象语法树)并通过访问者遍历它们是相当普遍的。
在函数式编程语言中,使用变量/求和类型,然后使用模式匹配,是正确的方法。
C ++同时具有继承和Boost.Variants。我已经使用继承编写了几个AST层次结构,但我想从那些使用变体方法的人那里获得一些反馈。我想知道哪个是最好的&#34;在性能(时间和空间)方面,还有可维护性(易于创建树和遍历它们)。< / p>
我对实现hash-consing(保留每个公共子树的单个副本)的经验特别感兴趣,可能使用Boost.Flyweight。
谢谢!