2018-03-05 编译原理学习之绪论

一、程序设计语言和编译程序

计算机的诞生是科学发展史上一个里程碑,计算机编程语言的发展也是一个较为漫长的过程,从刚开始的机器语言发展到现在的高级程序设计语言,一般经历的阶段有如下几个:

机器语言-->汇编语言-->高级程序设计语言

语言从刚开始的多而繁,到后来的简而精,计算机程序设计越来越面向大众,面向平民化,但是对于当代那些高级程序设计语言如何转化为机器能读懂的汇编语言或者是机器语言,正是我们在这门课程当中需要学习的东西,也就称之为编译原理。

总体来讲一共分为以下三个阶段:

①编译阶段:源程序(高级语言)-->编译程序(计算机)-->目标程序(汇编语言)

②汇编阶段:目标程序(汇编语言)-->汇编程序(计算机)-->目标程序(机器语言)

③运行阶段

在高级语言程序执行时,分为两种方法:

①编译方法:高级语言程序直接编译成低级语言程序,运行时直接生成目标程序,比如C语言,这种方法的优缺点是"可移植性差,执行效率高"。

②解释方法:对源程序边解释边执行,并不生成目标程序,这种方法优缺点是"可移植性好一点,但是执行效率慢"。

二、编译过程和编译程序结构

1.编译过程如下图:

2018-03-05 编译原理学习之绪论_第1张图片
流程图

2.编译程序的开发

编译程序的开发常常采用自编译、交叉编译、自展和移植等技术实现。

1.自编译

用某种高级语言编写自己的编译程序称为自编译。例如,假定A机器上已有一个PASCAL 语言可以运行,则可以用PASCAL语音编写出一个功能更强的PASCAL语言编译程序,然后借助于原有的PASCAL编译程序对新编写的PASCAL编译程序进行编译,从而在编译后即得到一个能在A机器上运行的功能更强的PASCAL编译程序。

2.交叉编译

交叉编译是指用A机器上的编译程序来产生可在B机器上运行的目标代码。例如,若A机器上已有C语言可以运行,则可用A机器中的C语言编写一个编译程序,它的源程序是C语言程序,而产生的目标程序则是基于B机器的,即能够在B机器上执行的低级语言程序。以上两种方法都假定已经有了一个系统程序设计语言可以使用,若没有可使用的系统程序设计语言,则可采用自展或移植的方法来开发编译程序。

3.自展

自展的方法是:首先确定一个非常简单的核心语言Lo,然后用机器语言或汇编语言编写出它的编译程序To;再把语言L0扩充到L1,此时有L0CL1,并用Lo编写L1的编译程序T(即自编译);然后再把语言L1扩充为L2,此时有LICL2,并用L1编写L2的编译程序T2……这样不断扩展下去,直到完成所要求的编译程序为止。

4.移植

移植是指A机器上的某种高级语言的编译程序稍加改动后能够在B机器上运行。一个程序若能较容易地从A机器上搬到B机器上运行,则称该程序是可移植的。移植具有一定的局限性。用系统程序设计语言来编写编译程序虽然缩短了开发周期并提高了编译程序的质量,但实现的自动化程度不高。实现编译程序的最高境界是能够有一个自动生成编译程序的软件工具,只要把源程序的定义以及机器语言的描述输入到该软件中,就能自动生成这个语言的编译程序。

你可能感兴趣的:(2018-03-05 编译原理学习之绪论)