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

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

<font class="title2"><b>5.6.2 分析栈中的继承属性</b></font>        


<table>
<tr>
<td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>自底向上的分析程序对产生式A→XY的归约是通过把X和Y从分析栈中移出并用A来代替它们来实现的。假设x有一个综合属性X.s,而且它的值通过5.3节中的方法与x一起保留在栈中。
</p>
</td>
</tr>
</table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>由于X.s的值在Y以下的子树中的任何归约发生之前已经放在栈中,这个值可以被Y继承,也就是说,如果继承属性Y.i是由复写规则Y.i:=X.s决定的,那么我们可以在需要Y.i值的地方使用X.s的值。我们将会看到,在自底向上的分析中,复写规则在计算属性值时起很重要的作用。
</p>
</td></tr></table>



<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<b>倒5.17</b> 如图5.21所示,一个标识符的类型可以通过继承属性的复写规则来传递。我们首先考虑对输入<br>       
&nbsp;&nbsp;&nbsp; <b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int</b>        
p,q,r<br>       
进行自底向上分析所做的移动。然后我们给出使用L产生式时怎样得到属性T.type的值。
</td>
</tr>
</table>

<p align=center><img src="images/5_21.gif" ></p>
<p align=center>图5.21 在每一个L结点L.in=T.type</p>   


<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>&nbsp;&nbsp;&nbsp;&nbsp; D→T&nbsp;&nbsp;&nbsp;&nbsp;{ L.in:=T.type}<br>    
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L<br>    
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T→<b>int&nbsp;</b>{T.type:=integer}<br>    
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T→<b>real</b>{T.type:=real}<br>    
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L→ &nbsp;&nbsp;&nbsp;&nbsp;{L<span class="down"><sub>1</sub></span>.in:=L.in}<br>    
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L<span class="down"><sub>1</sub></span>,<b>id</b>     
{ addtype(<b>id</b>.entry,L.in)}<br>    
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L→<b>id</b>     
&nbsp;&nbsp;&nbsp;{ addtype(<b>id</b>.entry,L.in)}     
</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.0.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.6.2b.htm'"></img></td>
</tr>
</table>

</BODY>

⌨️ 快捷键说明

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