📄 5.1.4.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='5.1.3b.htm'" width="24" height="24" ></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.1.4b.htm'" width="26" height="24"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>5.1.4 依赖图</b></font>
<table>
<tr>
<td>    </td>
<td class="content">
<p>
如果在一棵分析树中一个结点的属性b依赖于属性c,那么这个结点处计算b的语义规则必须在确定c的语义规则之后使用。在一棵分析树中的结点的继承属性和综合属性中间的相互依赖关系可以由称作依赖图的一个有向图来描述。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>
在为一棵分析树构造依赖图以前,我们为每一个包含过程调用的语义规则引人一个虚综合属性b,以便把每一个语义规则都变为b:=f(c1,c2,…,ck)的形式。依赖图中为每一个属性设置一个结点,如果属性b依赖于属性c,则从属性c的结点有一条有向边连到属性b的结点。更详细地说,对于给定的一棵分析树,依赖图是按下面步骤构造出来的:
</p>
</td></tr></table>
<table align=center width=60% class=content>
<tr><td><b><font color="#0000FF">for</font></b> 分析树中每一结点 n <b><font color="#0000FF">do</font></b></td></tr>
<tr><td>  <b><font color="#0000FF">for</font></b> 结点 n 的文法符号的每一个属性 a <b><font color="#0000FF">do</font></b></td></tr>
<tr><td>    为a在依赖图中建立一个结点;</td></tr>
<tr><td><b><font color="#0000FF">for</font></b> 分析树中每一结点 n <b><font color="#0000FF">do</font></b></td></tr>
<tr><td>  <b><font color="#0000FF">for</font></b> 结点 n 所用产生式对应的每一个语义<br> <tr><td>    <font>规则b</font>:=f(c<sub>1</sub>,c<sub>2</sub>,…,c<sub>k</sub>)<font color="#0000FF">do</font> </td></tr>
<tr><td>    <b><font color="#0000FF">for</font></b> i:=1 to k <b><font color="#0000FF">do</font></b></td></tr>
<tr><td>     从c<sub>i</sub>结点到b结点构造一条有向边;</td></tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>
例如,假设
A.a:=f(X.x,Y.y)
是对应于产生式A→XY的一个语义规则,这条语义规则确定了综合属性A.a依赖于属性X.x和Y.y。如果在分析树中应用这个产生式,那么在依赖图中会有三个结点A.a,X.x和Y.y。由于A.a依赖于X.x,所以有一条有向边从X.x连到A.a。由于A.a也依赖于 Y.y, 所以还有一条有向边从Y.y连到A.a。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>
如果与产生式A→XY对应的语义规则还有
X.i:=g(A.a, Y.y)
那么,图中还应有两条有向边,一条从A.a连到X.i,另一条从Y.y连到X.i,因为X.i依赖于A.a和Y.y。
</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='5.1.3b.htm'" width="24" height="24" ></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.1.4b.htm'" width="26" height="24"></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -