![](https://csdnimg.cn/release/download_crawler_static/88749027/bg6.jpg)
K.T. Kalleberg
,
E.Visser/Electronic Notes in Theoretical Computer Science 147
(
2006
)
5
⇒
图二. 显示常量传播策略的示例。
有 一 个 对 应 的 同 余 算 子 定 义
了一个具有相同名字和数组的策略
,
C
(
s1
,
.
,
s
n
)
。
当
应用于
项
C
(
t
1
,
.
,
tn
)
的
策略
将
s1
应
用
于
t1
,
s2
应用于
t2
,
然后
继续
,
从而产生
项C(
t
,
J
,. ,
t
J
)
,提供了所有成功的策略。
如果
我
失败
了
1
N
策略
C
。图
1
中的策 略
prop-const-if
中的
If
(
prop-const
,
id
,
id)是If的同余的示例。
2.1.7
模块化
模块是
RIGGO
程序结构的粗元素。一个模块是一个以声明模块
名
开始的
文件。下面是
章节
,每个章节都有一个
章节标题
,其中的
签名,规则
和
策略
与我们有关。构造函数声明必须出现
在签名
节的内部规则和策
略可以在
规则
和
策略
部分自由混合,但好的形式是根据其类型来定
义。
2.2
常数传播
图
1
中的代码显示了带有赋值、While和
If
结构的命令式语言的常量传播策
略。常数传播算法的原理很简单:只要有一个常数到一个变量的赋值,
我们就使用动态重写来
统治
如果
该变量
随后被
了一个
非常量
值,则该规则
将被
删除。这
在
prop-const-assign中完成。 我们使用动态重写
规则将每个常量变量
替换为它的值(
如果
已知)。 这
为
基本求值规则EvalBinOp和EvalIf打
开了一扇大门,以
简化
Plus和If上的表达式。图中给出了其
应用的
一
个例子二、
prop-const
策略是顶级驱动策略,负责
递归地将常数传播应用于
项。 它通过
调用规则
PropConst
来工作,这
将用它的常量
替换任何我
们知道值的变量项。事实上,PropConst是一组同名的动态规则由于
PropConst是动态的,因此随着遍历的进行,规则可以被添加到集
合中或从集合这在prop-const-assign策略中完成。正如我们在
prop-
const
中看到的,prop-const-assign
在PropConst失败的任何项上被调用,
即 当我们不能用常量替换
变量时。如果调用prop-const-assign,
x
:=
1 +
1
如果
x那么y:= 1
else y:= 0
fi