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

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

<table><tr><td></td>
<td class="content">
<P>
根据Pascal作用域规则,在执行f期间对x的访问应是main中说明的x, 访问应是过程P中说明的i。然而,P把f作为参数传给q,q实际上借助于形参名r调用f。q中有i和x两者的说明,执行f时,不允许f访问q中说明i和x。一般的答案是,执行作为参数被传递的过程时,一个非局部访问的含义和此过程作为一个实在参数出现在参数表那点被调用时的含义相同。例如,图6.24的程序中,函数f作为一个实在参数出现于P过程调用q过程的参数表中,在f中x和i的非局部访问的所有含义仅是当f在P中调用q的地方被调用时访问x和i的含义,而与以后调用f的地点无关。 
</p>
</td></tr></table>

<table><tr><td></td>
<td class="content">
<P>
为了正确实现作为参数传递的过程内部的非局部访问,必须在调用此过程处建立正确的非局部环境,使得它在正确的非局部环境下运行 。根据上节的讨论,使用访问链实现了非局部访问是很直观的。所必须做的是,确定这个实现过程参数的访问连接指针,作为传递信息的一部分和过程参数一起传送。因此,过程参数成了一个指示器对(CP,SCP)其中CP是指向目标代码的指针,而SCP是执行此过程的访问连接指示器。可以把这个对传送很多层,直到启动此过程为止。那是,产生此过程的活动记录,置上传递来的SCP,然后,开始执行此过程的目标代码。  
</p>
</td></tr></table>

<table><tr><td></td>
<td class="content">
<P>
图6.25说明了之行图6.24中的Pascal程序的主要步骤。为了说明子程序参数的传递和非局部环境的建立,这个图中显示出程序执行链点的访问联结指示器。 
</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.4b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.6.0.htm'"></img></td>
</tr>
</table>

</BODY>

⌨️ 快捷键说明

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