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

📄 6.5.4.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='6.5.3.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.5.4b.htm'"></img></td>
</tr>
</table>
<br><br>

<font class="title2"><b>6.5.4 传名调用</b></font>         

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
这是Algol60所定义的一种特殊的参数传递方式。传名调用(call-by-name)由Algol中的复制规则(copy一rule)定义为: 
</p>
</td></tr></table>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
1.过程被当作宏对待。过程调用的作用相当把被调用过程的过程体复制到调用出现的地方,但把其中任何一个出现的形式参数都文字地替换成相应的实在参数。这种文字上的替换称为宏扩展(macro expansion)。  
</p>
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
2.被调用过程中的局部名字要保持与调用过程中的名字不同。因此可以考虑在作宏扩展以前,对被调用过程中的每一个名字都系统地给以重新命名,即给以一个不同的新的名字。 
</p>
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
3.为了表现实在参数的整体性,可以把实在参数用括号括起来。 
</p>
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
例如,对于例6.6中的调用swap(i,a[i]),假定采用传名调用方式传递参数,则可实现如下: 
</p>
</td></tr></table>
    


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp:=i <br>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i:=a[i](注意此处i值得以改变) <br>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[i]:=temp (此a[i]不是原来的a[i]) 
</p>
</td></tr></table>
    

<table><tr><td></td>
<td class="content">
<P>
显然,这和例6.6中所得到的结果是不一样的。 
<p>
</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='6.5.3.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.5.4b.htm'"></img></td>
</tr>
</table>

</BODY>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -