日期:2014-05-17  浏览次数:20936 次

公式验证
参与运算的变量为a,b,c,d,ac,ab 
公式,如:(a+b)*c+(d*10/34)+ac*(ab+10)
运算符号:( ) + - * /

公式符合数学的计算表达式, 以下情况都为公式错误:
a+b(d)
b*)d+c(+e
a+b*
+d*a
a+bc

如何判断公式是否正确?
表达式?验证

------解决方案--------------------
这样判断如何-》
1。构建类似js的eval函数
http://blog.sina.com.cn/s/blog_5eb23ca50100plu9.html

2.try catch这个函数
如果有错就是错误的
------解决方案--------------------
1.首先验证变量  先用运算符号分割,如果有非指定变量 则错误。
2.验证第一个和最后一个字符,不能是  + - * /
3.验证括号"("的左边必须是运算符或空 ,右边必须是变量,“)”则反之
然后

就没有然后了  代码自己写吧
------解决方案--------------------
参考BNF范式
http://baike.baidu.com/view/807721.htm?fromId=1282439

也许你看完上面的连接会问我,这和你的问题有啥关系?
我说再接着看Yacc ,lax, Antlr这些已经成熟的解法

如果非要搞明白,自己动手玩,建议去codeproject搜索“math parser”,"math expression"看看老外们的讲解
或去codeplex 搜“math parser”这类玩意找个开源的项目看看

不过建议还是去codeproject,老外们讲的还是比较细致滴,codeplex这类开源库不少,不过我估计你也木时间看
------解决方案--------------------
先做词法分析,再做语法分析。
------解决方案--------------------
google nfa dfa 转化