你能给我一些关于如何在C中创建一个简单的数学表达式解析器的想法吗?
用户在字符串中输入数学函数,并从我想在C中创建函数的字符串中输入。
例如。 x + sin(2*x)
- > return x + sin(2x);
提前致谢。
答案 0 :(得分:7)
您可以基于“Shunting-Yard算法”http://en.wikipedia.org/wiki/Shunting-yard_algorithm来解析表达式。您需要扩展以处理函数调用,例如sin,cos等...
答案 1 :(得分:3)
这根本不是一件简单的事,从表面上看,这是一件很难的事。您需要一个完整的语法分析器,结合预定义的常量/函数(sin
,log
,pi
等。
如果您以前没有广泛的CI经验会不赞成这样做,但如果您真的想这样做,请查看recursive descent parsing,这可以说是最简单的方法(不会给用户带来负担,像反向抛光表示法。)
最后但并非最不重要的是,您说要从用户生成的输入中创建 C函数。这几乎总是错误的 - 从用户输入生成代码,而最简单的方法是预处理以创建可以有效执行的中间表示。
答案 2 :(得分:1)
一种方法是对表达式使用反向抛光表示法,为操作数使用堆栈。 一些快速伪代码:
if element is operand
push in stack
else if element is operation
pop last 2 elements
perform operation
push result in stack
重复直到表达结束。最终结果是堆栈中唯一的元素。
答案 3 :(得分:0)
编写表达式解析器和求值程序是讨论解析器编写技术时常用的示例之一。 例如,您可以查看flex / bison或lex / yacc的文档。这将有构建解析器/表达式求值程序的示例。