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

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

<font class="title2"><b>9.7.6 代码外提后维持数据流信息</b></font>

<table>
<tr>
<td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
算法9.8的变换没有改变ud链信息,因为根据条件(2)的(a)、(b)和(c),由外提语句s赋值的变量的所有引用,原来能由s到达的,现在仍能由新位置的s到达。s引用的变量的定值或者在循环L外,这种情况下它们到达前置块;或者它们在L内,这种情况下,由步骤(3),它们已移到前置块s的前面。
</p>
<p>
如果ud链由指向语句的指针的指针表表示(而不是指向语句的指针表),那么ud链的维持很简单,在外提语句s时,只要修改指向s的指针。即,我们为每个语句s建一个指针Ps,它总是指向s,把Ps放在每个含s的ud链中。然后,不管s移到哪儿,我们只要改变Ps,而不管现在有多少含s的ud链。当然,多一层间接会增加编译器的时间和空间开销。
</p>
<p>
如果我们用语句指针表表示ud链,在外提语句时仍能维持ud链。但是,若为效率起见,我们需要用du链。在外提s时,我们可以顺着它的du链,改变所有引用s 的ud链。
</p>
<p>
代码外提时,必经结点信息略有改变。前置结点现在是首结点的直接必经结点,而前置结点的直接必经结点是原先首结点的直接必经结点,而前置结点的直接必经结点是原先首结点的直接必经结点。即,前置结点插在必经结点树上作为首结点的父结点。
</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.5.htm'" ></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.7.7.1.htm'" ></td>
</tr>
</table>

</BODY>

⌨️ 快捷键说明

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