判定算术表达式合法性

发布于 2021-11-10 09:15:52 字数 257 浏览 881 评论 7

1.如何判定一个算术表达式的合法性?(支持基本的+-*/和括号)

    比如6- -9是合法的。1 + 2 * 这种就是不合法的。

    关键在于,一元操作符‘+’和‘-’于二元操作符‘+’和‘-’是一样的。

2.如何判定一个算术表达式的合法性?(支持基本的+-*/和括号以及大部分的常用数学函数)

    如sin(3+5)是合法的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

妖妓 2021-11-11 18:38:20

谢谢回复。我想进行的是中缀表达式的计算。当然,和RPN本质上是一样的。只是现在最大的两个问题,一个是单目运算符,一个是常用函数,如sin,cos,pow等。怎么做呢?有没有一些参考资料?

疑心病 2021-11-11 18:37:08

逆波兰式!有算法的!

奈何桥上唱咆哮 2021-11-11 11:18:14

java语言下也有很多的解决方案

有这样的需求肯定最终是要用语言实现的

java语言下推荐http://www.oschina.net/p/ikexpression

眼泪淡了忧伤 2021-11-11 09:24:29

Thank you:)

沦落红尘 2021-11-11 03:32:26

找本 编译原理的书看看(这个比较慢) , 找个解析C语言 语法的程序看看.

你的需求主要是 词法识别 加 句法识别. 当一个表达式不能完成句法识别时就是错误了.

句法识别的处理 类似于 楼上的做法.  你最好找个开源的解析语言语法的程序看看.

笑红尘 2021-11-11 02:19:42

不要依赖某个语言的高级功能.

用栈实现.一个符号栈,一个操作数栈.不断输入字符,是数字入操作数,是符号入符号栈,根据算数优先级运算......这是大思路,具体做起来你可以google一下.

时光清浅 2021-11-10 23:02:30

我不清楚你需要什么语言的,如果是python,就非常简单了,如果只需要+,-,*,/,而不需要数学函数的话,连math都不需要import

代码:

from math import *

a = raw_input('please input the expression: ')

try:
    eval(a)
    print 'OK'
except:
    print 'Invalid expression!'

测试:

>>> 
please input the expression: 1+2*
Invalid expression!
>>> 
please input the expression: sin(2+2*3)
OK
>>> 
please input the expression: 6--9
OK
>>> 
please input the expression: cos(3+2*(3+4))
OK
>>> 
please input the expression: pow(2,3)
OK
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文