📄 5.4.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='5.4.1.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.4.2_1.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>5.4.2 翻译模式</b></font>
<table>
<tr>
<td>    </td>
<td class="content">
<p>
一个翻译模式就是一个上下文无关文法的一种便于翻译的书写形式。其中属性与文法符号相对应,包含在花括号{
}中的语义动作可被插入到产生式右部的中间的合适的位置上。这样,翻译模式给出了使用语义规则进行计算的顺序。于是,可以把翻译模式看成是分析过程中翻译的注释。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>这一章中考虑的翻译模式中可以具有综合属性和继承属性。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
<b>例5.12</b><b> </b>式子(5.1)是一个简单的翻译模式,它把带有加号和减号的中缀表达式翻译成相应的后缀表达式。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p> E→TR<br>
R→<b>addop</b> T {print(<b>addop</b>.lexeme)}R<span class="down"><sub>1</sub></span>|ε (5.1)<br>
T→<b>num</b>{print(<b>num</b>.val)}
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>
图5.10表示的是翻译模式下对于输入9一5+2的分析树。每一个语义动作都作为相应产生式左边结点的子结点。实际上,我们把语义动作看成是终结符号。并且一般用助记符号来表示这些语义动作,例如{
print('5') }表示动作执行时要打印出数5。在符号<b>num</b>和<b>addop</b>处,我们表示出了实际的数和+或一运算符号,当按深度优先执行图5.10中的动作后,打印出9
5-2+。
</p>
</td>
</tr>
</table>
<br>
<p align=center><img src="images/5_10.gif"></p>
<p align=center>图5.10 9-5+2的带有动作的分析树</p>
<table><tr><td>    </td>
<td class="content">
<p>
上面的9 5一2+是一个用后缀表示法表示的表达式。所谓后缀表示法(postfix
notation)是指把运算符号写在运算对象后面的一种无括号的表示法。例如b+c用后缀表示法书写时,就写成bc+。又如a*(b+c)用后缀表示法书写时,应写成abc+*。这表示b与c相加得到的结果与a相乘。而9
5-2+则表示9减5得到的结果与2相加。而前缀表示法(prefix
notation)是指把运算符号写在运算对象前面的一种无括号表示法。例如(a+b)*(c-d)
可表示作:*+ab- cd。中缀表示法(infix notation)是我们熟悉的表示法,是指把运算符号写在两个运算对象中间的表示法,允许括号出现。例如(a-b)*c。
</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.4.1.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.4.2_1.htm'"></img></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -