我正在使用 Boost Spirit 在某些软件中实现功能,允许用户输入将重复应用于输入流的数学方程。输入流值表示为符号boost::spirit::qi::symbols
,用户可以在其等式中引用这些符号。(例如out1 = 3 * in1 + in2
)
解析和编译用户方程对性能不敏感,但计算其输出值是因为它构成时间关键管道的一部分。
在文档中使用 Spirit 的标准方式是在解析输入时计算输入的输出(属性)。但是,在每次计算之间,只有符号( 、 等)的属性值out1
会in1
发生变化,感觉可能有一种更有效的方法来实现这一点,也许是通过缓存表达式的抽象语法树并重复它。
给定一组新的符号值,重新计算这个(固定)方程的值的最有效方法是什么?