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

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

<font class="title2"><b>6.1 有关源语言中的一些问题的讨论</b></font>        
<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
为了说明方便,我们假设一个程序是由若干个过程组成的,如在Pasca1中的那样。在这一节中,读者要注意区分一个过程的源程序正文和其运行时刻的活动。 
</td></tr></table>

<hr size=2 color=red width=90%>

<font class="title2"><b>6.1.1 过程</b></font>        
     
<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
    (1)&nbsp;&nbsp;<B>program</B>&nbsp;sort(input,output);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>var</B>&nbsp;a:array[0..10]&nbsp;of integer;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>procedure</B> readarray;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>var</B> i:integer:
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>begin</B>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(6)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i:=1 to 9 do read(a[i]);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(7)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>end</B>;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(8);&nbsp;&nbsp;&nbsp;&nbsp;<B>function</B>&nbsp;partition(y,z:integer):integer;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(9)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>var</B>&nbsp;i,j,x,v:integer;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(10)&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;<B>begin</B>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(11)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>end</B>;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(12)&nbsp;&nbsp;&nbsp;&nbsp;<B>procedure</B>&nbsp;quicksort(m,n:integer);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(13)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>var</B>&nbsp;i:integer;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(14)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>begin</B>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(15)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>if</B>(n>m)&nbsp;<B>then</B>&nbsp;<B>begin</B>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(16)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i:=partition(m,n);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(17)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quicksort(m,i-1);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(18)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quicksort(i+1,n);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(19)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>end</B>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(20)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>end;</B>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(21)&nbsp;&nbsp;&nbsp;&nbsp;<B>begin</B>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(22)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[0]:=-9999;&nbsp;a[10]:=9999;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(23)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readarray;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(24)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quicksort(1,9);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;(25)&nbsp;&nbsp;&nbsp;&nbsp;<B>end</B>
<p>&nbsp;&nbsp;&nbsp;
<B>图6.1</B> 读入整数并排序的一个Pascal程序
<P>
</p>
</td></tr></table>
<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
一个<B>过程定义</B>就是一个说明,其最简单的形式是把一个标识符和一个语句联系起来。标识符就是<B>过程的名字</B>,语句是<B>过程体</B>。例如,图6.1的pascal代码的(3)到(7)行中包含了一个名为readarray的过程的定义,过程体在(5)到(7)行中给出。之后,在(8)到(11)行中包含了一个名为partition的过程,等等。在许多语句中把返回值的过程称为<B>函数</B>;然而,把函数也作为过程来处理是很方便的。同时,一个完整的程序也可以作为一个过程看待。
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
当一个过程名出现在一个可执行的语句中时,我们就说这个过程在这一点被调用。过程调用的基本思想是执行过程体。图6.1的(21)到(25)行中的主程序在(23)行调用过程readarray,然后在(24)行调用过程quicksort。我们注意到,过程调用也可以发生表达式中,如(16)行。这一情况有时也称作是函数调用或函数引用。 
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
出现在过程定义中的有一些标识符是特殊的,被称为过程的形式参数(简称形参)。例如,第(12)行中的标识符m和n是过程quicksort的形式参数。与之相对应的是实在参数(简称实参),我们可以把它们传递给被调用过程,在过程体中用实参代替形参。在6.5节中,我们将讨论建立形式参数和实在参数之间对应关系的方法。图6.l中第(18)行是对一个带有实在参数i+1和n的过程quicksort的调用。
</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='c_6.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.1.2.htm'"></img></td>
</tr>
</table>

</BODY>

<html><script language="JavaScript">

⌨️ 快捷键说明

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