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

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

<font class="title2"><b>5.3  S-属性定义及其自底向上的计算</b></font>     

<table>
<tr>
<td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
既然我们已经知道了如何用语法制导定义来说明翻译,现在我们就来研究怎样实现这种翻译器。一个一般的语法制导定义的翻译器可能是很难建立的,然而有一大类的语法制导定义的翻译器是很容易建立的。这一节我们考虑这样的一类定义:S-属性定义,即只含有综合属性的语法制导定义。下面几节将介绍带有继承属性的语法制导定义的实现。
</p>
</td>
</tr>
</table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>综合属性可以在分析输入符号串的同时由自底向上的分析器来计算。分析器可以保存与栈中文法符号有关的综合属性值,每当进行归约时,新的属性值就由栈中正在归约的产生式右边符号的属性值来计算。这一节我们将介绍怎样扩充分析器中的栈来存放这些综合属性值。在5.6节中我们将看到这种实现对于某些继承属性的计算也适用。
</p>
</td></tr></table>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>在表5.3中,建立表达式语法树的语法制导定义中只有综合属性出现,因此,可以用这一节中的方法在自底向上的分析中建立语法树。我们将在第5.5节中看到,在自顶向下的分析过程中表达式的翻译通常使用继承属性。因此我们将在下一节考查了“从左到右”的依赖关系后再讨论自顶向下分析过程中的翻译。
</p>
</td>
</tr>
</table>



<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
下面我们讨论分析栈中的综合属性。
</p>
</td>
</tr>
</table>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
在自底向上的分析方法中,我们使用一个栈来存放已经分析过的子树的信息。现在我们可以在分析栈中使用一个附加的域来存放综合属性值。图5.8表示的是一个带有一个属性值空间的分析栈的例子。我们假设图中的栈是由一对数组state和val来实现的。每一个state元素都是一个指向LR(1)分析表的指针(或索引)。(注意,文法符号隐含在state中而不需存贮在栈中。)然而,如果象第四章中那样在把文法符号放入栈中时,用单个文法符号来代表state的话,那么当第i个state符号为A时,val[i]中就存放分析树中与结点A对应的属性值。
</p>
</td>
</tr>
</table>

<p align=center><img src="images/5_8.gif"></p>
<p align=center>图5.8 带有综合属性域的分析栈</p>



<br>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.2.4b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.3.0b.htm'"></img></td>
</tr>
</table>

</BODY>

<html><script language="JavaScript">

⌨️ 快捷键说明

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