📄 5.3.1b.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='5.3.1.htm'" ></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.4.0.htm'"></td>
</tr>
</table>
<br><br>
<p align=center>表5.5 翻译输入3*5+4n所做的移动</p>
<table width="75%" align=center border=1 cellspacing=0 cellpadding=7>
<tr>
<td height=30 width="22%"><div align=center>输入</div></td>
<td width="22%"><div align=center>state</div></td>
<td width="23%"><div align=center>val</div></td>
<td width="33%"><div align=center>使用的产生式</div></td>
</tr>
<tr>
<td align=right valign=top>
<br>
3*5+4n
<p>*5+4n</p>
<p>*5+4n</p>
<p>*5+4n</p>
<p>5+4n</p>
<p>+4n</p>
<p>+4n</p>
<p>+4n</p>
<p>+4n</p>
<p>4n</p>
<p>n</p>
<p>n</p>
<p>n</p>
<p>n</p>
</td>
<td align=center valign=top><div align=center>
<br>
<p align=center>-</p>
<p>3</p>
<p>F</p>
<p>T</p>
<p>T*</p>
<p>T*5</p>
<p>T*F</p>
<p>T</p>
<p>E</p>
<p>E+</p>
<p>E+4</p>
<p>E+F</p>
<p>E+T</p>
<p>E</p>
<p>En</p>
<p>L</p>
</div>
</td>
<td align=left>
<br>
<p>-</p>
<p>3</p>
<p>3</p>
<p>3</p>
<p>3-</p>
<p>3-5</p>
<p>3-5</p>
<p>15</p>
<p>15</p>
<p>15-</p>
<p>15-4</p>
<p>15-4</p>
<p>15-4</p>
<p>19</p>
<p>19-</p>
<p>19</p>
</td>
<td align=left valign=top>
<br><br><br><br><br>
<p>F -> digit</p>
<p>T -> F</p>
<br><br><br><br>
<p>F -> digit</p>
<p>T -> T*F</p>
<p>E -> T</p>
<br><br><br><br>
<p>F -> digit</p>
<p>T -> F</p>
<p>E -> E+T</p>
<br><br>
<p>L -> En</p>
</td>
</tr>
</table>
<br>
<table><tr><td>    </td>
<td class="content">
<p>我们讨论一下在遇到符号3时的移动序列。第一步,分析器把符号<b>digit</b>(它的属性值为3)的相应状态移人栈中(状态由3代表,并且值3存放在val域中)。第二步,分析器通过产生式F→<b>digit</b>进行归约,并执行语义规则F.val:=<b>digit</b>.lexval。第三步,分析器通过T→F进行归约,没有代码段与这个产生式相对应,所以val数组没有改变。注意,每次归约后,val栈顶存放的是归约所用产生式的左边符号的属性值。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>
在上面描述的实现中,代码段刚好在归约以前执行。归约提供了一个“挂钩”,使得代码段中的动作能够与之相联。也就是说,我们可以允许用户把一个语义动作与一个产生式联系起来,这个动作是当利用该产生式进行归约时要被执行的。在5.6节中,我们将看到有很大一类语法制导定义可以在自底向上的分析过程中实现。
</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='5.3.1.htm'" ></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.4.0.htm'"></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -