您的位置:首页 > 网页编程 > linux >
程序设计的编译技术原理是什么
时间:2013-11-18 00:02来源:未知 作者:66php 点击:
/**谷歌广告**/

    首先从编译器使用方式的角度介绍编译器的基本概念,然后对编译器、解释器和虚拟机这3个重要概念进行介绍和分析。  
    1.狭义的编译器概念  高级语言为程序员提供了比汇编语言更为方便的程序设计工具,使程序员的工作效率得到了极大的提高。然而,对于底层计算机硬件系统来说,CPU仍然只能执行由二进制指令序列表示的程序代码。这样一来,高级语言编写的程序只有被翻译为具有相同功能的汇编语言程序或被直接翻译为可执行指令序列后,才能被CPU真正地执行。由于高级语言程序和CPU指令系统在形式和内容上的差别远比汇编语言和二进制指令的差别大得多,因此需要更为复杂的技术将其翻译为等价的可执行指令序列(或先翻译为汇编程序,再由汇编器将其转换为可执行指令序列)。编译器就是实现这种把高级语言编写的程序翻译为具有相同功能的底层指令序列或汇编程序的软件系统。编译器设计时采用的各种技术统称为编译技术。  一般来说,编译器需要具有两个基本的功能。
     ●  判断程序的合法性。识别输入的源程序是否符合语言定义的要求。例如,对于C语言程序来说,变量是否以字母开头,if语句是否包含了合法的表达式等。
     ●  程序的等价翻译和错误提示。如果源程序合法,则可将其转换为另一种语言表示的程序(称为目标程序)。否则,将给出程序的出错提示,以方便软件开发人员查找和修改程序中的错误。  
    2.广义的编译器概念  设计编译器的最初目的,是将高级语言程序等价地转换为具有相同功能的可执行程序或汇编程序。然而,随着编译技术的发展,编译程序的用途更为广泛。例如,在C语言出现以后,有一些编译器(如GCC系列的Fortran 77编译器g77)就不再直接将Fortran语言翻译为可执行程序或汇编程序,而是首先翻译成C语言程序,然后再由C语言编译器完成最后的编译工作。又如,在分布式计算技术中,CORBA和DCOM平台均定义了IDL(Interface Definition Language)来描述程序的接口规范,并利用IDL编译器将模块的IDL描述翻译为特定语言的接口定义(如C、C++的头文件,Java的类定义等)。  上面这些编译器应用显然不再局限于产生可执行程序的范围。因此,不妨定义一个更为一般的广义的编译器概念:编译器就是将一种语言编写的程序翻译成由另一种语言编写的功能相同的程序的软件。  特别指出一点,广义的编译器定义并不要求所得到的程序一定是可执行的,只要该程序在功能和含义上与原来的程序一致就可以了。从这个角度看,编译器实际上起到的是一种程序转换器或程序生成器的作用。
     3.编译器和解释器  C语言编译器是程序员最熟悉的编译器,负责将C语言程序翻译为可执行代码,符合以上对编译器的基本定义。然而,还有另外一种使用编译技术的方式。  我们熟悉的Internet Explorer可以对HTML网页文件进行解析,然后根据HTML文件的定义将文字和图片按指定格式显示在屏幕上。为了实现这一功能,Internet Explorer必须首先“理解”HTML网页文件的内容,然后按其规定调整与安排文字和图片的显示方式。在这一过程中,Internet Explorer既没有将HTML文件变成CPU可以直接执行的二进制代码,也没有将其翻译为某种CPU的汇编语言程序,而是同时完成了对语言的理解和执行两件事情。首先,浏览器的HTML分析模块将HTML文件的内容进行分析和理解,得到一个内部的数据结构(记录了网页信息及其显示方式)。然后,浏览器的显示模块扫描该数据结构,根据格式要求将信息逐条显示在恰当的屏幕位置上。实际的Internet Explorer在完成上述工作时为了提高工作效率,可能不会按这么简单的方式工作,但基本原理与此相同。  以上这种对语言的处理方式称为语言的解释执行。实现这种语言解释执行功能的软件称为语言的解释器。  除了浏览器中的HTML解释器之外,BASIC语言、TCL/Tk语言、Lisp语言等通常也采用解释器的方式来执行。和先编译后执行的编译模式相比,解释器的最大好处就在于程序编写灵活和使用方便。然而,高级语言和底层指令系统的差别较大,因此要实现对程序的解释执行,必须在程序解释执行的过程中进行程序的翻译。由于不是被CPU直接执行,而且还要进行很多额外的工作,因此解释执行的程序在性能上比编译执行的程序要慢很多。  
    4.编译器和虚拟机  为了避免单纯解释执行在效率方面的不足,Java语言引入了虚拟机的概念。Java虚拟机是Java语言规范中的一部分,定义了一套标准的指令集合(称为字节码)。Java编译器将Java程序翻译为具有相同功能的字节码程序,然后由Java虚拟机对字节码程序进行解释执行。由于字节码和CPU的二进制指令更为接近(虽然不同CPU的指令集合会有所不同,字节码和指令的差距远比Java程序和CPU指令的差距要小),因此对字节码的解释执行速度远比对高级语言程序直接进行解释要快。为了进一步提高执行效率,Java编译器还采用了即时编译(Just-In-Time,JIT)等技术。  由于本书篇幅有限,因此对解释器、虚拟机和汇编器将不再进行更为详细的介绍。有兴趣的读者可以参考相关文献了解更多信息。

    50%
    (1)
    50%
    (1)
    最新评论
    选择评论类型:
    验证码:点击我更换图片
    本站推荐
    /**谷歌广告**/
    关于我们 | 网站地图 | rss地图 | 广告服务 | vip源码 | 联系我们
    Powered by 66php Copyright 2011-2013
    苏ICP备11045037号