📄 7.6.2b.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='7.6.2.htm'" ></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='7.6.2c.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<p><br>
此模式中的非终结符号E有两个属性E.truelist和E.falselist。同样,表示语句的S和表示语句表的L也分别需要一个未填写目标标号的转移指令表。这些表分别由属性L.nextlist和S.nextlist指示。指针S.nextlist指向一个转移指令表(和前边所讲的一样,事实上它存放转移指令的标号)。表中相应的指令将控制流转移到紧接语句S
之后要执行的代码处。L.nextlist的定义相类似。
<p>现在让我们首先讨论产生式(5) :
<p>S→while M<SPAN class=down><sub>1</sub></SPAN> E do M<SPAN class=down><sub>2</sub></SPAN> S<SPAN class=down><sub>1</sub><br>
</SPAN>及其相应的语义动作。此产生式是由S→while E do S<SPAN class=down><sub>1</sub></SPAN>加入M<SPAN class=down><sub>1</sub></SPAN>
和M<SPAN class=down><sub>2</sub></SPAN>而得到的。因为对于一遍翻译而言,E的代码的开始之处和S<SPAN class=down><sub>1</sub></SPAN>的代码的开始之处是这一产生式的重要位置。所以引入标记非终结符号M,以记录这些开始位置的四元式的标号。产生式M→ε的语义动作是置属性M.quad为即将生成的下一条四元式的标号(即编号)。当while语句中S<SPAN class=down><sub>1</sub></SPAN>的代码执行完毕以后,控制流转向S语句的开始处。因此,当我们归while
M<SPAN class=down><sub>1</sub></SPAN> E do M<SPAN class=down><sub>2</sub></SPAN> S<SPAN
class=down><sub>1</sub></SPAN> 为S 时,我们回填表S<SPAN
class=down><sub>1</sub></SPAN>.nextlist中所有相应的转移指令的目标标号为M·quad。自然,我们需要在S1的代码之后增加一条转移到E的代码的开始位置的目标指令。另外,我们回填表E.truelist中相应的转移指令的目标标号为M<SPAN
class=down>2</SPAN>.quad,即S<SPAN
class=down><sub>1</sub></SPAN>的代码的开始位置。
</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='7.6.2.htm'" ></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='7.6.2c.htm'"></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -