如何判断一个表达式是否合法?

nanfang 2003-03-13 11:30:24
如:a=2+sin(5*(7-3)+4)/2,首先要判断这个表达式是否合法?
即有以下需求:
1、运算符可有以下几种:
String Oprate[]={"+","-","*","/",">","<","=","<>","sum","arg","max","min","and","or"};
2、要考虑括号
3、在表达式输入完毕后调用检验程序进行检验,如果合法,则允许下一步,否则清除所有的表达式,要求重新输入。
4、把表达式分解后存储到数据库,以后能够方便的利用该表达式进行计算。
即把所有的数字或者部份数字的换成未知数的形式,方便以后计算。
...全文
1726 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
albert_qhd 2003-05-28
  • 打赏
  • 举报
回复
判断是否合法的问题:
先列出所有的合法性规则,
1、左右括号必须匹配(可用堆栈)
2、操作符不能跟着操作符
3、第一个字符不能是操作符(-是负号可以)
...等等
然后都实现了不就行了?
zzwu 2003-05-28
  • 打赏
  • 举报
回复
这个工作我用pascasl作过,确实不难,但也化去不少时间和精力的.
eion 2003-05-28
  • 打赏
  • 举报
回复
考虑特殊情况

-1×(-1 +9)吗?
mmmcd 2003-05-28
  • 打赏
  • 举报
回复
最近做编译原理上机作业,你的问题是我程序的一个子集(用递归下降分析法)。

操作符跟你的(">","<","<>","sum","arg","max","min","and","or")不太一样

要程序联系impcimpc@163.net
BlueSky2008 2003-05-27
  • 打赏
  • 举报
回复
1,2:要编写一个简单的表达式解析器,解析器每一步都只接受特定的输入,如果不是特定范围内的输入,都表明表达式有错。
3:略
4:用递归递降的方法,分析表达式时,可以生成一个操作符栈和一个参数栈。将操作符栈保存即可。
seeker2003 2003-05-26
  • 打赏
  • 举报
回复
对于这个问题,你需要做两个工作。
1)首先编写一个简单的表达式计算解析器
实际上就是一个简单的计算器,这个很容易实现,在我目前编写的书中就有介绍
不过得过3-4个月才能出版呢。
2)第二个问题的本质是允许用户子自定义函数,例如
myfun=a*sin(b)*cos(c)
你需要存储的是用户定义的代码,执行的时候
需要进行变量替换(这种方法是高级语言解释程序常用的方法,编译器并不是这样的方法)
例如,用1,2,3替换a,b,c
产生表达式 1*sin(2)*cos(3)
用1)中编写的计算器程序进行计算,得出最终的计算结果。
nanfang 2003-03-14
  • 打赏
  • 举报
回复
可能对第四个需求说的不是很明白!
就是说:如果我检测到该公式合法.则我会允许用户把公式存储到数据库.以后用于相同公式的计算.如a=2+sin(5*(7-3)+4)/2这样一个公式合法,则我会把它存储刊数据库,然后把数字全部换成未知数(变量).以后只要传入变量的值就可以计算得到结果.
楼上的两位大哥如果能够提供一部份代码,小弟将不胜感激.
Happy197212 2003-03-13
  • 打赏
  • 举报
回复
我以前做过, 还是方程组运算。我对分没兴趣。
建议用二叉树,不难的。
zhf_karen 2003-03-13
  • 打赏
  • 举报
回复
如果是我,是也许会尝试在软件中包含一个Javascript引擎,用他来进行检测式样是否合理,并通过他来进行计算.

第四个需求我不太明白.所以没有仔细考虑如何实现.前三个需求都能够完成.

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧