📄 9.7.7.3.htm
字号:
<html>
<head>
<title>编译原理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link type="text/css" rel="stylesheet" href="../css/specification.css">
</head>
<BODY>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.7.7.2b.htm'" ></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.7.7.3b.htm'" ></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>9.7.7.3 归纳变量删除算法</b></font>
<table>
<tr>
<td>    </td>
<td class="content">
    <font class = "definition">算法9.13</font> 归纳变量删除 <br>
    输入:循环L,以及相应的到达_定值信息,循环不变计算信息和活跃<Br>
         变量信息。 <br>
    输出:归纳变量删除后的循环。<br>
    方法: <br>
     (1) 考虑每个仅用于条件分支测试的基本归纳变量i,取i族中其三元<br>
       组(i,c,d)中的c和d尽可能简单的某个j(即,c=1和d=0<br>
       者优先),把每个含i的测试中的i用j代替。例如,形式为<br>               if i relop x goto B<br>
       的测试,其中x不是归纳变量,用下面的指令序列 <br>
<p>      r:=c*x <font color="#008000"> /*如果c等于1,r:=x*/</font> <br>
          r:=r+d <font color="#008000"> /*如果d等于0,省略它*/
</font> <br>
          if j relop x goto B <br></p><p></P>
       代替,其中r是新的临时变量。可类似处理<br>
              if x relop i goto B。<br>
       如果测试if i1 relop i2 goto B的i1和i2都是归纳变量,那么<br>
       检查i1和i2是否都能被代替。最简单的情况是,有j1的三元组<br>
       (i1,c1,d1)和j2的三元组(i2,c2,d2),并且c1=c2和<br>
       d1=d2,那么,i1 relop i2等价于j1 relop j2。更复杂的情<br>
       况,测试的替换可能是没有价值的,因为可能要引入两步乘和<br>
       一步加,而删除i1和i2只可能节省两步。 <br>
<p>  最后,当被删掉的归纳变量不再引用时,从循环中删去所有对它的赋值。</P>
<p> (2) 考虑由算法9.12(强度削弱用于归纳变量)引入语句j:=s的每<br>
       个归纳变量j。首先检查在引入的j:=s和任何j的引用之间有没<br>
       有对s赋值,通常是没有。j常常在它定值的块中被引用,这个<br>
       检查可以简化,否则需要用到达_定值信息和加上一些图的分析<br>
       来实现这种检查。然后用引用s代替所有j的引用,并删去语句<br>
       j:=s。<br></p>
</td>
</tr>
</table>
<br>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.7.7.2b.htm'" ></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.7.7.3b.htm'" ></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -