表达式的树分解问题。

flyingxfxf 2004-06-13 10:35:32
要求输入任意表达式,得到这个表达式的树分解。
比如输入:1+1*3
可以分解为:
+
1 *
1 3
先定义运算符有 (),+,-,*,/
数字只有为整数。
程序语言用C,
希望和大家讨论下。 也请高手赐教。。
有部分程序希望可以贴出来,要是分不够再加也可以。

...全文
155 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
programfanny 2004-06-15
  • 打赏
  • 举报
回复
not for mark
flyingxfxf 2004-06-14
  • 打赏
  • 举报
回复
在google上搜索到一篇文章:
上 http://www.cstc.net.cn/docs/docs.php?id=203
中 http://www.cstc.net.cn/docs/docs.php?id=208
下 http://www.cstc.net.cn/docs/docs.php?id=209
有兴趣的朋友可以看一下。
flyingxfxf 2004-06-14
  • 打赏
  • 举报
回复
可以提供部分代码么?
我只看了编译的书,没做过什么有关程序。
提供代码的朋友,我可以再开帖子给分。
mmmcd 2004-06-14
  • 打赏
  • 举报
回复
去年编译原理作业的一个子集
LeeMaRS 2004-06-13
  • 打赏
  • 举报
回复
前面有点错误,改成这样

(a+b)-(c-d)-(e/f)
2 3
LeeMaRS 2004-06-13
  • 打赏
  • 举报
回复
每次找出优先级最低,最靠右的运算符,然后递归分解。
举个例子,(a+b)-(c-d)-(e/f)
1 2 3

先找出3,分解成
-
(a+b)-(c-d) (e/f)
1

左边找出1,再分解

-
(a+b) (c-d)
1 2

左边去括号,找出1,再分解

+
a b

右边去括号,找出2,再分解

-
c d

将(e/f)去括号,分解

/
e f

得到的就是
-
- /
+ - e f
a b c d

整个过程是一个递归处理的过程。
HashCodeWithJava 2004-06-13
  • 打赏
  • 举报
回复
有两种比较好的办法.
1.堆栈,把它转换为后缀表达式.不过涉及到堆栈和运算符号的优先级别的处理,我认为写起来还麻烦一些.在清华大学出的数据结构教材上有详细的讲解和源代码.

2.编译原理的语法分析办法.
由于表达式十分简单,那么直接可以用递归下降的算法实现,只需要把因式分解成几个处理函数就可以了,用C语言函数本身的递归就可以实现,代码写出来相对清晰,简单.不过唯一的不好就是可能理解有点麻烦(对于没有学过编译原理的人来说).在<<编译原理及实践>>书上有详细的讲解和源代码.

源代码我帮你找找,两个我都有.找到以后再贴给你.
flyingxfxf 2004-06-13
  • 打赏
  • 举报
回复
谢谢两为仁兄的帮助, 看来我学的还不太扎实啊,看来要好好的复习下了。

33,007

社区成员

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

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