从字符串评估数学函数

你能给我一些关于如何在C中创建一个简单的数学表达式解析器的想法吗?

用户在字符串中输入数学函数,并从我想要在C中创建函数的字符串中输入数据函数。 x + sin(2*x)

– > return x + sin(2x);

提前致谢。

您可以基于“Shunting-Yard算法” http://en.wikipedia.org/wiki/Shunting-yard_algorithm来解析表达式。 你需要扩展来处理函数调用,如sin,cos等…

这根本不是一件简单的事,从表面上看,这是一件很难的事。 您需要一个完整的语法分析器,结合预定义的常量/函数( sinlogpi等)。

如果你以前没有广泛的CI经验会不赞成这样做,但如果你真的想这样做,请看看递归下降解析 ,这可以说是最容易实现的方法(不会给用户带来负担,比如反向抛光表示法) 。

最后但并非最不重要的是,您说要从用户生成的输入中创建C函数 。 这几乎总是错误的 – 从用户输入生成代码,而最简单的方法是预处理以创建可以有效执行的中间表示。

一种方法是对表达式使用反向抛光表示法,为操作数使用堆栈。 一些快速伪代码:

 if element is operand push in stack else if element is operation pop last 2 elements perform operation push result in stack 

重复直到表达结束。 最终结果是堆栈中唯一的元素。

编写表达式解析器和求值程序是讨论解析器编写技术时常用的示例之一。 例如,您可以查看flex / bison或lex / yacc的文档。 这将有构建解析器/表达式求值程序的示例。