说明:本文参考 李文生 老师讲义!如有不当之处请及时联系
程序设计语言
人与计算机之间沟通的工具。
低级语言
- 机器语言
- 符号语言 汇编语言
问题:符号语言是什么?
高级语言
- 过程性语言——面向用户的语言 如:C、Pascal
- 专用语言——面向问题的语言 如: SQL
优点:
- 独立于机器。所编程序移植性比较好
- 不必考虑存储单元的分配问题,数据的外部形势转换成机器的内部形势等细节
- 具有丰富的数据结构和控制结构
- 更接近于自然语言
- 编程效率高
翻译程序
源程序(高级语言/汇编语言编写)———(经过)翻译程序——>(得到)目标程序(目标语言表示,此处目标不一定是机器语言)
汇编语言程序——汇编程序——机器语言程序
高级语言程序——编译程序——低级语言程序
高级语言程序:编译阶段处理源程序,执行阶段处理数据。
解释程序同时处理源程序和数据。边解释边执行,不生成目标程序。
解释程序的优缺点
优点:与用户通信方便,比较节省内存空间
缺点:效率很低
解决办法:先翻译成某种中间形式的程序,如JAVA
编译程序的组成
分析阶段(静态分析)
根据源语言的定义,分析源程序的结构和语义(程序源码转换为某种内部表示)
- 词法分析——词法分析器——识别具有独立意义的字符串作为token(记号),并组织成记号流
- 语法分析——语法分析器——将记号流根据相应语言的语法规则分组,形成语法短语——分析树来表示
- 语义分析——语义分析器——根据源语言的语义规则对语句的意义进行检查(如类型检查)
综合阶段
根据分析结果构造出所要求的目标程序
- 中间代码生成——中间代码易于翻译成目标代码
- 代码优化——对代码进行改进,使之占用的空间少、运行速度快(首先是在中间代码上进行)
- 目标代码生成——生成的目标代码一般是可以重定位的机器代码或汇编语言代码
符号表的管理
- 错误诊断和处理
编译原理的典型结构
符号表管理
记录源程序中使用的标识符;收集每个标识符的各种属性信息是编译程序的重要工作。
符号表:若干记录组成的数据结构
- 每个标识符在表中有一条记录
- 记录的域是标识符的属性
对符号表结构的要求:
- 允许快速地查找到标识符的记录
- 可在其中存取数据
标识符的各种属性是在编译的各个不同阶段填入符号表的。
预处理器
主要功能:
- 宏处理
- 文件包含
- 语言扩充
连接装配程序
两个主要任务:
装入:
- 读入 可重定位的机器代码
- 修改重定位地址
- 把修改后的指令和数据放在内存的适当地方或形成可执行文件
连接
- 把几个可重定位的机器代码连接成一个可执行的程序