📄 9.6.4.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.6.3.htm'" ></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.6.5.htm'" ></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>9.6.4 定值_引用链(du链)</b></font>
<table>
<tr>
<td>    </td>
<td class="content">
<p>
和活跃变量分析以同样方式完成计算的还有<font class = "definition2">定值_引用链(du链)</font>。我们说变量在语句s被引用,如果s需要它的右值。例如,在语句a:=b+c和a[b]:=c中引用了b和c。对程序中的某个变量x和点p,x在点p的du链是x在点p的定值到达的所有引用点s的集合。所谓变量x在点p的定值到达引用点s,是指在s点引用了x,并且从p到s有一条路径,在这条路径上没有对x的无二义定值。
</p>
<p>
如果能够计算出可到达块B结束点的引用集合,那么就能够计算B中任意点P的可到达的引用,只要扫描块B中P后面的部分。具体说来,如果块中点P的后面有变量x的无二义定值,我们就可以决定这个定值的du链,既这个定值所有可能的引用表。另外,du链也包含了活跃变量信息,如果变量x在点p的du链为空集,则x在点p是不活跃的,否则是活跃的。为求du链,给出下面定义:
</p>
<p>
  d_in[B]:所有(s,x)构成的集合,其中s是B中或B的某个后继基本块<br>
            中的一点,且s点引用了变量x在B的入口处的值。</p>
<p>
  d_out[B]:所有(s,x)构成的集合,其中s是B的某个后继基本块中<br>
            的一点,且s点引用了变量x在B的出口处的值。</p>
<p>
  d_use[B]:所有(s,x)构成的集合,其中s是B内的一点,s点引用了<br>             变量x的值,并且B中s之前没有对x的无二义定值。</p>
<p>
  d_def[B]:所有(s,x)构成的集合,其中s是B外的一点,s点引用了<br>
             变量x的值,并且x在B中被重新无二义定值。</p>
<p>
d_use[B]和]d_def[B]可以直结从程序流图求出,用下面的方程求出d_in[B]和d_out[B]。
</p>
<P>
 <font color="#FF0000">        d_in[B]=d_use[B]∪(d_out[B]-d_def[B]) <br>
             d_out[B]= ∪d_in[S]                 (方程9.12) <br>
<font size="2">                         s是B的后继
</font> <br></font></P>
<p>
方程(9.12)和(9.11)形式相同,可以用算法9.5解这个方程。
</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.6.3.htm'" ></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.6.5.htm'" ></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -