LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1453|回复: 3

[编译原理]请问整理一次表达式的算法能否实现

[复制链接]
发表于 2005-12-19 08:51:24 | 显示全部楼层 |阅读模式
形如dy+b(a(x+y)-cz)的一次表达式能否通过算法整理成简单的形如:Ax+By+Cz的形式。

其中x,y,z.....是变量,a,b,c,d......A,B,C......是常量。元数不固定。整理前后都是字符串形式。
发表于 2005-12-19 09:22:24 | 显示全部楼层
哎呀,不懂啊.小弟没有上过学.不懂这些.惭愧
回复 支持 反对

使用道具 举报

发表于 2005-12-19 10:04:11 | 显示全部楼层
可以的。如果你熟悉语法制导翻译,并利用yacc的话实现起来非常简单。
比如只含加法和乘法以及括号的文法表示如下,为expression 设立 综合属性s和继承属性i,用来保存系数值。每解析一次加法、乘法、括号运算,就进行属性计算,并把表达式分解为 item + item + item ... 的形式,边分解边把项插到前面已经排序好的字符串中。如果不用yacc辅助,可以采用手工栈操作的方式。

start -> expression
expression           --> expression + mul_expression | mul_expression (只计算s,但要用到i)
mul_expression   --> mul_expression * item | item (只计算s,但要用到i)
item                    --> const var | const * ( expression ) (要计算s, i, 也要用s )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-23 09:55:29 | 显示全部楼层
多谢阿,yacc之类的东东还没玩过,等我试试。

手工栈操作好像很麻烦的,还没画明白
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表