📄 1.5.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='1.4.1b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='../c_2/2.0.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>1.5 构造编译器的工具 </b></font>
<table><tr><td>    </td>
<td class="content">
<p>
象任何程序员一样,编译器的编制者可以利用象调试程序,版本管理程序和分布图程序等软件工具。除了那些软件开发工具外,更加专用的,帮助实现编译的各个阶段的工具已经开发出来,我们在此概述这些工具。
</p>
<p>
在第一批编译器问世不久,帮助编写编译器的系统就出现了,这些系统一般称为<font class="emphasize">编译器的编译器、编译器的生成器或翻译器的编写系统</font>。它们大都面向某一类语言,适合于产生那一类语言的编译器。
</p>
<p> 已经出现一些通用的工具,用于编译器的某个部分的自动设计,这些工具用专门的语言来描述和实现这个部分,很多工具使用相当复杂的算法。最成功的是那些工具,他们掩蔽了生成算法的细节,所生成的部分可以很容易地并入编译器的其它部分。下面是一些有用的编译器构造工具:</p>
<p>1.<font class="emphasize">分析器的生成器</font> 它们生成语法分析器,通常是基于上下文无关文法。早期的编译器中,语法分析不仅耗费了编译器运行时间的大部分,而且也占据了编写编译器的智力上努力的大部分。这个阶段现在已经被认为是最容易实现的阶段之一。</p>
<p>2.<font class="emphasize">扫描仪的生成器</font> 它们自动生成词法分析器,通常是基于正规式说明,生成的词法分析器的基本组织形式实际上是有限自动机,这些问题在第三章讨论。</p>
<p>3.<font class="emphasize">语法制导的翻译工具</font> 它们产生一些子程序,这些子程序遍历分析树,产生中间代码。基本的想法是,分析树上的每个站点和一个或多个“翻译”相结合,每个翻译根据树中和它相邻节点的翻译来定义。</p>
<p>4.<font class="emphasize">自动的代码生成器</font> 这些工具需要一个规则集合,这些规则定义中间语言的每个操作到目标语言的翻译。这些规则必须足够详细,以便管理对数据的不同访问方式。例如变量可以在寄存器中,在固定(静态)的存储单元,或分配在栈中某一位置。基本技术是“模式匹配”,中间代码的语句由代表一串机器指令的“模式”来代替,模式匹配时,根据变量可能有的存储方式,逐个地进行选择。由于变量的存放位置有很多可能,因此,用一给定的模式集合,可以产生多个目标代码版本。
</p>
<p>5.<font class="emphasize">数据流工具</font> 完成精致的代码优化所需的信息大都包含在“数据流分析”中,它收集值是怎样从程序的一点传到其它部分。这种性质的不同任务本质上可以由同一子程序完成,只要提供给它中间代码的语句和被收集信息的联系。</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='1.4.1b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='../c_2/2.0.htm'"></img></td>
</tr>
</table>
</BODY>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -