符号计算

时间:2010-12-28 03:38:59

标签: c++ math

有没有人知道在C ++中进行代数计算的好方法/库?

我有一个用c ++开发的应用程序需要进行代数计算。现在我构建了一个C ++解析器,它接受像“5 +(2 - MYFUNC(3))”这样的字符串形式的表达式,它们被标记化为结构体,然后使用Shunting Yard算法转换成后缀表示法并进行评估。

这些表达式中的MYFUNC是我自己定义的函数,可以执行一些复杂的计算。

这是一个高性能应用程序,表达式还包含动态替换为值的变量,并重新评估表达式

e.g。 var1 +(2 - MYFUNC(var2)) - >在运行过程中将var1和var2替换为某些值并重新评估

我正在使用Linux并且到目前为止找到Giac library但不确定它是否良好,任何反馈都会受到欢迎。

人们通常如何解决这个问题?这种情况下的主要语言是C ++。

3 个答案:

答案 0 :(得分:2)

了解Bison和Flex Parser。这里的基本思想是语法文件将被编写并转换为C代码,可以集成到您的应用程序中。任何关于Flex和Bison的书(http://www.amazon.com/Flex-Bison-Text-Processing-Tools/dp/0596155972)都足以满足初读。

这可能对你有帮助。!

答案 1 :(得分:1)

处理此问题的最快方法可能是在运行时为已定义的函数生成已编译的优化函数,并根据您可能具有的不同变量值对其进行评估。您可以使用LLVM执行此操作,可能还有其他工具。

答案 2 :(得分:0)

我会为该语言编写一个递归下降解析器,因为语法看起来不是很复杂。解析可能比说Flex / Bison的解析要慢一点,但我猜测解析在项目中的计算成本最低。