我知道有像 boost.spirit 或来自 http://jamesgregson.blogspot.de/2012/06/mathematical-expression-parser-in-c.html 的表达式解析器这样的库和许多其他人。
但是,我的表达式要在一个循环中计算很多次,每次都运行解析器似乎效率很低。
假设我的表达式字符串是 "exp(-0.5*(t-t_0)^2/(b^2))"
(简单高斯),
其中 t_0
和 b
是常量,只有 t
(=time) 在循环中变化。
我不想调用解析器数百万次,而是希望能够以某种方式将表达式保存到一个函数中,该函数接受一个参数(对于变量 t),然后对表达式求值。
您是否知道如何做到这一点,或者是否可以做到这一点?
最佳答案
你想实现的是完全可行的。例如,您可以从表达式构建一个 AST ( https://en.wikipedia.org/wiki/Abstract_syntax_tree),其中树的一些节点代表变量。
然后,对某些变量值的表达式求值对应于对该树的求值。
实际上,大多数解析器都会在内部生成这样的树,您可以找到一些库来生成满足您需要的 AST,或者您可能想自己编写代码(另请参见 https://en.wikipedia.org/wiki/Shunting-yard_algorithm)。 Here是生成 AST 的表达式解析器的一个简单示例(虽然在 Java 中)。
关于具有一个变量的数学表达式的 C 解析器并将其保存到函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42490415/