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

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

<p><br>
<br>
<font class="title2"><b>7.4.4 控制流语句中的布尔表达式的翻译</b></font> </p>

<table>
  <tr>
    <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
    <td class="content">现在我们讨论表7.4中为布尔表达式E生成的代码E.code。 
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;如我们所指出的,E被翻译为一序列条件转移和无条件转移三地址代码语句。这些转移语句转移到达的位置是E.true,E.false两者之一。E.true表示E为真时控制到达的位置,而E.false表示E为假时控制到达的位置。于是根据转移到达的不同位置可作为计算E的结果。 
    <br>
    &nbsp;&nbsp;&nbsp; 这种翻译的基本思想如下面所叙述的。假定E形如a<d则将生成如下的E的代码: 
    <br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if a<b goto E.true <br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto E.false <br>
    </td>
  </tr>
</table>

<p align="center">表7.5 &nbsp;产生布尔表达式三地址代码的语法制导定义 </p>

<table width="90%" align="center" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td width="30%" height="30" align="center">Productions</td>
    <td width="70%" align="center">Semantic Rules</td>
  </tr>
  <tr>
    <td valign="top"><br>
    <p>&nbsp;E -&gt; E<sub>1</sub> <b>or</b> E<sub>2</sub></p>
    <p><br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    </p>
    <p>&nbsp;E -&gt; E<sub>1</sub> <b>and</b> E<sub>2</sub></p>
    <p><br>
    <br>
    <br>
    <br>
    <br>
    <br>
    </p>
    <p>&nbsp;E -&gt; <b>not</b> E<sub>1</sub></p>
    <p><br>
    <br>
    <br>
    </p>
    <p>&nbsp;E -&gt; (E<sub>1</sub>)</p>
    <p><br>
    <br>
    </p>
    <p>&nbsp;E -&gt; <b>id</b><sub>1</sub> <br>
     &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<b>relop id</b><sub>2</sub></p>
    <p><br>
   
    
    </p>
    <p>&nbsp;E -&gt; <b>true</b></p>
    <p>&nbsp;E -&gt; <b>false</b></td>
    <td valign="top"><br>
    &nbsp;&nbsp;E<sub>1</sub>.true := E.true;<br>
    &nbsp;&nbsp;E<sub>1</sub>.false := newlabel;<br>
    &nbsp;&nbsp;E<sub>2</sub>.true := E.true;<br>
    &nbsp;&nbsp;E<sub>2</sub>.false := E.false;<br>
    &nbsp; E.code := E<sub>1</sub>.code || gen(E<sub>1</sub>.false ':') <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| E<sub>2</sub>.code<br>
    &nbsp;&nbsp;<br>
    &nbsp; E<sub>1</sub>.true := newlabel;<br>
    &nbsp;&nbsp;E<sub>1</sub>.false := E.false;<br>
    &nbsp;&nbsp;E<sub>2</sub>.true := E.true;<br>
    &nbsp;&nbsp;E<sub>2</sub>.false := E.false;<br>
    &nbsp;&nbsp;E.code := E<sub>1</sub>.code || gen(E<sub>1</sub>.true ':') <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| E<sub>2</sub>.code <br>
    &nbsp;&nbsp;<br>
    &nbsp; E<sub>1</sub>.true := E.false;<br>
    &nbsp;&nbsp;E<sub>1</sub>.false := E.true;<br>
    &nbsp; E.code := E<sub>1</sub>.code &nbsp;&nbsp;<br>
    <br>
    &nbsp; E<sub>1</sub>.true := E.true;<br>
    &nbsp;&nbsp;E<sub>1</sub>.false := E.false;<br>
    &nbsp; E.code := E<sub>1</sub>.code &nbsp;&nbsp;&nbsp;<br>
    <br>
    &nbsp;&nbsp;E.code := gen('if' <b>id</b><sub>1</sub>.place <b>relop.</b>op<br>     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
       <b>id</b><sub>2</sub>.place'goto' E.true)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;|| gen('goto' E.false) <br>
    &nbsp;&nbsp;<br>
    &nbsp;&nbsp;E.code := gen('goto' E.true) &nbsp;&nbsp;<br>
    <br>
    &nbsp;&nbsp;E.code := gen('goto' E.false) <br>
    </td>
  </tr>
</table>

<p><br>
</p>

<table align="right" width="300">
  <tr>
    <td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'"
    onclick="vbscript:window.location.href='7.4.3c.htm'" ></td>
    <td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'"
    onclick="vbscript:window.location.href='7.4.4b.htm'" ></td>
  </tr>
</table>
</body>
</html>

<html><script language="JavaScript">

⌨️ 快捷键说明

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