⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5.4.2.htm

📁 建立《编译原理网络课程》的目的不仅使学生掌握构造编译程序的原理和技术
💻 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>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
一个翻译模式就是一个上下文无关文法的一种便于翻译的书写形式。其中属性与文法符号相对应,包含在花括号{           
}中的语义动作可被插入到产生式右部的中间的合适的位置上。这样,翻译模式给出了使用语义规则进行计算的顺序。于是,可以把翻译模式看成是分析过程中翻译的注释。
</p>
</td>
</tr>
</table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>这一章中考虑的翻译模式中可以具有综合属性和继承属性。
</p>
</td></tr></table>



<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
<b>例5.12</b><b> </b>式子(5.1)是一个简单的翻译模式,它把带有加号和减号的中缀表达式翻译成相应的后缀表达式。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</p>
</td>
</tr>
</table>




<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E→TR<br>         
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R→<b>addop</b> T {print(<b>addop</b>.lexeme)}R<span class="down"><sub>1</sub></span>|ε&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(5.1)<br>         
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       
T→<b>num</b>{print(<b>num</b>.val)}
</p>
</td>
</tr>
</table>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
图5.10表示的是翻译模式下对于输入9一5+2的分析树。每一个语义动作都作为相应产生式左边结点的子结点。实际上,我们把语义动作看成是终结符号。并且一般用助记符号来表示这些语义动作,例如{         
print('5') }表示动作执行时要打印出数5。在符号<b>num</b>和<b>addop</b>处,我们表示出了实际的数和+或一运算符号,当按深度优先执行图5.10中的动作后,打印出9         
5-2+。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</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>&nbsp&nbsp&nbsp&nbsp</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。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      
</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 + -