编译(compilation , compile)是指利用编译程序从源语言编写的源程序产生目标程序的过程。外部编译子程序是指计算机程序执行过程调用的子程序,在程序调用之前已经完成了编译,可以直接调用执行,这种子程序一般独立于运行程序的源码文件。外部编译子程序可以加快程序执行速度和便于管理。

简介

外部编译就是让源码文件和编译生成的工程文件分开,将编译生成的工程文件放在一个单独的目录下面。外部编译子程序简单来说是指编译生成的文件与源码文件分开,放在一个独立的文件中,可以做到一次编译多次调用,加快了程序执行速度和便于对编译文件管理和移植到不同的平台。源码就是指编写的最原始程序的代码。运行的软件是要经过编写的,程序员编写程序的过程中需要他们的“语言”。音乐家用五线谱和音符,建筑师用图纸和笔,那程序员的工作的语言就是“源码”了。人们平时使用软件时就是程序把“源码”翻译成我们可直观的形式表现出来供我们使用的。

子程序

子程序是指在计算机程序中,能够完成特定解题功能的一连串指令。它可以编入不同的主程序,成为主程序的一部分;也可以在主程序中的不同地方使用。它是整个程序中常用的、且有共同性的独立部分。或指低级语言中的子例程在高级语言中的相应程序单位。二者亦可统称为子程序。这种程序单位一旦定义后,便可在一定范围内多次调用,从而避免了相同或相似的程序段在程序中多次出现。这一机制体现了计算过程的抽象。子程序有两个侧面:一个是定义计算过程的定义方面,称为子程序定义或子程序说明;另一个是使用该计算过程的调用方面,称为子程序调用。计算机程序是计算任务的处理对象和处理规则的描述。计算任务指以计算机为处理工具的任务,处理对象指数据(数字、文字、图像等),处理规则一般指处理动作和步骤。在低级语言中,程序是一组指令和数据;在高级语言中,程序一般是一组说明、语句及数据。程序通过装入计算机中并由机器执行它而发挥作用。程序的基本成分包括程式、子程式、子程序、协同程式、递归程式和模块。

编译

计算机语言之所以能由单一的机器语言发展到现今的数千种高级语言,就是因为有了编译技术。 编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支,它集中体现了计算机发展的成果与精华。编译技术的核心思想就是把同样的逻辑结构和思想从一种语言表示转化为另外一种语言表示。 从高级语言,甚至是运行于虚拟平台的高级语言,到机器语言,最终到硬件执行的物理信号,这一层层转化,无一不涉及到“编译”这个概念的应用。因此,编译技术是人类智慧到机器执行的桥梁,软件到硬件层层推进的衔接力量。编译程序是一个足够复杂的程序,语言功能的完善,硬件结构的发展,环境的友好要求,都对编译程序提出了更高的要求。因此一个编译系统的构造并非易事,对完全想用手工方法来构造编译器来说更是如此。要构造一个完全独立的全新的编译器可能性很小,大部分可在现有编译器的基础上扩展,有的采用自展的方式,有的则用自编译的方式。采用自编译方式生成编译程序的思想是先用目标机的汇编语言或机器语言对源程序的核心部分构造一个小小的编译程序,再以它为工具构造一个能够编译更多语言成分的较大编译程序。 如此扩展下去,就像滚雪球一样,越滚越大,最后生成人们所期望的整个源语言的编译程序。上世纪70 年代, 随着诸多种类的高级程序设计语言的出现和软件开发自动化技术的提高,编译程序的构造工具陆续诞生,如70 年代 Bell 实验室推出的 LEX 和 YACC,这两种工具在各种语言编译程序的实现中还广为应用。 其中 LEX 是词法分析器的自动生成工具,YACC 是语法分析器的自动生成工具1。

编译程序必须分析源程序,然后综合成目标程序。首先,检查源程序的正确性,并把它分解成若干基本成分;其次,再根据这些基本成分建立相应等价的目标程序部分。为了完成这些工作,编译程序要在分析阶段建立一些表格,改造源程序为中间语言形式,以便在分析和综合时易于引用和加工。

数据结构分析和综合时所用的主要数据结构,包括符号表、常数表和中间语言程序。符号表由源程序中所用的标识符连同它们的属性组成,其中属性包括种类(如变量、数组、结构、函数、过程等)、类型(如整型、实型、字符串、复型、标号等),以及目标程序所需的其他信息。常数表由源程序中用的常数组成,其中包括常数的机内表示,以及分配给它们的目标程序地址。中间语言程序是将源程序翻译为目标程序前引入的一种中间形式的程序,其表示形式的选择取决于编译程序以后如何使用和加工它。常用的中间语言形式有波兰表示、三元组、四元组以及间接三元组等。

分析部分源程序的分析是经过词法分析、语法分析和语义分析三个步骤实现的。词法分析由词法分析程序(又称为扫描程序)完成,其任务是识别单词(即标识符、常数、保留字,以及各种运算符、标点符号等)、造符号表和常数表,以及将源程序换码为编译程序易于分析和加工的内部形式。语法分析程序是编译程序的核心部分,其主要任务是根据语言的语法规则,检查源程序是否合乎语法。如不合乎语法,则输出语法出错信息;如合乎语法,则分解源程序的语法结构,构造中间语言形式的内部程序。语法分析的目的是掌握单词是怎样组成语句的,以及语句又是如何组成程序的。语义分析程序是进一步检查合法程序结构的语义正确性,其目的是保证标识符和常数的正确使用,把必要的信息收集和保存到符号表或中间语言程序中,并进行相应的语义处理。

本词条内容贡献者为:

王慧维 - 副研究员 - 西南大学

外部编译子程序

图文简介

编译(compilation , compile)是指利用编译程序从源语言编写的源程序产生目标程序的过程。外部编译子程序是指计算机程序执行过程调用的子程序,在程序调用之前已经完成了编译,可以直接调用执行,这种子程序一般独立于运行程序的源码文件。外部编译子程序可以加快程序执行速度和便于管理。