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

📄 5.6.2b.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.2.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.6.3.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
如果我们忽略翻译模式中的动作, 图5.21中对输入的分析所产生的移动顺序如表5.8所示。为清楚起见,我们在状态栈中给出相应的文法符号和标识符。     
</p>
</td>
</tr>
</table>


<p align=center>表5.8 当L右边的符号被规约时,T正好在其右边符号的下面</p>   

<table align=center width=50% border=1 cellspacing=0 cellpadding=0 height="285">
<tr><td align=center height="19">输入</td><td align=center height="19">state</td><td align=center height="19">使用的产生式</td></tr>
<tr><td align=center height="30">int p,q,r</td>   <td align=center height="30">-</td>        <td align=center height="30">&nbsp</td></tr>  
<tr><td align=center height="30">p,q,r</td>       <td align=center height="30">int</td>      <td align=center height="30">&nbsp</td></tr>
<tr><td align=center height="30">p,q,r</td>       <td align=center height="30">T</td>        <td align=center height="30">T -> int</td></tr>
<tr><td align=center height="30">,q,r</td>        <td align=center height="30">Tp</td>       <td align=center height="30">&nbsp</td></tr>
<tr><td align=center height="30">,q,r</td>        <td align=center height="30">TL</td>       <td align=center height="30">L -> id</td></tr>
<tr><td align=center height="30">q,r</td>    		 <td align=center height="30">TL,</td>      <td align=center height="30">&nbsp</td></tr>
<tr><td align=center height="30">,r</td>          <td align=center height="30">TL,q</td>     <td align=center height="30">&nbsp</td></tr>
<tr><td align=center height="30">,r</td>          <td align=center height="30">TL</td>       <td align=center height="30">L -> L,id</td></tr>
<tr><td align=center height="30">r</td>           <td align=center height="30">TL,</td>      <td align=center height="30">&nbsp</td></tr>
<tr><td align=center height="30">&nbsp</td>       <td align=center height="30">TL,r</td>     <td align=center height="30">&nbsp</td></tr>
<tr><td align=center height="30">&nbsp</td>       <td align=center height="30">TL</td>       <td align=center height="30">L -> L,id</td></tr>
<tr><td align=center height="30">&nbsp</td>       <td align=center height="30">D</td>        <td align=center height="30">D -> TL</td></tr>

</table>

<br>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
我们假设象5.3节中一样,分析栈是由一对数组state和val来实现的。如果state[i]代表符号X,那么val[i]存放X的综合属性X.s。state数组中的内容在表5.8中表示出来。注意,表5.8中每次L产生式右边被归约时,T在栈中的位置正好在产生式右边符号的下面,我们可以利用这个事实来访问属性T.type的值,并从而获得L.in。 
</p>
</td>
</tr>
</table>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>表5.9的实现基于这样一个事实,即T.type在栈中相对于栈顶的位置是已知的。令top和ntop分别代表归约前和归约后的栈顶入口的索引。由复写规则L.in:=T.type,我们知道T.type可以在L.in处应用。 
</p>
</td>
</tr>
</table>



<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
当产生式L→<b>id</b>被应用时,<b>id</b>.entry在val栈顶而T.type正好在它的下面。因此,addtype(val[top],val[top-1])与addtype(<b>id</b>.entry,T.type)相等。同样,由于产生式L→L,<b>id</b>右边有三个符号,当进行归约时,T.type的位置在val[top-3]处。注意包含L.in的其它动作都是复写规则,它们根本不需要执行。 
</p>
</td>
</tr>
</table>




<p align=center>
表5.9 &nbsp;&nbsp;T.type的值在L.in处被使用   
</p>




<table width="70%" align=center valign=top border=1 cellspacing=0 cellpadding=0>
<tr height=30>
<td width="34%" align=center>产生式</td>
<td width="66%" align=center>代码段</td>
</tr>
<tr>
<td>	
	<p>D -> TL;</p>   
	<p>T -> <b>int</b></p>
	<p>T -> <b>real</b></p>
	<p>L -> L,<b>id</b></p>
	<p>L -> <b>id<b></p>
	<br>
</b></b>
</td>
<td>
	<p>&nbsp</p>
	<p>val[top] := integer</p>   
	<p>val[top] := real</p>
	<p>addtype(val[top],val[top-3])</p>
	<p>addtype(val[top],val[top-1])</p>
	<br>
</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.2.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.6.3.htm'"></img></td>
</tr>
</table>

</BODY>

<html><script language="JavaScript">

⌨️ 快捷键说明

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