为了获取抽象源树的一阶导数(用于字符串数学表达式),应该组织哪些额外的数据结构?假设我们有一个字符串表达式树,它是使用boost::spirit
构建的。即每个节点都有适当的BOOST_FUSION_ADAPT_STRUCT
/ BOOST_FUSION_ADAPT_TPL_STRUCT
定义。那么,如何将额外生成的数据struct
- s存储到主AST的每个节点以及如何构造它们?
我认为,它们应该通过std::reference_wrapper< T const & >
或boost::optional< T const & >
构建到原始T
的字段(类型struct
) - 具有相同的布局。并且它们应该为源树的每个节点形成数组/向量/ deques(其中index等于n
- 源树的相应节点的导数)。每个树遍历“derivator-visitor”应push_back
为每个节点的每个数组的下一个表达式。为了建立源节点与其衍生物阵列的对应关系,我们可以对它们进行标记。