📄 9.6.2ab.htm.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.1b.htm'" ></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.6.2b.htm'" ></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>9.6.2 可用表达式(一)</b></font>
<table>
<tr>
<td>    </td>
<td class="content">
<p>如果图9.31中4*i在B3的开始点可用,则块B3的表达式4*i是公共子表达式。这有两种可能,一是B2没有对i赋值,另一种如图9.31(b),B2中i的赋值后面又重新计算4*i。<br>
</p>
<p>
很容易计算基本块产生的可用表达式集合。在块的开始点,假定无可用表达式,从头到尾扫描块中所有语句,如果在p点可用表达式集合是A,q是p的下一点,p和q之间的语句是x:=y+z,那么q点的可用表达式集合由下列两步计算。
</p>
<p>
1、 把表达式y+z加入A。
</p>
<p>
2、 删掉A中任何含x的表达式。
</p>
<p>
注意,这两步必须以此次序完成,因为x可能就是y或z。到达块的结束点后,A是由此块产生的表达式集合。注销的表达式集合是所有的表达式y+z,y或z在本块中定值,并且该块没有产生y+z。
<p>
<font class = "example">例9.24</font> 考虑图9.32的四个语。
</p>
<p>
<img border="0" src="images/9_32.gif" align="left" hspace="20">
解析: <br>
      1、开始可用表达式为空,第一个语句后,只有b+c可用。 <br>
      2、第二个语句后,a-d可用,因为b的值改变,所以b+c不再可用。 <br>
      3、第三个语句不能使b+c再次可用,因为c的值立即改变。 <br>
      4、经最后一个语句,d的值改变,a-d也不再可用,语句本身也不能产生可用表达式,因为d的值立即改变,这样,没有可用表达式生<br>
                            成,包含a,b,c或d的表达式都<br>
                            被注销。<br>
</p>
</td>
</tr>
</table>
<br>
<p> </p>
<table align=right width=300>
<tr>
<td>
<img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.6.1b.htm'" ></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.6.2b.htm'" ></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -