📄 5.6.3_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.6.3_1b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.6.3_2b.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<P>
前面的例子的思想可用下面的算法加以形式化。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
<b>算法5.2</b> 带有继承属性的自底向上的分析和翻译
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
输入:基础文法是LL(1)文法的L-属性定义。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
输出:一个计算在分析栈中所有属性值的分析程序。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
方法:为了简单起见,我们假设每一个非终结符号A都有一个继承属性A.i,并且每一个文法符号X都有一个综合属性X.s。如果X是一个终结符号,那么它的综合属性值就是通过词法分析器返回的词法值;这个值出现在栈中数组val之中,如同前面所讲的。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
对于每一个产生式A→X<sub>1</sub>…X<sub>n</sub>,引入n个新的标记非终结符号,M<sub>1</sub>,…,M<sub>n</sub>,用产生式A→M<sub>1</sub>X<sub>1</sub>…M<sub>n</sub>X<sub>n</sub>代替上面的产生式。综合属性X<sub>j</sub>.s;将放在分析栈中与X<sub>j</sub>相联系的数组val的表项中。如果有继承属性X<sub>j</sub>.i,它也出现在数组val之中,但它与M<sub>j</sub>相联系。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
一个重要的事实是,当我们进行分析时,如果继承属性A.i存在的话,它将在数组val中紧挨M<sub>1</sub>位置下面的位置(地址码较小者)中存放的。由于我们假设开始符号没有继承属性,那么在开始符号为A时,不会发生什么问题。但即使有这样的继承属性,我们也可以把它放在栈底的下面。注意,继承属性与标记非终结符号M<sub>j</sub>相联系,属性Xj.i总是在M<sub>j</sub>处计算,而且发生在我们开始做归约到X<sub>j</sub>的动作以前。
</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.6.3_1b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.6.3_2b.htm'"></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -