浅谈编译程序编译过程
2018-04-27刘浩甜河南大学软件学院
刘浩甜 河南大学软件学院
1 编译程序
计算机语言之所以能够由单一的机器语言发展到现如今的数千种高级语言,是由于有了编译技术。编译技术的核心思想就是把同样的逻辑结构和思想从一种语言表示转化为另外一种语言表示。编译程序就是把一种高级语言(源语言)书写的程序转换成与之等价的一种低级语言(目标语言)书写的程序。
图1 编译程序总框
2 编译过程
把某种高级语言书写的源程序转换成与之等价的机器可识别的语言,这个转换过程叫做编译过程。从计算机系统输入源程序到输出目标程序为止的整个过程大致可以划分为五个阶段:词法分析,语法分析、语义分析与中间代码产生、优化、目标代码生成。除了这五个阶段一个完整的编译程序还包括表格管理和出错处理。
2.1 词法分析
词法分析是编译程序进行翻译的第一个阶段,词法分析是一种线性分析。它的任务是从左至右逐个字符的对源程序进行扫描,产生一个个的单词符号如基本字(begin,end,if,for,while等)、标识符、常量、算符和界符(标点符号、左右括号等等)。把作为字符串的源程序改造成为单词符号串的中间程序。它以程序设计语言编制的源程序作为输入,以单词序列作为输出。分词过程可以通过编制程序自动完成,我们通常称这个分词程序为词法分析器。词法分析器分析的源程序可以是现有的各类程序设计语言源程序也可以是人为给定的模型语言的源程序。
2.2 语法分析
语法分析是编译过程的第二个阶段,语法分析是一种层次结构的分析,语法分析的任务是在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位(语法范畴),如“短语”、“子句”、“句子” (“语句” )、“程序段”和“程序”。通过语法分解,确定整个输入串是否构成一个语法上的正确“程序”。语法分析所依循的是语言的语法规则。语法分析通常使用上下文无关文法描述。例如,符号串X=1+2表示成如图2所示的语法树。
图2 语法数
2.3 语义分析与中间代码产生阶段
紧接在词法分析和语法分析后编译程序要做的就是进行语义分析,程序的语义即它的“意思”,离开语义,语言不过是一堆符号的集合,本阶段的任务就是对语法分析所识别出的各类语法范畴进行分析,并进行初步翻译(产生中间代码)。程序的语义确定程序的运行,但是大多数的程序设计语言都具有在执行之前被确定的特征,这些特征被称作静态语义。首先对每种语法范畴进行静态语义检查,一般的程序设计语言的典型静态语义包括声明和类型检查。如语义分析程序按照语言的类型检查与每个运算符相关的运算对象,看它们的类型是否合法如果语义正确则进行中间代码的翻译,在不同语言中有着形式完全相同的语法单位但它们的含义却不相同,语义分析阶段所依循的是所用语言的语义规则。通常使用属性文法描述语义规则。在进行了语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示的形式,这种内部表示形式叫做中间语言或中间代码,所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译为目标代码。很多编译程序采用了一种近似“三地址指令”的四元式中间代码,这种四元式的形式为:运算符、左操作树、右操作树、结果。
2.4 优化
此阶段的任务是就是对前阶段产生的中间代码进行加工变换,以期在最后阶段产生出占用空间更少、运行速度更快的目标代码,即省时间和省空间。
2.5 目标代码生成
本阶段实现了最后的翻译,把经过优化后的中间代码变换成可重定位的机器代码或汇编语言代码。这阶段的工作有赖于硬件系统结构和机器指令含义。
2.6 符号表处理程序
编译程序在工作过程中需保持一系列表格,以登记源程序的各类信息和编译各阶段的进展状况。在所使用的表格中,最重要的是符号表,如标识符的各种属性就是在编译的各个阶段填入符号表的。
2.7 出错处理
编译程序不仅能对书写正确的程序进行翻译,也应能对出现在源程序中的错误进行处理。即源程序中若有错误,编译程序应设法发现错误,并把有关信息报告给用户,这就是出错处理程序的任务
[1]编译技术研究与逆向工程实践,胡燕京,李彩霞,周子琛,罗海宁 《现代电子技术》2007年第16期总第255期
[2]编译技术的发展及应用,张亚娟,冯灵霞,王学春 软 件 导 刊2010年9月
[3]高级语言中编译程序编译过程浅析,朱志平,渭南师范学院学报2001年3月
[4]浅谈高级语言的执行方式——编译过程,赵丽,齐兴斌,电力学报 2008年6月
[5]陈火旺,刘春林.程序设计语言编译原理[M].北京:国防工业出版社,2000年 2月