📄 8.6.1_2c.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_2b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.6.2.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<P><font class="example"><img border="0" src="images/dingyi.gif" width="32" height="31">例8.6</font> 对于图8.9的基本块,我们考虑如何构造它的dag,如图8.10所示。基本块的第一条语句是t<sub>1</sub>:=4*i,在第1步中。我们必须分别构造标记为4和i<sub>0</sub>的叶结点。在第2步中,我们建立标记为*的结点,第(3)步将标识符t<sub>1</sub>加入到标记为*的结点的附加的标识符表中。图8.11(a)显示了这一阶段的dag。同样,可处理语句(2),t<sub>2</sub>:=a-4。</P>
<P>然后处理语句t<sub>3</sub>:=t<sub>2</sub>[t<sub>1</sub>]。我们找到node(t<sub>2</sub>)和node(t<sub>1</sub>),建立一个标记为[]算符的新结点,并以上述两个结点为其子结点。接下来是语句(4),t<sub>4</sub>:=4*i。我们找到结点node(4)和node(i)。这两个结点均已存在,并且由于算符又为*,因此我们不再为语句(4)建立一个新结点,而只需在原来以*为标记的结点的附加的标识符表中增加一个标识符t<SPAN
class=down>4</SPAN>。这时的dag如图8.11(b)。</P>
<P align=center><IMG height=339 src="8.11.gif" width=283><BR><BR>图8.11
dag构造过程</P>
<P>留给读者继续完成此dag的构造,最后的结果见图8.10。下面,作为(3)型语句的一个实例,我们讨论一下语句(11),i:=t<sub>9</sub>。我们找到结点node(t<sub>9</sub>),在该结点的附加标识符表上增加一个i,于是node(i)即node(t<sub>9</sub>)。要注意的是,node(i)是叶结点i。后来node(i)发生了变化。从而在建立语句(12)的结点时,对应i的新结点成为标记为<=的结点的左子结点。
</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_2b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.6.2.htm'"></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -