(河南大学软件学院,河南开封475000)
摘要:编译程序能够帮助用户对现代计算机进行操控,是推动计算机发展的不可或缺的因素。本文对编译程序的定义,过程以及其简要的发展历程作出了介绍,并提出在编译程序未来的发展趋势
关键词:编译程序;语法;语义;中间代码;FORTRAN
引言
随着计算机的飞速发展,为了实现用户对机器的有效操控,编译程序应运而生,它的从无到有的发展为计算机研究提供了一个质的飞跃。编译技术的发展伴随着计算机技术的不断提升也逐渐提升,与此同时,编译程序的工作过程需要更加的具有逻辑性和严谨性,才能有效地支撑编译技术的向前发展。而且编译程序也使计算机更加的实用,无论是我们现在每个人都会接触到的操作系统和数据库,还是一些应用程序都需要其为基础作为支撑。
1.编译程序
在刚刚接触到《编译原理》时,可能会有一些疑惑,编译程序是用来做什么?它在计算机中扮演什么角色?编译程序是计算的一个组成部分,在现代的计算机操作中,用户一般通过应用高级语言(Java、C、Pascal等)来实现对计算机的操控。然而高级语言却不容易被计算机所识别和接受,如此则需要需要编写一个程序,将作为源语言程序的高级语言程序转换成作为目标语言程序的低级语言程序,从而保证低级语言能够直接被机器所识别,这样的程序被称为编译程序。编译后的低级语言程序通常还会被计算机用以运行,以便得出计算结果。用户比较关心的高级语言编译程序是对于计算机的系统软件来说是不可或缺的。
2.编译程序工作过程
编译程序的工作过程通常有词法分析、语法分析、语义分析和中间代码生成、优化和目标代码生成五个阶段。在这五个阶段中,编译程序需要辅以相应的表格管理和出错处理,从而使程序能够正常编译运行。
2.1词法分析
2.1.1功能
词法分析器的功能是输入源程序,对其进行扫描、分解,输出单词符号。符号是编程语言的基本语法符号,一般包括关键字、标识符、常数、运算符和界符五种形式,其输出形式可用单词种别和单词符号的属性值组成的二元式表示。
2.1.2词法分析器的设计
1.预处理子程序:剔除掉程序语言中空白符、回车符或者注解部分等不必要的组成部分,将相继多个空白合成为一个,识别单词符号。
2.使用状态转换图:将源程序用状态图实现,便于词法分析器的功能进行,为了使其更加形式化,辅以正规式和有限自动机。
2.2语法分析
语法分析在编译程序的工作过程中是很重要的一个阶段。词法分析器对输入的符号串进行识别之后,语法分析加以分析程序的语法结构,确定它是否符合语法规则。这种方式与我们日常语言的语法分析很相似。而且语法规则会借助是上下文无关文法来形象地显现出来。在该阶段的分析工作中,一般会有如下两种分析方法:
1.自上而下分析:以文法的开始符号为开端,根据语法规则向下推导,一直推导出目标式。在这个过程中最容易出现的问题是回溯和递归,而自上而上分析法是不允许出现这些问题的,所以需要消除文法的左递归,克服回溯条件,构造LL(1)文法,通过预测分析程序实现LL(1)分析。
2.自上而下分析:是一种“移进-规约”法,即从输入串开始,利用栈这种存储结构,逐步进行归约直到文法的开始符号。分析方法主要包括规范归约和算符优先分析。
2.3语义分析及中间代码生成
该阶段主要的任务是在语法分析识别出语法单位的基础上,对其进行分析和翻译,从而生成中间代码。在这一阶段,分析遵循语义规则(借属性文法作为描述工具)。通常在语义分析过程中一般会对各个语法类别进行语义检查,采用静态方法对变量定义和类型进行检查,如果语检查后语法类别的语义是无误的,就翻译中间代码。常见的中间语言一般有后缀式,三地址代码(包括三元式,四元式和间接三元式),DAG图三大类形式。在此过程中采用中间语言的优点如下:
1.使程序更独立进行代码优化;
2.使编译程序更加容易;
3.使编译程序的结构更加具有逻辑性和明确性。
2.4优化
优化的工作在于在此阶段以前产生的中间代码的基础上,对其进行提炼和变化,从而生成符合需要的目标代码。一般来说,在公共子表达式的提取、循环冗余和无用代码过多等方面需要在该阶段进行必要的优化。而代码优化编译器也必须要遵循一定的原则:
1.等效原理:代码进行优化后,其程序运行结果不会发生变化。
2.有效原理:使优化后的目标代码在运行时间方面和占用存储空间方面能够达到较为理想的状态。
3.公平原则:应该努力以更低的成本取得更好的结果。
2.5目标代码生成
在编译程序已经进行了前四个阶段的工作之后,目标代码生成阶段就是把优化阶段已经优化后的中间代码变换成机器上的低级语言代码,硬件系统段和机器指令的含义可以决定最后翻译的工作进程。一般来说,目标代码通常的形式有三种:绝对指令、可重新定位的指令代码、汇编指令代码,在现代计算机多数实用编译程序中,运用大多都是可重定位的指令代码。
2.6表格管理和出错处理
为了高效率、高准确度完成这些阶段的工作,编译程序需要要在词法分析、语法分析和语义分析阶段建立一些表格和编写相应的出错处理程序。表格管理用于注册源程序的各种信息,并在不同的阶段编译进度,会应用于编译程序中的各个阶段中。在各类表格管理中,用来记录源程序中出现的每个名字及其属性的符号表是最重要的。源程序在编译过程中无可避免的会出现语法和语义错误,而出错处理就是将源程序中编译程序无法发现的错误信息报告给用户,这种情况会很大概率的出现在编译过程的前三个阶段中。
3.编译技术发展及展望
20世纪50年代中期研制成功FORTRAN编译程序是世界上最早研究出来的编译程序,对于当时的研发条件来说,一个编译程序的产生是十分艰难的。而后来随着时代的发展,经过自动生成工具的产生、PASCAL编译程序发展过渡,从而慢慢演变成了当代成功计算机编译程序,为计算机事业领域发展贡献了大力量。然后,随着并行技术和语言的发展,并行编译技术(处理并行语言)和自动并行编译技术(将串行程序转换为并行程序)也进入了一个全新的发展领域。
一般来说,编译器的核心是将相同的逻辑结构和思想从一种语言表示转换到另一种语言表示。编译程序可以说计算机内部处理的一个过程,对用户来说不是透明的,但是它依旧是计算机的不可缺少的组成部分,是连接用户和机器通信的桥梁,它的进步奠定了计算机发展的基石。随着现如今智能时代的来临,社会会对计算机发展需求越来越高,我们的未来会提供给计算机一个更加广阔的舞台,同时编译技术的前景也会更加广阔,能够提供给世界更大的便利。
参考文献
[1]陈火旺,刘春林.《程序设计语言编译原理》.国防工业出版社,北京,1980
[2]张亚娟,冯灵霞.《编译技术的发展及应用》.算法与语言.郑州.2010.09
作者简介:黄平(1995年9月—),女,汉族,河南省信阳市人,河南省开封市河南大学软件学院软件工程方向2015级本科生在读。
通讯作者:万芯彤,(1997年4月)女,汉族,河南省信阳市,河南省开封市人,河南大学软件学院互联网金融方向,2015级本科生在读。