📄 8.6.1_2b.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.6.1_2.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.6.1_2c.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content" >
<P>我们还假定要考虑的三地址语句包括如下三种型式:</P>
<P>(1)x:= y op z</P>
<P>(2)x:= op y</P>
<P>(3)x:=y<BR>我们分别把它们称为(1)型、(2)型和(3)型。至于含有关系运算符的三地址语句如</P>
<P align=left>if i<=20 goto-<br>
可当作(1)型,其中x无定义。关于其它类型的语句将在本节末尾作进一步的考虑,构造dag的过程是依次对基本块中的每个语句执行下述步骤l至3。假定初始时dag中没有任何结点,即此时node函数对任何参数都返回一个结点并指明它是未定义的。</P>
<P>1.如果node(y)是未定义的,创建一个标记为y的叶结点,并且令node(y)为这个结点。若为(1)型,如果node(z)也未定义,同样建立一个标记为z的叶结点并令node(z)为此结点。</P>
<P>2.若三地址语句为(1)型时,确定是否有一个标记为op,它的左子结点为node(y)且右子结点为node(z)的结点。(这个检查是为了发现公用子表达式)。如果没有,就建立一个这样的结点,无论是那种情况,令n是所找到的或建立的结点。若三地址语句是(2)型时,确定是否有一个标记为op,且仅有唯一子结点node(y)。若没有,则建立一个这样的结点,令n是所找到的或建立的结点。若三地址语句为(3)型,令n就是node(y)。</P>
<P>3.从node(x)的附加标识符表中删除x。在第2步构造的结点n的附加标识符表中增加标识符x,并且置node(x)为结点n。</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.6.1_2.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.6.1_2c.htm'"></img></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -