📄 4.6.3.0b.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.3.0.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.6.3.0c.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<p>
<font class="definition"><img border="0" src="images/dingyi.gif" width="32" height="31">算法4.6 </font> 构造优先函数<br>
输入:一张算符优先关系表。<br>
输出:表示输入表的优先函数或表示不存在优先函数。<br>
方法:<br>
1.设a是一个终结符号或$。对每一个a建立两个符号f<sub>a</sub>和g<sub>a</sub>。<br>
2.将所有f<sub>a</sub>与g<sub>a</sub> 组成的集合分为若干组。办法是若a<img src="images/equalpoint.gif" width="20" height="19">b,则f<sub>a</sub>与g<sub>b</sub> 在同一组。<br>
3.画一张图,它的结点是在第(2) 步中建立的组。对任何a和b,若a<·b则从g<sub>b</sub> 所在的组画一箭弧到fa所在的组;若a·> b则从f<sub>a</sub>所在的组画一箭弧到g<sub>b</sub> 所在的组。<br>
4.若在第(3)步所构造的图中有一环路,则没有优先函数存在。如果没有环路,令f(a)是从f<sub>a</sub>所在的组出发沿箭弧前进的最长路径的长度(每一条箭弧的长度都是1),g(a)是从g<sub>a</sub> 所在的组出发沿箭弧前进的最长路径的长度。<br>
</p>
</td></tr></table>
<p>
<center><img src="images/4.14.gif" width="240" height="277"></center></p>
<table><tr><td> </td>
<td class="content">
<p>这些规则保证了id和(E)将被归约到E。$作为左终点与右终点的标志,用来发现在两个$之间的任何地方可能有的可归约串。</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.6.3.0.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.6.3.0c.htm'"></img></td>
</tr>
</table>
</BODY>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -