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

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

<font class="title2"><b>9.5 全局数据流分析介绍</b></font>            


<table>
<tr>
<td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
数据流信息可以由建立和解方程来收集,这些方程联系程序不同点的信息。典型的方程形式为
</p>
<p>
&nbsp&nbsp&nbsp&nbsp	out[s]=gen[s]∪(in[s]-kill[s]) (9.5)
</p>
<p>
这个方程的意思是,当控制流通过一个语句时,在语句末尾的信息是在这个语句中产生的信息,或是进入语句开始点并且没有被这个语句注销的信息。这样的方程叫做数据流方程。
</p>
<p>
怎样建立和解数据流方程依赖三个因素:
</p>
<p>
1、产生和注销的概念依赖于所需要的信息,即依赖于数据流方程所要解决的问题。而且,对某些问题,不是沿着控制流前进,由in[S]来定义out[S],而是反向前进,由out[S] 来定义in[S]。
</p>
<p>
2、因为数据沿控制路径流动,所以数据流分析受程序控制结构影响。事实上,当我们写out[S]时,隐含地认为控制流从语句唯一的出口点离开这个语句。通常方程是在基本块一级建立而不是在语句级建立,因为基本块有唯一的出口点。
</p>
<p>
3、随着过程调用、通过指针赋值、甚至对数组下标变量的赋值等语句的执行,会出现一些难以捉摸的问题。
</p>
<p>
本节,我们考虑<font class = "emphasize2">如何确定到达程序一个点的定值集合和如何用它寻找常量合并机会</font>。在本章的后面,代码外提和归纳变量删除的算法也将使用这些信息。
</p>
<p>
首先考虑使用if 和do-while语句构造的程序,这些程序的控制流是已知的,它允许我们集中于建立和解数据流方程需要的概念。在这一节中,赋值有复写语句或形式为a:=b+c的语句。这一章,我们经常用+作为典型的算符,所有讨论的结果可直接用于其它算符,包括那些只有一个运算对象或多于两个运算对象的算符。
</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.4.5_2.htm'" ></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.5.1.htm'" ></td>
</tr>
</table>

</BODY>
<html><script language="JavaScript">

⌨️ 快捷键说明

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