📄 8.6.1.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='8.5.2_2b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.6.1b.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>8.6 基本块的dag表示法</b></font> <BR><BR>
<font class="title2"><b> 8.6.0 引言</b></font>
<table><tr><td>    </td>
<td class="content" width="865">
<P>本节和下一节讨论如何对基本块内的程序进行某些等价变换,使得从变换后的程序出发,能生成更有效的目标代码,所谓等价,是指不改变程序的运行结果;所谓有效,主要指目标代码运行时间较短,以及占用的存储空间较小。我们通常称这种基本块内的变换为局部优化。对于实现基本块内的变换而言,一种有效的数据结构是<font class="definition3">有向非循环图</font>,也称<font class="definition3">无环路有向图</font>,简称dag(directed acyclic graph的缩写)。本节将介绍基本块的dag表示及dag的应用。</P>
<P>一个<font class="definition3">基本块的</font>dag是一种在其结点上带有下述标记的有向非循环图:</P>
<P>1.图的叶结点由独特的标识符所标记,所谓独特的标识符是指或者是变量名字或者是常数。根据作用到一个名字上的算符,可以决定需要的是一个名字的左-值或是右-值;大多数叶结点代表右-值。叶结点代表名字的初始值,为此,通常我们将其标识符加上角标0,以避免与那些指示名字的当前值的标识符相混淆。</P>
<P>2.图的内部结点由一个运算符号标记。代表计算出来的值。</P>
<P>3.图中各个结点可能附加一个或多个标识符,表示这些标识符具有该结点所代表的值。</P>
<P>要注意的是,dag不同于流图。一个流图的每个结点均可以用一个dag表示,因为流图中的每个结点代表一个基本块。</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='8.5.2_2b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.6.1b.htm'"></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -