【2025年软考中级】第二章2.3 编译程序基本原理
文章目录
- 编译程序基本原理
- 词法分析
- 语法分析
- 语义分析
- 中间代码生成与优化
- 目标代码生成
编译程序基本原理
编译程序是将高级语言源程序翻译成目标程序的软件工具。在编译过程中,需要不断收集、记录和使用源程序中相关符号的类型和特征等信息,并将这些信息存入符号表。整个编译过程主要分为以下几个阶段:
词法分析
词法分析是编译过程的第一个阶段,其主要任务是从左到右逐个字符地扫描源程序,根据预定义的构词规则识别出有意义的单词(也称为单词符号或符号)。这些单词是程序中的基本语法单元,例如关键字、标识符、运算符和常量等。
输入:源程序的字符流
输出:识别出的单词(记号)序列
语法分析
语法分析是编译过程的逻辑阶段,其任务是在词法分析的基础上,将识别出的单词序列组合成各类语法结构单元。这些单元包括"程序"、“语句”、"表达式"等不同层级的语法结构。语法分析程序判断源程序在结构上是否正确,检查语法规则是否被遵守。
输入:词法分析产生的记号流
关键功能:检查语法结构正确性(如括号匹配、语句结构等)
语义分析
语义分析是编译过程的另一个逻辑阶段,其主要任务是对通过语法分析的结构正确的源程序进行上下文相关性质的审查。这包括类型检查、变量声明检查以及语义规则验证等。例如:
- 检查变量使用前是否声明
- 验证运算符的操作数类型是否匹配
- 检查除法运算的除数是否可能为零
语义错误分为两类:
- 静态语义错误:在编译阶段就能发现的错误(如类型不匹配)
- 动态语义错误:只能在程序运行时发现的错误(如除数为零)
中间代码生成与优化
在语义分析之后,编译器会生成中间代码。中间代码是一种介于源代码和目标代码之间的抽象表示形式,其主要目的是进行与机器无关的代码优化处理。常见的中间代码形式包括:
- 后缀式(逆波兰表示法)
- 三元式(三地址码)
- 四元式
- 抽象语法树
中间代码需要经过优化处理,以提高最终生成的目标代码质量。优化后的中间代码会被翻译成目标机器代码。
目标代码生成
目标代码生成是编译过程的最后阶段,将优化后的中间代码转换为特定计算机架构的可执行指令。在这个阶段需要考虑三个关键问题:
- 代码长度:如何生成较短的目标代码
- 寄存器利用:如何充分利用寄存器,减少内存访问次数
- 指令特性:如何利用目标计算机指令系统的特点提高代码质量
最终生成的目标代码经过链接后形成可执行程序。