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

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

<font class="title2"><b>5.7 递归求值</b></font>         

<table><tr><td></td>
<td class="content">
<P>
使用比5.5节更为一般化的预测翻译技术,我们能够从语法制导定义出发建立一种在周游分析树的过程中计算属性值的递归函数。这样我们就可以使用这种递归函数来实现那些不能与分析过程同时实现的语法制导定义。在本节中,我们将首先把每一个非终结符号与单个翻译函数联系起来。此函数以某种顺序访问非终结符号结点的诸子结点,这种顺序是由这个非终结符号结点对应的产生式决定的;这种顺序不必要一定是从左到右的。 
</p>
</td></tr></table>


<table><tr><td></td>
<td class="content">
<p>
<b>从左到右周游 </b>
</p>
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
在算法5.1中,我们说明了一个基于LL(1)文法的L-属性定义是如何通过为了分析和翻译每一个非终结符号去构造一个递归函数的方法来实现的。如果在事先已经构造好了的分析树中的那些代表非终结符号的结点处使用类似的递归函数,那么所有的L-属性定义都可以实现。通过结点对应的产生式,这种函数可以知道它的子结点是什么。一个非终结符号A的函数过程把一个结点和A的继承属性值(可能有多个)作为它的形式参数,并返回A的综合属性值(可能有多个)作为结果。 
</p>
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
构造的详细过程基本上与算法5.1相同,只是在第二步中有所不同。原算法中非终结符号的递归函数根据当前输入的符号来决定使用哪一个产生式,而现在的递归函数将根据调用时的结点参数(实在参数)来确定结点处所使用的产生式。下面我们给出一个例子来说明这种方法,在例中使用一个情况语句以做出判定。 
</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_2b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.7.0b.htm'"></img></td>
</tr>
</table>

</BODY>

<html><script language="JavaScript">

⌨️ 快捷键说明

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