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

📄 9.6.2bb.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.6.2b.htm'" ></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.6.2bc.htm'" ></img></td>
</tr>
</table>
<br><br>

<table>
<tr>
<td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
<font class = "example">例9.25</font> 我们集中于下面图中基本块B2来说明in[B2]的初值对out[B2]的影响。令G和K分别是gen[B2]和kill[B2]的缩写,B2的数据流方程是
</p>
&nbsp<font color="#FF0000">&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp        in[B2]=out[B1]∩out[B2] <br>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp        out[B2]=G∪(in[B2]-K) </font> <br>
这些方程已重写在图中,用I<sup>j</sup>和O<sup>j</sup>分别表示in[B2]和out[B2]的第j次近似。图中还给出,用I<sup>0</sup>=Ф开始,得到O<sup>1</sup>=O<sup>2</sup>=G,而用I<sup>0</sup>=U开始,得到较大的O<sup>2</sup>集合。在两种情况下,out[B2]都等于O<sup>2</sup>,因为它们都收敛在一点。<br>

<p align=center><img src="images/9_33.gif"></p>

<p>
直观上,以I<sup>0</sup>=U开始,用
</p>
&nbsp<font color="#FF0000">&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp            out[B2]=G∪(outB1]-K)
</font> <br>
得到的解是我们想要的,因为它正确反映了这个事实,out[B1]中没有被B2注销的表达式在B2的结束点可用,如同B2产生的表达式那样。
<p>
下面我们给出求可用表达式的算法。
</p>
<font class = "definition"><p>算法9.4 可用表达式<br></font>
<p>输入:流图G,每块B的e-kill[B]和e-gen[B]已计算,开始块是B1。<br>
<p>输出:每块B的e_in[B]集合。<br>
<p>方法:执行图9.34的算法,每步的解释和算法9.3类似。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
e_in[B1] := Φ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
e_out[B1] := e-gen[B1]; <font color="#008000">/*对初始结点B1,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in和out决不会改变*/</font><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000FF">
<b>for</b></font> B ≠ B1 <b><font color="#0000FF">do</font></b> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e_out[B] := U - e-kill[B]; 
<font size="3" color="#008000">/*初始估计值取最大*/</font><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
change := <b><font color="#0000FF">true</font></b>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b><font color="#0000FF">while</font></b> change <b><font color="#0000FF">do</font></b>
<font color="#0000FF"><b>begin</b></font><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
change := <b><font color="#0000FF">false</font></b>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b><font color="#0000FF">for</font></b> B ≠ B1 <b><font color="#0000FF">do</font></b> <b>
<font color="#0000FF">begin</font></b><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
e_in[B] := ∩ e_out[P];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp&nbsp;<font size="2">P是B的前驱<br></font>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
oldout := e_out[B];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
e_out[B] := e-gen[B] ∪ (e_in[B] - e-kill[B]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b><font color="#0000FF">if</font></b> out[B] ≠ oldout <b><font color="#0000FF">then</font></b> change := 
<font color="#0000FF"><b>true</b></font><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b><font color="#0000FF">end</font></b><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b><font color="#0000FF">end</font></b><br>
<center><b>图9.34&nbsp&nbsp&nbsp&nbsp可用表达式计算算法</b></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.2b.htm'" ></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.6.2bc.htm'" ></img></td>
</tr>
</table>

</BODY>

⌨️ 快捷键说明

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