我使用一个简单的堆栈算法开发了一个方程解析器,它可以处理二进制(+ ,-,| ,& ,* ,/等)运算符 unary (!)运算符和括号。
然而,使用这个方法,所有的优先级都是相同的——它是从左到右计算的,不管运算符是什么,尽管优先级可以使用括号来强制执行。
因此,现在“1 + 11 * 5”返回60,而不是人们可能预期的56。
虽然这适合于当前的项目,但我希望有一个通用的例程,可以用于以后的项目。
为清晰起见:
What is a good algorithm for parsing equations with precedence?
我对一些简单实现的东西感兴趣,并且理解我可以自己编写代码来避免可用代码的许可问题。
语法:
I don't understand the grammar question - I've written this by hand. It's simple enough that I don't see the need for YACC or Bison. I merely need to calculate strings with equations such as "2+3 * (42/13)".
Language:
我用的是 C 语言,但我感兴趣的是算法,而不是特定语言的解决方案。C 语言的级别很低,如果需要的话可以很容易地转换成另一种语言。
代码示例
我张贴的 test code for the simple expression parser我上面谈到的。项目需求发生了变化,所以我从来不需要为性能或空间优化代码,因为它没有合并到项目中。它是原来冗长的形式,应该很容易理解。如果我进一步使用操作符优先级,我可能会选择 宏黑客,因为它简单地匹配程序的其余部分。但是,如果我曾经在一个真正的项目中使用过它,我将寻求一个更紧凑/更快速的解析器。
相关问题
亚当