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