公式解析方法求教

penglin1989 2010-06-17 10:11:50
输入任意公式,可进行运算解析,如[(1+2)*4-1]*(1+2)-4;((3-1)/*(2-1)+6)+8-(8-7);
...全文
2321 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dudufen 2011-06-22
  • 打赏
  • 举报
回复
真悲哀,编译原理不清楚
fanshow 2010-09-24
  • 打赏
  • 举报
回复
怎么看不了
nyq1999 2010-07-20
  • 打赏
  • 举报
回复
悲哀啊,看完帖子我忽然发现,大学时学过编译原理,只记得学过,具体学得什么都忘记了,啊啊啊啊
penglin1989 2010-06-18
  • 打赏
  • 举报
回复
不太明白编译原理,后缀表达式的解析
penglin1989 2010-06-17
  • 打赏
  • 举报
回复
谢谢各位的大力回复!感激不尽!
捷哥1999 2010-06-17
  • 打赏
  • 举报
回复
这是另外一个例子,可以理解它的实现思路,自己用c#实现!
Fast Polymorphic Math Parser


捷哥1999 2010-06-17
  • 打赏
  • 举报
回复
悔说话的哑巴 2010-06-17
  • 打赏
  • 举报
回复
还是用正则来弄
Alden 2010-06-17
  • 打赏
  • 举报
回复
这些内容编译原理中都有介绍,机械工业出版社有本《编译原理(第2版)——计算机科学丛书》,不错,你可以参考参考。
1.你首先需要扫描你的表达式,把每一个词素扫描出来,并且确定其类型,例如2 * (12 + 3),你会得到
2 操作数
* 操作符
( 左括号
12 操作数
+ 操作符
3 操作数
) 右括号
2. 中缀表达式的将扫描结果,翻译成后缀表达式。然后按照后缀表达式的解析进行处理即可。
penglin1989 2010-06-17
  • 打赏
  • 举报
回复
您写的有些深奥,懂语义而不懂其内在!最近是准备研究下底层语言,如有妙书,推荐下!3QU
Alden 2010-06-17
  • 打赏
  • 举报
回复
进行表达式解析即可。有两种方式:
1. 中缀表达式解析,你可以采用“算符优先法”。先计算括号,然后计算优先级高的操作符,最后从左到右进行计算。为实现解析,需要两个栈,一个用于保存操作符,一个用于保存操作数以及结果,当读到操作符时并不能立即作计算,需要与操作符栈顶元素进行优先级比较,根据结果然后采用不同的处理方式, 而且算法在时间复杂度以及空间复杂度都较高.
2. 后缀表达式解析,解析流程
从左到右读取中缀表达式,依次一个操作项
如果是操作数直接进入输出队列
读到左括号时总是将它压入栈中
读到右括号, 将最近栈顶的第一个左括号上面的操作符全部依次弹出, 送至输出队列后, 再丢弃左括号
当读到操作符时,将栈中所有优先级高于或等于当前操作符的操作符弹出,送到输出队列中
中缀表达式全部读完后,若栈中仍然有运算符,将其送到输出队列中

后缀表达式由于其自身的优点,表达式的解析是按照操作符的出现顺序进行的,比较简单,扫描一遍即可完成解析.但需要将中缀表达式转化为后缀表达式.
建议使用后缀表达式解析,较简单。
不过你可能需要先了解一下编译原理中的词法扫描方面的知识,因为你需要将你的表达式解析为最小的词素(Token)

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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