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

📄 4.7.4.1c.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='4.7.4.1b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.7.4.2.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>         
<td class="content">    
<p>现在来看如何计算函数go,譬如go(I<sub>36</sub>,C)。在原来的LR(1)项目集中,go(I<sub>3</sub>,C)=I<sub>8</sub>,现在I<sub>8</sub>是I<sub>89</sub>的一部分,因此置go(I<sub>36</sub>,C)= I<sub>89</sub>。考虑I<sub>36</sub>的另一部分I<sub>6</sub>,可以得到同样的结论。即go(I<sub>6</sub>,C)=I<sub>9</sub>,现在I<sub>9</sub>是I<sub>89</sub>的一部分。另一例,考虑go(I<sub>2</sub>,c),它是在执行了关于输入符号c上的I<sub>2</sub>所规定的移进动作之后的一个入口。在原来的LR(1)项目集中,go(I<sub>2</sub>,c)=I<sub>6</sub>。由于现在I<sub>6</sub>是I<sub>36</sub>的一部分,所以go(I<sub>2</sub>,c)=I<sub>36</sub>。于是,在表4.14中的对于状态2和输入符号c 的入口是s<sub>36</sub>。这意味着,移进c,再把状态36置于栈顶。  
</p>     
 
<p> 
当输入符号串为c<sup>*</sup>dc<sup>*</sup>d时,不论是表4.13的LR分析器还是表4.14的LALR分析器,都给出了同样的移进和归约的序列。其差别只是状态名不同而已,例如,如果LR分析器把I<sub>3</sub>或I<sub>6</sub>堆入栈顶,LALR分析器将把I<sub>36</sub>堆入栈顶。对于正确的输入串,LR和LALR分析器始终形影相随。 
</p>  
<p>但是,当遇有错误输入时,LALR可能会比LR多做些归约动作,而LR则能立即报错。但LALR决不会比LR移进更多的符号。例如,在输入ccd之后为$,表4.13的LR分析器将把 <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0c3c3d4 <br> 
堆入栈顶,并且在状态4将发现一个错误,因为$是下一个输入符号,并且在$之上状态4的动作是报错。而另一方面,表4.14的LALR做相应的动作,将把 <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0c36c36d47<br> 
堆入栈顶。但是状态47遇到输入符号$时将按照产生式C→d进行归约。LALR分析器将把栈改变为 <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0c36c36C89<br> 
现在,状态89在输入符号$上的动作是按C→cC进行归约。这时栈变为 <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0c36C89 <br> 
再作一个类似的归约,得到如下的栈: <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0C2   <br> 
最后,状态2遇到输入符号$,发现错误。 
</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='4.7.4.1b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.7.4.2.htm'"></img></td>
</tr>      
</table>      
      
</BODY>      
</html>
<html><script language="JavaScript">

⌨️ 快捷键说明

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