为了账号安全,请及时绑定邮箱和手机立即绑定

方程(表达式)解析器具有优先权?

方程(表达式)解析器具有优先权?

波斯汪 2019-08-09 11:09:57
方程(表达式)解析器具有优先权?我使用简单的堆栈算法开发了一个方程解析器,它将处理二进制(+, - ,|,&,*,/等)运算符,一元(!)运算符和括号。但是,使用这种方法会让我拥有相同优先级的所有内容 - 无论操作符如何,都会从左到右进行评估,尽管可以使用括号强制执行优先级。所以现在“1 + 11 * 5”会返回60,而不是人们所期望的56。虽然这适用于当前项目,但我希望有一个通用例程,我可以用于以后的项目。编辑清晰:解析具有优先级的方程的好算法是什么?我对一些简单的实现感兴趣,并且理解我可以自己编写代码来避免使用可用代码的许可问题。语法:我不明白语法问题 - 我是手写的。这很简单,我认为不需要YACC或Bison。我只需要用诸如“2 + 3 *(42/13)”之类的方程计算字符串。语言:我在C中这样做,但我对算法感兴趣,而不是语言特定的解决方案。C足够低,如果需要,很容易转换成另一种语言。代码示例我发布了上面讨论的简单表达式解析器的测试代码。项目要求发生了变化,因此我从不需要优化性能或空间代码,因为它没有包含在项目中。它是原始的详细形式,应该易于理解。如果我在运算符优先级方面做了更多的事情,我可能会选择宏hack,因为它简单地匹配程序的其余部分。但是,如果我在一个真实的项目中使用它,我将寻求一个更紧凑/更快速的解析器。
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 559 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信