含有一元操作符的中缀表达式,有办法转化为后缀表达式么?

I_code 2011-11-16 06:51:17
昨天考虑将一个简单的正则表达式转化为后缀形式的时候遇到了这个难题。
比如(a|b)*(c|d)*
在正则表达式中,*表示字表达式出现0次或多次,是一元操作符,并且优先级高过|。所以根据优先级,应该先算a|b 再算c|d,之后接着算两个*。
我首先想到的后缀形式为ab|cd|**.(.表示连结),但是这实际上是(a|b)((c|d)*)*的后缀表达式。
如果写成ab|*cd|*.,则破坏了括号优先计算的规则。

真心求教下各位。
...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cfvmario 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 i_code 的回复:]

引用 1 楼 cfvmario 的回复:

ab|*cd|*没破坏括号优先规则吧

在后缀表达式中,计算顺序不就是运算符号出现的顺序么?所以计算顺序是 | * | *。 如果括号优先不是先算 || 再算 * * 么?
[/Quote]
任何算符优先都是针对运算对象来说的。。
第二个|和第一个*从运算对象来说是没有关系的,为什么一定要第二个|比第一个*先算,没这个必要
就好比(a+b)*(c+d)+(e+f)*g
我先算a+b,再算c+d,再算(a+b)*(c+d)不行么?你非要说括号优先,算完c+d必须先算e+f,这肯定没必要。
cnmhx 2011-11-17
  • 打赏
  • 举报
回复
这个还能有变化?有什么意义?
I_code 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cfvmario 的回复:]

ab|*cd|*没破坏括号优先规则吧
[/Quote]
在后缀表达式中,计算顺序不就是运算符号出现的顺序么?所以计算顺序是 | * | *。 如果括号优先不是先算 || 再算 * * 么?
cfvmario 2011-11-17
  • 打赏
  • 举报
回复
ab|*cd|*没破坏括号优先规则吧

33,007

社区成员

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

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