具有一个变量的数学表达式的 C 解析器并将其保存到函数中

标签 c parsing

我知道有像 boost.spirit 或来自 http://jamesgregson.blogspot.de/2012/06/mathematical-expression-parser-in-c.html 的表达式解析器这样的库和许多其他人。

但是,我的表达式要在一个循环中计算很多次,每次都运行解析器似乎效率很低。

假设我的表达式字符串是 "exp(-0.5*(t-t_0)^2/(b^2))"(简单高斯), 其中 t_0b 是常量,只有 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/

相关文章:

c - 此函数不能正确处理以非 NULL 结尾的字符串

ios - 将 NSString 转换为整数

c++ - 使用 boostspirit 解析 html 转义序列

c - 我是否以某种方式更改了 ctype.h?

c - 如何在C中从上到下写入文件

python - 在Python中浏览/解析html页面

json - 未处理的异常 : type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'

python - 解析文本数据并插入MySQL

c - 不透明类型的精确定义以及它们的定义到底对用户隐藏在哪里以及如何查看它们?

c - 关于 C 语言中指针的相同输出