编译原理
第一章 关于编译程序的基本概念
计算机中语言的层次体系(也可以说是语言之间的翻译模式):
1.1 编译器与解释器
1.1.1 编译器
编译程序
是一种翻译程序
,它特指把某种高级程序设计语言
翻译成具体计算机上的低级程序设计语言
。
源程序的翻译和翻译后程序的运行是两个独立的不同阶段。
- 编译阶段:用户输入源程序,经过编译器处理,生成目标程序。
- 运行阶段:目标程序的运行阶段,根据目标程序的要求进行适当的数据输出,最终得到运行结果。
1.1.2 解释器
解释程序
也是一种翻译程序,将某高级语
翻译成具体计算机上的低级程序设计语言
。
解释器将翻译和运行结合起来,翻译一段源程序,紧接着就执行。
解释程序的执行过程如下图:
1.1.3 二者的主要区别
运行目标程序时的控制权在解释器而不在目标程序。
(1)编译器有目标程序,解释器没有。
(2)编译器运行效率高,解释器便于人机对话。
解释器的优点:
(1)具有较好的动态特性。
(2)具有较好的可以执行。
缺点:
(1)时间上:在运行过程中,解释器要时间来检查源程序。
(2)空间上:执行解释时,不但要有用户程序的运行空间,而且解释器和相应的运行支撑系统也要占据内存空间。
1.2 编译器的逻辑结构
编译器工作的阶段可以分成五个阶段或者六个阶段。
1.3 编译器的实现机制
遍
:编译程序对源程序或等价程序从头至尾扫描的次数
。
根据语言和环境的不同,编译程序实现时是把图1.2中的各阶段划分成若干遍。
两遍
的编译程序:
第一遍:词法分析、语法分析和语义分析;
第二遍:目标代码生成和目标代码优化。
每遍中的各阶段的工作是穿插进行的。
编译过程:
- 词法分析:识别单词并分类。关键字、标识符、字面量、特殊符号
- 语法分析:组词成句及语法错误检查.
- 语义分析:分析各种语法成分的语义特征。
- 优化:提高目标程序质量的工作。
- 目标代码生成:产生计算机可识别的语言。
1.4 编译器的分析/综合模式
对于编译器的各个阶段,逻辑上可以把他们划成两个部分,即分析部分和综合部份。分析部分也被称为编译器的前端,综合部份也被称为编译器的后端。如图所示是理想的分析/综合模式。