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

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

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
      <p><b>例8.2</b>图8.4中的程序是6.1节所讨论的一个Pascal程序的三地址代码的简写。由于过程q是递归的,在同一时刻可能有q的多个活动记录存活。</p>
      <p>假定过程s,p及q的活动记录的大小已在编译时刻确定为ssize,psize及qsize,活动记录中的第一个字将存放返回地址。另外我们还假定这些过程代码分别从地址100、200及300开始,并且栈从地址600开始。图8.4中的三地址代码的目标代码如图8.5所示。</p>
      <center>
      三地址代码<br>      <table width="27%" border="1" cellspacing=0 cellpadding=5 align="center">
        <tr> 
          <td> 
            <div align="center">/* s的代码 */</div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">action<sub>1</sub></div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">call q</div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">action<sub>2</sub></div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">halt</div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">/* p的代码 */</div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">action<sub>3</sub></div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">return</div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">/* q的代码 */</div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">action<sub>4</sub></div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">call p</div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">action<sub>5</sub></div>
          </td>
        </tr>
        <tr> 
          <td height="19"> 
            <div align="center">call q</div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">action<sub>6</sub></div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">call q</div>
          </td>
        </tr>
        <tr> 
          <td> 
            <div align="center">return</div>
          </td>
        </tr>
      </table>
      <br> 图8.4解释栈式分配的三地址代码
      </center>
      <p>我们假定ACTION<sub>4</sub>中包含一个条件转移指令转移到q的返回序列即地址456。否则,递归程序q必然会永远递归调用下去。</p>

</td></tr></table>


<p>
<table align=right width=300>
<tr>
<td>
<img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.2.2b.htm'" width="24" height="24"></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.2.2d.htm'" width="26" height="24"></img></td>
</tr>
</table>

</BODY>
</html>

⌨️ 快捷键说明

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