📄 9.5.3.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='9.5.2_2.htm'" ></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.5.3_2.htm'" ></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>9.5.3 结构化程序的数据流分析</b></font>
<table>
<tr>
<td>    </td>
<td class="content">
<p>
控制流结构,如do-while语句的流图有很好的性质:
</p>
<p>
1、控制只能从一个点进入;2、该语句执行结束时,控制只能从一个结束点离开。在谈论定值到达语句的开始和结束时,我们用下面的语法:
</p>
         S→id:=E│S;S│if E then S else S│do S while E <br>
         E→id+id│id <br>
来开拓这种性质。这个语言的表达式类似中间语言的表达式,但是语句的流图限制到图9.27(1)建议的形式。本节的基本目的是研究总结图9.27(2)的数据流方程。(点击<a href="9.5.3_1.htm">此处</a>可看图9.27(1)和图9.27(2)) <br>
<p>
<font class = "definition2">区域</font>:流图的一部分叫做区域。区域是结点集合N,包括一个首结点,它是该区域中所有其它结点的必经结点。N中结点间的所有边都在这个区域中,可能除了某些到达首结点的边。(循环是区域的特殊情况,它是强连通的,且包含所有到达首结点的回边。)
</p>
<p>
流图中对应到语句S的这一部分是一个区域,它遵守进一步的限制,当控制离开这个区域时,它总是流向外面某个固定的基本块(一个出口)。例如:<a href="9.5.3_1.htm">图9.27(2)</a>
</p>
<p>
为了技术上的方便,我们假定存在没有语句的虚块(在<a href="9.5.3_1.htm">图9.27(2)</a>中用小圆圈表示),控制流在进区域前先通过虚块,在离开区域前也先经过虚块。在语句区域入口和出口虚块的开始点分别是该语句的开始点和结束点。
</p>
<p>
下面我们给出图9.27(2)各种语句S的gen[S], kill[S], in[S], out[S]的归纳定义或语法制导定义,然后依次对它们进行分析。
</p>
<p>
先分析gen[S]和kill[S]。集合gen[S]和kill[S]都是综合属性,它们自底向上地计算,从最小语句到最大语句。
</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='9.5.2_2.htm'" ></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.5.3_2.htm'" ></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -