📄 4.7.1.0.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.6.4.0c.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.7.1.0b.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>4.7 LR分析器 </b></font>
<table><tr><td>    </td>
<td class="content">
<p>本节介绍一个有效的自底向上的语法分析技术,它可用于分析很大的一类上下文无关文法。我们称它为LR(k)分析技术。这里的“L”是指从左至右扫描输入符号串,“R”是指构造一个最右推导的逆过程,“k”是指为了作出分析决定而向前看的输入符号的个数。 </p>
<p>LR分析方法是当前最广义的无回溯的“移进- 归约”方法。现今能用上下文无关文法描述的程序设计语言一般均可用LR分析方法进行有效的分析。LR分析方法对文法的限制最少。它在分析效率上也不比算符优先、预测分析等方法逊色。并且LR分析器在自左至右扫描输入符号串时能尽快地发现错误同时准确地指出错误地点。凡此种种使LR分析技术受到广泛的重视。</p>
<p>本节我们将首先讨论LR分析算法,之后将介绍为给定文法构造LR分析表的技术。 </p>
</td></tr></table>
<hr size=2 width=90% align=center color=red><br>
<font class="title2"><b>4.7.1 LR分析器的逻辑结构及工作过程 </b></font>
<table><tr><td>    </td>
<td class="content">
<p>一个LR分析器的结构如图4.15所示。它包含一个输入、一个输出、一个栈、一个驱动程序和一张分析表。分析表由两部分(动作和转移)组成。驱动程序对于所有LR分析器是同样的,即从一个语法分析器到另一个语法分析器只是变动分析表。驱动程序从一个输入缓冲器读入符号,每次读入一个。并利用一个栈去存储形如</p>
<p>s<sub>0</sub>X<sub>1</sub>s<sub>1</sub>X<sub>2</sub>s<sub>2</sub>…X<sub>m</sub>s<sub>m</sub></p>
<p>的符号串,其中X<sub>i</sub>是文法符号,s<sub>i</sub>是状态符号,s<sub>m</sub>在栈顶。每一个状态符号概括了在栈中位于它下边的全部信息,也就是从分析开始直到某一归约阶段的全部历史和展望。在实现中,文法符号并不需要出现在栈中,然而为了有助于解释LR分析器的行为,我们常常在讨论中包括它们。</p>
</td></tr></table>
<p>
<br>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.6.4.0c.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.7.1.0b.htm'"></img></td>
</tr>
</table>
</BODY>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -