判定算术表达式合法性

ChenQi 发布于 2011/08/03 23:58
阅读 1K+
收藏 0
1.如何判定一个算术表达式的合法性?(支持基本的+-*/和括号)
    比如6- -9是合法的。1 + 2 * 这种就是不合法的。
    关键在于,一元操作符‘+’和‘-’于二元操作符‘+’和‘-’是一样的。

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

以下是问题补充:

@ChenQi:C/C++ (2011/08/04 08:57)
加载中
0
骠骑将军
骠骑将军

我不清楚你需要什么语言的,如果是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
ChenQi
ChenQi
Geilivible!
0
周翼翼
周翼翼

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

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

0
Lunar_Lin
Lunar_Lin

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

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

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

ChenQi
ChenQi
Thank you:)
0
恺哥
恺哥

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

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

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

0
滩头沙
滩头沙

逆波兰式!有算法的!

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