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

📄 9.7.2.htm

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

<font class="title2"><b>9.7.2 复写传播</b></font>

<table>
<tr>
<td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
刚讨论的算法9.7和其它一些算法,如本节还要讨论的归纳变量删除,都会引入形如x:=y的复写语句。复写也可能由中间代码生成器直接产生,它们的大多数是局部于基本块的临时变量,可以用8.6节讨论的dag构造方法删除。如果能找出复写语句s:x:=y中x定值的所有引用点。并用y代替x,那么可以删除这个复写语句,但它必须以每个x的引用u满足下列条件为前提。
</p>
<p>
(1) 语句s必须是到达点u的x的唯一的定值点(即x在引用点u的ud链只含s)。 
</p>

<p>
(2) 从s到u的每条路径上,包括穿过u若干次的路径(但没有第2次穿过s)上,没有对y 的定值。
</p>
<p>
条件(1)可用ud链信息检查,但条件(2)呢?要建立新的数据流分析问题,为此定义:
<p>
c_in[B]:满足如下条件的所有复写语句s: x:=y的集合,从初始结点到B的开始点的每条路径上都有语句s,并且从s的最后出现到B的开始点之间没有对x或y的定值。</p>
<p>
c_out[B]: 满足如下条件的所有复写语句s: x:=y的集合,从初始结点到B的结束点的每条路径上都有语句s,并且从s的最后出现到B的结束点之间没有对x或y的定值。</p>
<p>
c_gen[B]:基本块B中所有复写语句s:x:=y的集合,且B中s的后面没有对x或y的定值。</p>
<p>
c_kill[B]:  程序中所有这样的复写语句s:x:=y的集合,其中s不在B中,x或y在B中被定值。</p>
<p> 对x定值将注销x:=y类似于到达_定值,但对y定值也会注销它是这个问题特有的。令U代表程序中所有复写语句的集合,注意,不同位置的语句x:=y在U中是不同的。c_gen[B]和c_kill[B]可以从流图中直接求出。c_in[B]和c_out[B]可用下页所示的方程求解。 
</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.1b.htm'" ></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.7.2b.htm'" ></td>
</tr>
</table>

</BODY>

⌨️ 快捷键说明

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