一、概述
编译程序
高级语言程序 \(\rightarrow\) 编译程序 \(\rightarrow\) 低级语言程序(汇编语言或者机器语言)
解释程序
源程序 \(\rightarrow\) 解释程序 \(\rightarrow\) 输出
编译过程(5个阶段)
1. 词法分析
- 任务:输入源程序,对字符串扫描分解,识别出单词符号
- 依据原则:构词规则
- 描述工具:有限自动机
2. 语法分析
- 任务:在词法分析基础上,把单词符号串分解成各类语法单位
- 依据原则:语法规则
- 描述工具:上下文无关文法
3. 语义分析与中间代码生成
- 任务:对各类语法单位按语言的语义进行初步翻译
- 依据原则:语义规则
- 描述工具:属性文法
4. 代码优化
- 任务:对中间代码加工变换,提高目标代码的时空效率
- 依据原则:程序等价变换规则
5. 目标代码生成
- 任务:将中间代码变换成特定机器上的目标代码
目标代码三种形式
- 汇编指令代码:需要进行汇编
- 绝对指令代码:可直接运行
- 可重定位指令代码:需要链接
编译程序的结构
编译的遍
对源程序或源程序的中间结果从头到尾扫描一次
- 一遍扫描:占用内存空间大,但编译速度快
- 多遍扫描:程序结构清晰,目标代码质量较高,但编译速度较慢
编译的前端
与源语言有关,词法分析、语法分析、语义分析与中间代码生成、与硬件无关的优化
编译的后端
与目标机器有关,与硬件有关的优化、目标代码生成
\(\large {Tips:}\)
-
编译程序绝大部分时间花在符号表管理上
-
中间代码生成和代码优化部分不是每个编译程序都必需的
本文来自博客园,作者:风雨zzm,转载请注明原文链接:https://www.cnblogs.com/zzmxj/p/17368573.html