⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9.7.2c.htm.bak

📁 建立《编译原理网络课程》的目的不仅使学生掌握构造编译程序的原理和技术
💻 BAK
字号:
<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.2b.htm'" ></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.7.3.htm'" ></img></td>
</tr>
</table>
<br><br>

<table>
<tr>
<td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
<font class = "definition">算法9.8 复写传播</font>
</p>
<p>
输入:流图G,表示出到达块B的定值的ud链,代表方程9.13的解的c-in[B],即沿着每条路径到达B的复写x:=y的集合,在这些路径上x:=y的最后一个出现之后没有对x或y定值,另外还需要能表达出每个定值的引用的du链。
</p>
<p>
输出:修改的流图
</p>
<p>
方法:对每个复写语句s:x:=y执行下列步骤:
</p>
<p>
(1)用du链找出该x定值能到达的x的所有引用点。
</p>
<p>
(2) 设(1)找到的每个x引用点分别属于基本块B1,B2,...,Bm,若对所有的i(1<=i<=m),s在c_in[Bi]中,而且Bi中各个x的引用点之前没有对x或y的定值(注:如果s在c_in[B]中,那么s是到达B的唯一的x定值)。满足上述条件,则转(3);否则转(1)考查下一个复写语句。
</p>
<p>
(3) 如果s满足(2)的条件,删掉s,且把(1)找出的所有x引用用y代替。
</p>
&nbsp&nbsp&nbsp&nbsp<font class = "example">例9.30</font> 考察 
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp        
<p>&nbsp;&nbsp;&nbsp;&nbsp; a:=d; <br>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp        <font color="#0000FF">if</font> a=b
<font color="#0000FF">then</font> <br>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp            b:=1 <br>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp        <font color="#0000FF">else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font>&nbsp;c:=1; <br>
&nbsp;&nbsp;&nbsp;
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp        a:=a+b; <br>
</p>
<p>
a:=d到达比较式a=b和加法a+b。因为在这两个引用之间没有对a和d重新赋值,因此,在c_in[B]中可以实行复写传播。进一步,检查a:=d的du_链,发现a只用于两个地方,这两个地方都将用d代替。这样,使对a的赋值没有必要,所以我们可以得到: 
</p>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp        <font color="#0000FF">if</font> d=b
<font color="#0000FF">then</font><br>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp            b:=1 <br>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp        <font color="#0000FF">else<br>
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c:=1; <br>
&nbsp;&nbsp;&nbsp;
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp        a:=d+b <br>
</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.1.htm'" ></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.7.3.htm'" ></td>
</tr>
</table>

</BODY>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -