0.编译程序工作图解
1.词法分析
- 概念:输入源程序,对构成源程序的字符进行扫描和分解,识别出一个个的单词;转换成统一规格备用
- 单词是最小语法单位,由字符构成
- 单词有:关键字(int,float),标识符(x,y,temp),常数,运算符,界限符
- 描述词法规则的有效工具是正规式和有限自动机
2.语法分析
- 概念:在词法分析的基础上,根据语言的语法规则,把单词符号组成各类语法单位(短句,子句,语句,过程,程序)
- 语法规则又称文法
- 语法分析的方法:推导(derive)和归约(reduce)
- 语法分析对说明语句的处理主要是填符号表,对一般语句的处理是构造语法树
3.语义分析和中间代码生成
- 概念:初步翻译,产生介于源代码和目标代码之间的一种代码
- 工作的两个阶段:对每种语法范畴进行静态语义检查;若语法正确,就进行中间代码的翻译
- 中间代码形式:四元式、三元式、逆波兰式
4.优化
- 概念:对前面产生的中间代码进行加工变换,以产生更为高效的目标代码
- 原则:等价交换
- 包括:公共子表达式的提取,合并已知量,删除无用语句,循环优化
5.目标代码生成
- 概念:把经过优化的中间代码转化成特定机器上的低级语言代码
- 目标代码的形式:
绝对指令代码 | 可立即执行的目标代码 |
汇编指令代码 | 还需要通过汇编程序汇编 |
可重定位指令代码 | 先将各目标模块连接起来,确定变量、常数在主存中的位置,装入主存后才能成为绝对指令代码 |
6.表格与表格管理
- 概念:用来记录源程序的各种信息以及编译过程中的各种状况
- 与上面编译的前三阶段有关的表格有:符号表、常数表、标号表、分程序入口表、中间代码表等
7.出错处理
- 概念:编译程序应该设法发现源程序的错误并报告给用户
- 由专门的出错处理程序来完成
- 错误类型:
语法错误 | 在词法分析和语法分析阶段检测出来 |
语义错误 | 在语义分析阶段检测出来 |
补充:遍
- 概念:指对源程序或源程序的中间结果从头到尾扫描一次,并做相关的加工处理,生成新的中间结果或目标代码的过程
- 多遍扫描VS一遍扫描:节省内存空间,代码质量更高,逻辑更加清晰(优点);编译时间较长(缺点)
- 在内存已经够小的的情况下,遍数还是尽可能的少些
补充:编译程序如何生成
- 用机器语言写
- 用汇编语言写
- 用高级语言编写(这是普遍采用的方法)
- 自编译
- 编译工具
- 移植(同种语言在不同种机器之间)
E N D END END