作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 Muchnick 的“高级编译器设计与实现”,其中图 12.6 列出了 20 条转换规则,如果按顺序应用,则执行常量折叠和重新关联以将常量移动到一起。规则(不考虑分配规则)是(我的语法:c
是文字,t
术语,带有空格的运算符在源代码中,而没有空格的运算符表示涉及文字的编译时计算):
R1:c1 + c2 = c1+c2
R3:c1 * c2 = c1*c2
R5:c1 - c2 = c1-c2
R2:t + c = c + t
R4:t * c = c * t
R6:t - c = (-c) + t
R7:t1 + (t2 + t3) = (t1 + t2) + t3
R8:t1 * (t2 * t3) = (t1 * t2) * t3
R9: (c1 + t) + c2 = (c1+c2) + t
R10: (c1 * t) * c2 = (c1*c2) * t
他写道“按照给定的顺序递归地应用树转换规则 [..]”,但我看不出这是如何实现的。给定 ((c1 + t1) + t2) + c2
,我必须如何应用规则才能到达 (c1+c2 + t1) + t2
或类似的东西?
(我可以想出一套不同的规则,但我想了解书中的内容,以防我读错了)。
最佳答案
我没有这本书,但我会试一试。开始表达:
((c1 + t1) + t2) + c2
c2 + ((c1 + t1) + t2)
(c2 + (c1 + t1)) + t2
(c2 + c1) + t1
c2+c1
关于optimization - 根据穆奇尼克的重新关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23827531/
我是一名优秀的程序员,十分优秀!