引论
1.编译程序的概念及功能
1.1.为什么要用编译器
编译器中的编译程序要把高级语言翻译成机器语言,机器语言能运行
1.2.翻译程序
接受某种语言的源语言程序后,将它改造成另一种逻辑上等价的目标语言程序。
汇编程序:源语言为汇编语言,目标语言为机器语言的翻译程序。
1.3.编译程序
源语言为高级语言,目标语言是低级语言(汇编或机器语言)的翻译程序,而后者与前者在逻辑上是等价的。
宿主机:运行编译程序的计算机
目标机:运行编译程序产生目标代码的计算机 。
编译程序实现语言:用于生成编译程序的语言。
1.4.编译程序与解释程序
解释程序:以源程序为输入,在执行过程中不再产生目标程序,而是边解释边执行。运行效率不高,空间开销大。
1.5.编译器的发展阶段
2.编译程序的逻辑结构及过程概述
2.1.编译程序的结构
2.2.编译程序的主要过程
词法分析
输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个一个的单词
遵循词法规则
语法分析
在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位
遵循语法规则,常用的语法规则用上下文无关文法描述
语义分析和中间代码的产生
对语法分析所识别出的各类语法范畴分析其含义,并进行初步翻译,产生中间代码;依循的是语言的语义规则
静态语义检查
中间代码的翻译
优化
对前一阶段产生的中间代码进行加工交换,以期在最后阶段能够产生出运行效率更高的(省时间和空间)的目标代码
等价变换原则
目标代码的生成
把中间代码(或经过优化处理之后)变换成特定机器上的低级语言代码。
2.3.表格和表格管理
符号表:用来登记源程序中出现的每个名字以及名字的各种属性
编译各阶段都涉及到构造、查找或更新有关的表格。
2.4.出错处理
编译程序在各个阶段应诊断和报告源程序中的错误,报告出错地点,并给出简明准确的提示信息
词法分析阶段能够检测出“非法字符”之类的错误
语法分析阶段能够检测出诸如“括号不匹配”、“缺少;”之类的错误。
语义错误包括:说明错误、作用域错误、类型不一致等。
3.编译程序(器)的组织
3.1.前端与后端
前端:主要与源语言有关但与目标机无关的那些部分,一般包括:词法分析、语法分析、语义分析与中间代码产生等;
后端:包括编译程序中与目标机有关的那些部分,如与目标机有关的代码优化和目标代码生成等。后端不依赖于源程序而仅仅依赖于中间语言。
3.2.遍(PASS)(趟)
对输入文件(源程序或其等价的中间形式)从头到尾扫描,完成预定的处理,生成新的中间结果或目标程序。
3.3.分析与综合
分析:词法分析、语法分析、语义分析
综合:中间代码的产生、优化、目标代码的产生
4.编译程序的生成
4.1.T形图
4.2.编译程序的自展
我的理解:step3中A将S编译成A,S与A等价,既然S可以将L编译成A,那么A也可以将L编译成A。
4.3.已知一种语言的编译器,构造另一种语言的编译器
4.4.编译程序的移植
利用A机器上已有的高级语言L编写一个在B机器上运行的高级语言L的编译程序。
做法(一次编程两次编译)
(1)先用L语言编写产生B机器代码的L编译程序源程序R
(2)R经过A机器上的L的编译程序编译后,生成能够在A机器上运行的、产生B机器代码的目标程序(编译程序)I
(3)现在我们可以用I编译R,就产生了上述的P程序,P程序由B机器代码构成,因而可以在B机器上运行,而P的作用正是将L语言编译成能够在B机器上运行的、由B机器代码构成的目标程序。
4.5.具有代表意义的自动化编译工具
Flex
bison++
GAG(Generator based on Attributed Grammars), HLP(Helsinki Language Processor)
SIS(Semantics Implementation System)
CGSG(Compiler Generator for Semantics Grammars)
4.6.NET的公共语言运行环境