📄 6.1.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='6.1.1.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.1.2b.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>6.1.2 活动树 </b></font>
<table><tr><td>    </td>
<td class="content">
<p>
在程序的执行期间,对于过程之中的控制流,我们作如下的<font color="blue">假设</font>:
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
1.控制是顺序流动的;即程序的执行包括一序列的步骤。在每一步中,控制存在于程序中的某一个特殊的点上。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
2.过程的每一次执行都是从过程体的开头开始,并最终把控制返回到紧接着该过程被调用点的后面。这意味着,过程之间的控制流可以用树来描述。下面我们将看到这样的描述。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
过程体的每一次执行都被看成是过程的一次活动。一个过程p的一次活动的生存期是在该过程体的执行中的第一步和最后一步之间的一序列步骤的执行时间,其中包括执行过程p所调用的过程的时间,以及这些过程所调用的过程的时间,如此等等。总之,术语“生存期”是指在程序执行期间的一个连续序列的步骤。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
在类似Pascal的语言中,每一次控制从过程p进入到过程q,它最终还要返回到过程p(没有致命错误的情况下)。更精确地说,每当控制流从过程p的活动进入到过程q的活动中时,它将返回到过程p的同一次活动中。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
如果a和b是两个过程活动,那么它们的生存期要么是不重叠的,要么是嵌套的。即如果在离开a以前进入b的话,那么控制必须在离开a以前离开b。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
这种活动生存期的嵌套性质可以通过在每一个过程中插入两个打印语句来加以说明。一个打印语句放在过程体的第一个语句之前,另一个打印语句放在过程体最后一个语句之后。第一个打印语句印出enter,后面跟有过程名和实在参数的值;最后的打印语句印出1eave,后面跟有与enter后面相同的信息。在图6.l中加入打印语句的程序执行后,输出的结果如图6.2所表示的。活动quicksort(1,9)的生存期从执行打印enter quicksort(1,9)开始到打印leave quicksort(1,9)后结束。在图6.2中,我们假设partition(1,9)返回的值为4。
</td></tr></table>
<table><tr><td>   </td>
<td class="content">
<p>
执行开始…<p> enter readarray
<BR> leave readarray
<BR> enter quicksort(1,9)
<BR> enter partition(1,9)
<BR> leave partition(1,9)
<BR> enter quicksort(1,3)
<BR> ...............
<BR> leave Quicksort(1,3)
<BR> enter Quicksort(5,9)
<BR> ...............
<BR> leave quicksort(5,9)
<BR> leave quicksort(1,9)
<BR> 执行结束
<p>
<P>
<B>图6.2</B> 在图6.1中的过程所给出的活动的输出
<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.1.1.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.1.2b.htm'"></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -