程序设计语言|高级语言源程序的编译过程
高级语言源程序的编译过程通常分为:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。
1.词法分析:输入源代码,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。单词符号是程序设计语言的基本语法单位,如关键字(或称保留字)、标识符、常数、运算符和分隔符(如标点符号、左右括号)等。词法分析程序输出的单词常以二元组的方式输出,即单词种别和单词自身的值。在词法分析阶段工作所依据的是语言的词法规则,描述词法规则的有效工具是正规式和有限自动机。
2.语法分析:在词法分析的基础上,根据语言的语法规则,将单词符号序列分解成各类语法单位,如“表达式”、“语句”和“程序”等。语法分析程序确定整个输入串是否构成一个语法上正确的程序。如果源程序中没有语法错误,语法分析后就正确地构造出其语法树;否则指出语法错误,并给出相应的诊断信息。
3.语义分析:分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。语义分析的一个主要工作是进行类型分析和检查。
4.中间代码生成:根据语义分析的输出生成中间代码。中间代码是一种简单且含义明确的几号系统,可以有若干种形式,他们的共同特征是与具体的机器无关。中间代码除四元式外,还有三元式、间接三元式、逆波兰式(后缀式)、树形表示等。
5.代码优化:对前面产生的中间代码进行加工,以期在最后阶段产生更为高效的代码。所做的优化一般建立在对程序的控制流和数据流分析的基础上,与具体机器无关。优化所依据的原则是程序的等价变换规则,其方法有公共子表达式的提取、循环优化、删除无用代码等。
6.目标代码生成:把中间代码(或经优化处理后)变换成特定机器上的低级语言代码。这个阶段的工作与具体的机器密切相关。
其中词法分析、语法分析、语义分析、目标代码生成是必须的,而中间代码生成、代码优化是可以不需要的。