📄 4.5.1.1.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.0b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.5.1.1b.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<p><font class="emphasize">句柄</font></p>
<p>非形式的说,一个串的“句柄”是和一个产生式右部匹配的子串,并且,用产生式的左部非终结符号代替这个子串(归约),成为最右推导逆过程的一步。在很多情况下,匹配某产生式A→β右部的左子串β不是句柄,因为用这个产生式归约产生的串不能归约到文法的开始符号。在例4.12中,第二步归约被归约句型串aAbcde中,b是A→b的右部且是最左子串,若用A代替b得到符号串aAAcde,不能从它归约到S。基于这一点,必须给句柄以更精确的定义。</p>
<p>形式的说,右句型(最右推导可得的句型)γ的句柄是一个产生式A→β和γ中的一个位置,从这个位置开始往右可找到β,用A代替β得到γ最右推导的前一个右句型,即如果S<img src="images/equalr.gif" width="20" height="19">*αAw<img src="images/equalr.gif" width="20" height="19">αβw,那么,在α后A→β是αβw的句柄。w是读入的终结符号。</p>
<p>在上面的例子中,abbcde是右句型,它的句柄是A→b和位置2。同样,aAbcde也是右句型,它的句柄是A→Abc和位置2。有时可直接说子串β是右句型αβw的句柄,条件是我们很清楚β在αβw的位置和产生式A→β。</p>
<p>图4.12图示了右句型αβw的分析树及句柄A→β。句柄是最左最下边那棵简单子树。在αβw中,把β归约到A可想象成“剪除句柄”,即把A的子结点从分析树中删除。</p>
</td></tr></table>
<p>
<center><img src="images/4.12.gif" width="178" height="288"></center><br>
<center class="content">图4.12 右句型αβw中句柄A→β</center></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.5.1.0b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.5.1.1b.htm'"></img></td>
</tr>
</table>
</BODY>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -