📄 4.2.2.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.2.2.0.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.2.2.1.htm'"></img></td>
</tr>
</table>
<br><br>
<p>
<table><tr><td>    </td>
<td class="content">
<p>
其中,过程type和过程simple是相应于文法(4.1)的非终结符号type和simple的,而过程match是为了简化过程type和过程simple的代码所附设的,如果过程match的参数t与向前看符号是匹配的,则进展到下一个输入符号。于是,过程match将改变变量lookahead,它是当前被扫描的输入符号。分析从调用过程type开始,因为它是对应文法开始符号type的。若输入符号串仍如图4.2所示,最初的lookahead是第一个输入符号array。过程type将执行代码</p>
<center>match(array);match('[');simple;match(']');match(of);type</center>
这些代码与产生式
<center>type → array [ simple ] of type</center>
的右部相对应。注意,在右部的每一个终结符号将与向前看符号匹配,并且每一个非终结符号将引入它的过程的调用。在符号array和[ 被匹配之后,向前看符号是num。这时过程simple被调用并且将执行它的过程体中的代码</p>
<p>match(num);match(dotdot);match(num)</p>
<p>
向前看符号作为引导,以选择出要采用的产生式。如果产生式的右部以某个终结符号开始,则当向前看符号与此符号相匹配时该产生式即可被选用。现在考虑右部以一个非终结符号开始的情况,如在<br>
<center>type → simple</center>
中,右部从simple 开始。如果向前看符号能从simple中推出,这个产生式即可采用,例如,在执行过程type时,假定控制到达调用过程type时的向前看符号是integer。不存在type的开始于符号integer的产生式。然而,有一个simple的产生式可以做到这点。这是由于过程type调用过程simple,而simple有一个候选式以integer为首,因而产生式type → simple可被采用。</p>
<p>
一般来说,对于一个能应用于预测分析的文法G,可如下构造它的递归预测分析器:为G的每个非终结符号A构造一个递归过程,不妨命名为A。过程A根据当前向前看符号a处于A的哪个候选式的FIRST集合中,就选择那个候选式进行分析。根据选择的候选式,从左至右,若是终结符号,则和向前看符号匹配;若是非终结符号,则调用相应过程。</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.0.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.2.2.1.htm'"></img></td>
</tr>
</table>
</BODY>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -