📄 4.5.2.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.5.1.2b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.5.2.0b.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>4.5.2 “移进-归约”分析法的栈实现</b></font>
<table><tr><td>    </td>
<td class="content">
<p>在考虑如何寻找句柄之前,让我们先来考虑“移进- 归约”分析法是如何使用栈来实现的。栈是语法分析的一种基本数据结构。一个“移进一归约"分析器使用一个寄存文法符号的栈和一个存放输入符号串w的缓冲器。分析开始时预先把符号$推进栈,以示栈底,并且将$置入输入符号串之后,以示符号串的结束。因而分析器的初始状态为:</p>
<table align=center width=450 class="content">
<tr><td>栈</td><td>输入</td></tr>
<tr><td>$</td><td>w$</td></tr>
</table>
<p>分析器的工作过程是,自左至右把输入符号串w 的符号一一移进栈里,一旦发现栈顶的一部分符号形成一个可归约串时,就把栈中的这个子符号串用相应的归约符号(在规范归约时是用相应的产生式的左部符号)替换。这种替换可能持续多次,直至栈顶不再呈现可归约串为止。然后,就继续向栈里移进符号,重复整个过程,直至最终形成如下格局:</p>
<table align=center width=450 class="content">
<tr><td>栈</td><td>输入</td></tr>
<tr><td>$S</td><td>$</td></tr>
</table>
<p>此时,栈里只含$与最终归约符号S(在规范归约的情形下S为文法开始符号),而输入符号串w 全被吸收,输入缓冲器中仅剩下结束符号$。这种格局表示分析成功。如果达不到这种格局,意味着输入符号串w(源程序)含有语法错误。</p>
</td></tr></table>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.5.1.2b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.5.2.0b.htm'"></img></td>
</tr>
</table>
</BODY>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -