浅析编译原理中编译工作的基本流程及其实现
2019-03-30王佳林张美玲高涵
王佳林 张美玲 高涵
【摘要】 编译原理是研究如何将各种编程语言转换为机器语言的一门科学。本文主要介绍了编译原理中编译工作的基本流程,以及各个流程在整个编译工作过程中起到的作用,同时本文对编译工作在实际的应用中是如何实现的这一问题进行了探讨。
【关键词】 编译技术 机器语言 詞法分析 语法分析
一、编译技术的产生
最早期的计算机编程是用机器语言编程,这种直接跟计算机硬件进行信息沟通的方式有很大的局限性。虽然机器语言能够被计算机硬件直接识别并执行,具有灵活速度快的特点,但是机器语言对编程人员的要求门槛太高,它不容易被理解接受,并且记忆困难,极易出错。编程人员使用机器语言编程往往要花费大量的时间和精力在编写程序上,这大大影响了编程效率。为了提高程序的编写效率,增强程序的可读性,汇编语言和高级语言随着科技的发展渐渐出现。汇编语言较为基础,是高级语言形成过程中的中间产物。高级语言封装性更强,在操作上更加简便,在编写和理解上也有更好的可读性。高级语言和汇编语言都需要进行加工才能被计算机识别,这就需要一个能将这些指令转化成机器指令的翻译程序——编译器。因为计算机能够识别的只有二进制代码,如何让计算机识别并执行这些语言呢,这就是编译原理所要研究的问题。
二、编译的基本流程
(一)词法分析阶段。首先是词法分析阶段。在词法分析阶段中源程序按照从左到右的顺序被依次扫描,扫描过程中源程序的字符流会按照规定好的构词规则被识别成单词符号,这一工作由词法分析程序完成。此外,在词法分析阶段,词法分析器除了能完成单词符号的识别工作,还能够对程序中的一些信息进行过滤,同时词法分析程序可以将编译时产生的错误信息对应到源程序的具体位置,便于程序修改。(二)语法分析阶段。在语法分析阶段,语法分析程序会将词法分析中产生的单词序列划分成各类语法短语,并对源程序的结构进行正确性的判断,检查源程序中是否存在语法错误。根据语法分析中采用的方法的不同,语法分析在具体实现时又分为好多方法,其中每一种方法都有各自的适用情况和特点。(三)语义分析和中间代码产生阶段。在语义分析和中间代码生成阶段中,首先要进行的是语义分析工作。顾名思义语义分析主要进行语义审查,编译器会审查程序中语法结构的静态语义。程序中可能存在一些语法正确但是在规定限制下没有意义的语句。语义分析的分析范围有确定类型、类型检查等。在完成语义分析并且分析无误后,进入中间代码产生阶段,生成中间代码,根据实际情况的不同中间代码又分为逆波兰式、三元式、四元式等形式,这些都是在具体程序内部涉及到的内容。(四)优化。所谓中间代码优化指的是在不改变源程序运行结果的前提下,对中间代码或目标代码进行等价替换。优化后所产生的目标代码运行时间更短,占用空间更小、效率更加高效。在整个编译过程中都可以增加优化过程,但最突出的还是体现在中间代码的优化上。(五)目标代码生成。目标代码生成是编译的最后一个阶段,在这一阶段中,主要完成的任务是将前面产生的中间代码转化成特定机器上的机器语言或汇编语言。因为计算机只能识别机器语言,如果生成的目标代码是汇编语言的形式,要将汇编代码再转化成机器代码才能让计算机运行。
三、编译的实现
(一)预处理。预处理是指在对源程序进行编译之前,要对程序中的一些特殊命令进行处理的工作。c语言中,编译预处理命令以#开头,这些预处理的命令被预处理程序处理替换后由编译程序进行进一步加工。以c语言为例,编译预处理有宏定义、文件包含、条件编译等,程序人员编写的*.c源程序文件经过预处理程序处理后,随后进入编译程序进行编译最后生成目标程序*.obj。编译预处理完成了标识符的替代工作,为编译的顺利进行打下基础。(二)编译。在编译阶段中对经过了预处理的源文件进行一连串的编译工作,包括词法分析,语法分析,语义分析以及优化等操作,最后生成相应的汇编代码。编译是通过编译器实现的,在编译器中会进行上述一系列的操作。(三)汇编。汇编工作由汇编器实现,汇编器负责汇编代码向机器代码的转化工作,根据汇编指令和机器指令的对应关系表,将汇编代码转化成可执行文件,只有转化成计算机能够识别的二进制代码,才可以交给计算机执行。(四)链接。最后就是链接操作,虽然在汇编阶段源程序已经转化成了计算机能够识别的二进制代码的形式,但是还要完成一些其他工作。因为在源程序中可能引用了其他头文件中的函数,或者调用了其他库中已有的函数,只有将这些全部链接在一起,才能保证程序的正确执行,这就是链接操作。很多时候开发人员不用自己去实现一些函数,而可以直接调用现有库中的函数,既节省了时间,又可以减小出错率。链接技术的实现大大降低了代码的复写率,提高了程序的开发效率。
结语:编译技术像是在高级语言和计算机硬件系统之间架起了一座桥梁,它将高级语言进行编译处理使其能够在计算机上执行。自从有了编译技术,程序编写的效率明显提升,计算机编程的门槛大大降低,使得更多的学者能够投身于计算机编程领域。可以说编译技术是计算机领域中的核心技术,研究编译技术对计算机技术的发展有着重要意义。
参 考 文 献
[1]徐红,陆红阳.编译原理实验动态演示系统的设计与实现[J].电脑知识与技术,2005(27):86-88.