📄 5.5.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_2.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.5.2_1.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>5.5.2 预测翻译器的设计</b></font>
<table>
<tr>
<td>    </td>
<td class="content">
<p>
下面的算法使预测分析器普遍地用于实现基于适合自顶向下分析的文法的翻译模式。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p><b>算法5.1 </b>预测语法制导翻译器的建立<br>
输入:一个带有适合预测分析的基础文法的语法制导翻译模式。<br>
输出:一个语法制导翻译器的代码。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>方法:使用的技术是修改4.4节中的预测分析器的结构。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>1.对每个非终结符号A建立一个函数过程,此过程是可递归调用的。对于A的每一个继承属性都对应着该函数过程的一个形式参数,函数返回的值是A的综合属性的值(可能是一个记录、一个指针,或其它)。为简单起见,我们假设每个非终结符号只有一个综合属性,A的函数过程对于出现在A产生式中的每一个文法符号的每一个属性都有一个相应的局部变量。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>2.正如4.4节中所讨论的,由于以某个非终结符号A为左部的产生式可能有多个,因而代表非终结符号A的代码(指用符号形式表示的数据和程序)要根据当前的输入符号来决定使用哪一个产生式。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>3.与每一个产生式有关的代码做下面的工作:从左到右考虑产生式右部的单词符号、非终结符号及语义动作。<br>
(a)对于带有综合属性x的单词符号X,把x的值存放在X.x中。然后产生一个匹配X的调用,并继续输入。<br>
(b)对于非终结符号B,产生一个右边带有函数调用的赋值语句c:=
B(b<span class="down"><sub>1</sub></span>, b<span class="down"><sub>2</sub></span>,
…,b<span class="down"><sub>k</sub></span>),在这里b<span class="down"><sub>1</sub></span>,b<span class="down"><sub>2</sub></span>,…,b<span class="down"><sub>k</sub></span>是代表B的继承属性的变量,c是代表B的综合属性的变量。<br>
(c)对于每个动作,把动作的代码抄进分析器中,用代表属性的变量来代替对属性的每一次引用。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>算法5.1还将在5.7节中被扩充,以便用来实现任何L-属性定义,我们假设事先已经建立了分析树。
</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.5.1_2.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.5.2_1.htm'"></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -