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

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

<font class="title2"><b>8.6.1 dag的构造</b></font>           
<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content" width="865">

<P>为了构造一个基本块的dag,我们将依次处理块中的每一个语句。当我们遇到形如x:=y+z的语句,我们寻找分别代表y和z当前值的结点。      
这些结点可能是叶结点,或者是dag的内部结点,即如果y,z已由基本块中先前的语句求得值。然后我们构造一个标记为+的结点,并且给它两个子结点,其左子结点对应y,右子结点对应z。然后在标记为+的结点旁边附加标记x。然而,如果已经有一个结点表示同样的值y+z,这时我们就不必在dag中增加一个新的结点,只需给予该已存在的结点一个附加标记x即可。</P>
<P>另外两点要提到的是,如果x(不是x<sub>0</sub>)已经事先附加在某个其它结点上,我们需去掉这个先前的标记x,因为x的当前值是刚刚新建立的结点的值;另外,对赋值语句x:=y,我们不再构造新结点,而仅将标记x附加到y的当前值所在的结点上。现在我们给出构造一个基本块的dag的算法。</P>
<P><font class="example"><img border="0" src="images/dingyi.gif">算法8.2</font>&nbsp;&nbsp;&nbsp;&nbsp;构造一个dag</P>
<P>输入:一个基本块。</P>
<P>输出:此基本块的一个dag,其中包含如下的信息:</P>
<P>1.每个结点都有一个标记。叶结点的标记是一个标识符(允许是常数),内部结点的标记是一个运算符号。</P>
<P>2.在每个结点上有一个附加的标识符表(可能为空),这里的标识符不允许是常数。</P>
<P>方法:我们假定存在一个函数node(identifier),当我们在建立dag时,它将返回最新建立的与identifier相联系的结点。</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.1b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.6.1_2b.htm'"></img></td>
</tr>
</table>

</BODY>

⌨️ 快捷键说明

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