#编译原理# 概论(一) (2)

从四元式形式的中间代码可知,第一句是常量的计算,所以为了进行优化可以在编译时计算出结果放在工作单元中,这样不必每次都生成目标指令计算。

 

#编译原理# 概论(一)

然后还可以对临时工作单元的数量进行优化:T2变为T1,此时便可减少一个单元的使用。

 

5.生成目标程序:

生成中间代码后,便很容易生成目标程序(地址指令序列)了,这部分工作和机器关系很密切,所以需要根据具体机器进行。在这部分工作需要注意充分利用累加器,生成时也可进行优化处理。(该过程需要保持语义的等价性)

 

1.3 编译程序的构造 1.3.1 逻辑结构

根据逻辑功能不同,可将编译过程划分为五个基本阶段,相对应可以将实现整个编译过程的编译程序划分为五个逻辑阶段:

 

#编译原理# 概论(一)

五个阶段都要做两件事:建表和查表和出错处理,即编译程序中都要包括表格管理和出错处理两部分

表格管理(建表和查表):

即及时的把源程序中的信息和编译过程中所产生的信息登记在表格中,而在随后的编译过程中同时又要不断地查找这些表中的信息,编译过程贯穿着建表和查表的工作。

出错处理:

规模较大的源程序难免有多种错误,编译程序必须要有出错处理的工作,即能诊断出错误,并向用户报告错误性质和位置,以便用户修改源程序。出错处理能力的优劣是衡量编译程序质量好坏的一个重要指标。

#编译原理# 概论(一)

如上便是典型编译程序的七个逻辑部分,五个逻辑阶段加上两个一直需要进行的工作。

 

1.3.2 遍(pass)

遍:对源程序(包括源程序的中间形式)从头到尾扫描一次,并作有关的加工处理,生成新的源程序中间形式或目标程序,通常称之为一遍:

#编译原理# 概论(一)

一次遍就是完成五个基本阶段的工作,需要经过几次扫描处理

一次扫描就可完成整个编译工作的称为“一遍扫描编译程序”,一遍扫描的编译程序以语法分析程序为核心。

分遍可为编译程序的移植创造条件,主要缺点是增加了不少的重复性工作。

其结构为:

 

#编译原理# 概论(一)

start pass到over pass(SP,OP大概是这个意思)

 

1.3.3 前端和后端

根据编译程序各部分的功能可将编译程序分成前端和后端

前端:和源程序、源语言有关的这一部分、包括词法分析、语法分析、语义分析、中间代码生成、代码优化这些分析部分

后端:和目标机有关的部分,包括目标程序生成,和目标机有关的优化这些综合部分

划分的原因:

这是一种传统方法,可以实现采用同一个编译程序的前端,金改写后端便可生成不同目标机上的相同源语言的编译程序,并且还可以前后端并行进行工作。

 

1.4 编译程序的前后处理器

左为前,右为后

源程序:多文件、宏定义和红调用,包括文件

目标程序:一般为汇编程序或可重定位的机器代码

 

#编译原理# 概论(一)

 

1.5 编译技术的应用

语法制导的结构化编译器,程序格式化工具,软件测试工具,程序理解工具,高级语言的翻译工具等等。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygxdf.html