📄 4.7.3.3.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.3.2b.htm'" width="24" height="24"></img></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.7.4.0.htm'" width="26" height="24"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<p>例如文法(4.18)的LR(1)分析表如表4.13所示。</p>
</td></tr></table>
<p>
<center><img src="images/table4.13.gif" width="482" height="383"></center>
</p>
<table><tr><td>    </td>
<td class="content">
<table align=left>
<td><font class="yanshi">    观看演示 </font></td>
<td>
<font color=blue onmouseover="javascript:style.cursor='hand';" onclick="javascript:open('applet/test4_8/test4_8.html','_blank','left=100,top=100,scrollbars=yes,resizable=yes,width=850,height=600')">LR(1)项目集规范族的构造过程</font></td>
<td><img src="../images/yanshi.gif" width="36" height="35"></img></td>
</table>
<br><br><br>
</table>
LR方法关于识别产生式右部的条件远不像预测分析法那样强。预测分析法要求每个非终结符的首符均不同,并且认为一旦看到首符之后就看准了该用哪一个产生式进行推导。但LR分析程序只有在看到整个右部所推导的东西之后才认为是看准了方向,因此LR方法应该比预测法更一般化。LR分析法是Knuth于1965年提出的。后来Aho,Ullman,Hopcroft和DeRemer
等人在这方面进行了大量的研究工作。 LR分析法可以认为是自左至右,自下而上的移进-归约分析法的高度概括和集中。在归约过程中栈里保存了已被归约了的输入串的几乎全部信息,这些信息集中反映在栈顶状态中。任何时候,一旦栈顶的文法符号串可能构成一个句柄时,栈顶状态和未来k个输入符号将唯一确定是否应该归约和怎样归约。因此LR方法是相当完备的。但从实现来说,因为状态太多,使用这种方法工作量很大。SLR的简化在于它在栈中只保留了已扫描过的那段输入符号串的部分信息,
并根据这些信息和未来输入符号决定移进或归约。SLR方法使状态数目大大减少。例如文法(4.18)的SLR分析器只含有7个状态,然而LR(1)分析器却含有10个状态。对于ALGOL一类语言来说,若用SLR分析器只有几百个状态,但若用LR(1)分析器则有几干个状态。所以LR(1)方法的缺点是代价太高,太不经济。故而有时采用一个折衷的方法,构造一种叫做LALR的分析表,此表比LR(1)分析表要小,能力也差一些,但却能对付SLR所不能对付的一些情况,见4.7.4节。随着计算机科学的飞速发展和LR分析程序的自动构造技术的实现,LR分析法正受到日益广泛的重视和应用。
</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.3.2b.htm'" width="24" height="24"></img></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.7.4.0.htm'" width="26" height="24"></img></td>
</tr>
</table>
</BODY>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -