📄 4.2.2.2.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.2.2.1b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.2.2.2b.htm'"></img></td>
</tr>
</table>
<br><br>
<p>
<table><tr><td>    </td>
<td class="content">
<p>转换图可以用代入的方法化简。例如,可以考虑对图4.4的一组转换图进行化简。在图4.4(a)中,把E'的调用自身代之以跳到E' 图的开始。图4.4(b)表示了一个等价的E'的转换图。于是我们可以把E'的转换图4.4(b)代人到图4.4的E图中的E',得到图4.4(c)。最后,把图4.4(c)简化为图4.4(d)。同样的方法可以应用到T和T'的转换图中。总之,可以把图4.4化简为图4.6。</p>
</td></tr></table>
<p>
<center><img src="images/4.5.gif" width="561" height="299"></center>
<center>图4.5 简化的转换图</p>
<table><tr><td>    </td><br><br>
<p>
<center><img src="images/4.6.gif" width="340" height="250" ></center>
</p>
<p>
图4.6 算术表达式的简化转换图</p>
<table><tr><td>    </td>
<td class="content">
<p>以转换图为基础的预测分析器是用来匹配输入符号串的。我们仍以文法(4.3)为例,若输入符号串是id+id*id,根据图4.6所设计的预测分析器的工作过程是:从图4.6中的E的转换图的初态0开始工作,状态0只有一条以非终结符号T为标志的射出弧,这意味着,在此状态时不论面临什么输入符号总是调用T的转换图,因而控制转向T的初态7。然后调用F转换图,控制转向F的初态14。自状态14有两条弧射出,其中一条以id为标志,这时输入中的下一个符号是id(串id+id*id的第一个id),与弧箭标志匹配,读入它,并转移到状态17。状态17是F的结束状态,由此返回至T的状态8。因为下一个输入符号不是*,所以按ε箭弧转移至T的结束状态13,不读入下一个符号。返回E的状态3,下一个符号+与自状态3射出的一条箭弧的标志相匹配,因而转移至E的状态0,并读入+。以此类推,可知给定的输入符号串是文法(4.3)的一个句子。不难看到,当表达式中若出现括号,则将有E调用T,T调用F,而F又调用E。即在这三个转换图之间出现相互递归的调用,每个转换图的作用就如同一个递归过程。以这种转换图为流程图极容易构造出相应的递归过程。根据图4.6构造出文法(4.3)的递归预测分析程序如下页所示:
</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.2.2.1b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.2.2.2b.htm'"></img></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -