📄 5.5.1_2.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.5.1_1b.htm'" ></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.5.2.htm'"></img></td>
</tr>
</table>
<br><br>
<table>
<tr>
<td>    </td>
<td class="content">
<p>图5.18表示了怎样用图5.17中的动作构造a-4+c的语法树。代表文法符号的结点的左边是继承属性,右边是综合属性。象例5.8中一样,语法树中的叶结点由产生式T→<b>id</b>和T→<b>num</b>对应的语义动作建立。最左边的T结点的属性T.nptr指向叶结点a。指向结点a的指针T.nptr之值赋给位于产生式E→TR中右边的R的继承属性R.i,即R.i:=T.nptr。
</p>
</td>
</tr>
</table>
<table>
<tr>
<td>    </td>
<td class="content">
<p>当产生式R→-TR<span class="down"><sub>1</sub></span>在根的右子结点处应用时,R.i指向代表a的结点,且T.nptr指向代表4的结点。对于减号和这些指针应用mknode来构造与a-4相应的结点。
</p>
</td>
</tr>
</table>
<table>
<tr>
<td>    </td>
<td class="content">
<p>
最后,当应用产生式R→ε时,R.i向上指向整个语法树的根结点。即R.i的值赋给R.s,R.s的值再传给上层的R.s,直到树根。或说,整个语法树通过代表R的结点的s属性返回(图5.18中没有表示出来),直到R.s的值成为E.nptr的值。
</p>
</td>
</tr>
</table>
<center><img src="images/5_18.gif"><br><br>
图5.18 使用继承属性构造语法树</center>
<br>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.5.1_1b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.5.2.htm'"></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -