📄 6.3.0b.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.3.0.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.0c.htm'"></img></td>
</tr>
</table>
<br><br>
<table>
<tr>
<td>    </td>
<td class="content">
<table><tr><td>    </td>
<td class="content">
<p>(1)<font color="#0000FF">PROGRAM</font> CNSUME <br>
(2) <font color="#0000FF">CHARACTER</font> * 50 BUF <br>
(3) <font color="#0000FF">INTEGER</font> NEXT <br>
(4) <font color="#0000FF">CHARACTER</font> C,PRDUCE <br>
(5) DATA NEXT/1/,BUF/ ''/ <br>
(6) C=PRDUCE()。
<br>
(7) BUF(NEXT:NEXT)=C
<br>
(8) NEXT=NEXT+1
<br>
(9) <font color="#0000FF">IF</font>(C.NE.'
' 〕<font color="#0000FF">GOTO </font>6 <br>
(10) WRITE(*,'(A)')BUF
<br>
(11) <font color="#0000FF">END</font> <br>
(12)<font color="#0000FF">CHARACTER</font> <font color="#0000FF"> FUNCTION</font> PRDUCE() <br>
(13) <font color="#0000FF">CHARACTER</font> * 80 BUFFER <br>
(14) <font color="#0000FF">INTEGER</font> NEXT <br>
(15) SAVE BUFFER,NEXT <br>
(16) DATA NEXT/81/ <br>
(17) <font color="#0000FF">IF</font>(NEXT.GT.80)<font color="#0000FF">THEN</font>
<br>
(18) READ(*,'(A)')BUFFER
<br>
(19) NEXT=1
<br>
(20) <font color="#0000FF">END IF</font> <br>
(21) PRDUCE=BUFFER(NEXT:NEXT)
<br>
(22) NEXT=NEXT+1
<br>
(23) <font color="#0000FF">END</font> </p>
<p> <br>
图6.8 一个Fortran 77程序 </p>
<p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
Fortran的设计允许使用静态存储分配。我们知道,一个Fortran程序由一个主程序、若干子程序和函数(可以都称为过程)组成。见图6.8中的Fortran 77程序。使用图6.6中的内存组织,程序的代码和活动记录的设计如图6.9所示。在CNSUME的活动记录之中,有局部名字BUF,NEXT和C的空间。BUF对应的存储空间存放一个包含50个字符的串。其后跟有存放NEXT的整数值空间和存放C的字符值的空间。注意,NEXT在PRDUCE中又被说明这一事实是不成问题的,因为两个过程中的局部名字各自在它们自己的活动记录中占有空间。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
由于可执行的代码和活动记录的大小在编译时刻都是可知的,因此,使用不同于图6.9的内存组织也是可能的。譬如Fortran编译程序可以把过程的活动记录与这个过程的目标代码放在一起。
</td></tr></table>
<br>
<center><img src="images/6_9.gif"></center>
<br>
<br>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.0.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.0c.htm'"></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -