一、编译程序概述
-
编译程序基本概念
编译程序是现代计算机系统的基本组成部分之一。编译程序一般由词法分析程序,语法分析程序,语义分析程序,中间代码生成程序,目标代码生成程序,代码优化程序,符号表管理程序和错误处理程序等成分构成。 -
相关知识
计算机只能识别由0和1组成的二进制指令。
机器语言Machine Language:0、1代码
汇编语言(汇编程序) Assemble :0、1代码与助记符
高级语言(编译程序)High Level:语句定义数据、描述算法(程序)
编译程序:就是把高级语言源程序转换成与之在逻辑上等价的低级语言目标程序的程序。可理解如下图所示:
-
相关术语
编译程序(compiler)
编译程序的源语言(源程序) (source language)(source program)
编译程序的目标语言(目标程序) (object or target language)(object or target program)
编译程序的实现语言(implementation language)
语言处理程序(language processor)
语言转(变)换(language transformation) -
解释程序与编译程序的主要区别
编译程序将整个源程序全部翻译成目标程序后再执行该目标程序;解释程序则逐条读出源程序中的语句并解释执行,在解释程序执行过程中并不产生目标程序。
二、编译程序的工作过程与结构
编译程序的工作过程是指从输入源程序开始到输出目标程序为止的整个过程。编译过程一般可划分为五个阶段: -
词法分析 语法分析 语义分析和中间代码生成 代码优化 目标代码生成
-1.词法分析
词法分析的任务是输入源程序, 对构成源程序的字符串进行扫描和分解,识别出一个个单词符号, 如保留字、标识符、常数、运算符、界符等,并将识别出的单词用统一长度的标准形式(内部码)表示。因此, 词法分析过程就是将源程序中的字符串变换成单词串的过程。词法分析依据的是语言的构词规则。
语言的单词符号是由词法规则所确定的,词法规则规定了字母表中哪样的字符串是一个单词符号.
- 2.语法分析
语法分析的任务是在词法分析的基础上,根据语言的语法规则(文法规则)把单词串分解成各类语法单位,如短语、子句、句子、程序段、程序。通过语法分析可以确定整个输入串是否构成一个语法上正确的程序。语法分析遵循的是语言的语法规则,语法规则通常用上下文无关文法描述。
-3. 语义分析和中间代码生成
该阶段的任务是对各类不同语法范畴按语言的语义进行初步翻译,包含两个方面的工作:一是对每种语法范畴进行静态语义检查,如变量是否定义、类型是否正确等;二是在语义检查正确的情况下进行中间代码的翻译。把语法范畴翻译成中间代码遵循的是语言的语义规则。
-
4.优化
优化的任务是对前阶段产生的中间代码进行等价变换以获得更高效目标代码。优化遵循的原则是程序的等价变换规则。 -
5.目标代码生成
该阶段的任务是把中间代码(经优化处理后)变换成特定机器上的机器语言程序或汇编语言程序, 实现最终的翻译工作。
三、编译程序结构
编译过程可分为一遍、两遍或多遍完成,每一遍完成所规定的任务。例如,第一遍只完成词法分析的任务,第二遍完成语法分析和语义加工并生成中间代码,第三遍实现代码优化和目标代码生成。
一个编译程序应分成几遍、如何划分?和源程序语言结构及目标机器的特征有关。
分多遍完成编译过程可使整个编译程序的逻辑结构更清晰,但多遍会增加读写中间文件的次数,从而消耗过多的时间。