第一课 绪论
编译器在语言处理系统中的位置
编译器的结构
1 |
|
词法分析/扫描(Scanning)
主要任务
从左向右逐行扫描源程序的字符,识别各个单词并确定类型,表示为词法单元(token)格式;
单词类型 | 种类 | 种别码 |
---|---|---|
关键字 | program、if、else、then、… | 一词一码 |
标识符 | 变量名、数组名、记录名、过程名、… | 多词一码 |
常量 | 整型、浮点型、字符型、布尔型、… | 一型一码 |
运算符 | 算数 关系 逻辑 | 一词一码或者一型一码 |
界限符 | ; () = {}… | 一词一码 |
语法分析(parsing)
- 从词法分析器的token序列中识别短语,构造语法分析树(parse tree)
语义分析
- 主要任务:
- 收集标识符的属性信息
- 种属
- 简单变量、符合变量(数组、记录、…)、过程
- 类型
- 存储位置、长度
- 值
- 作用域
- 参数与返回值信息
- 种属
- 语义检查
- 收集标识符的属性信息
中间代码生成
- 常用的中间表示形式
- 三地址码
- 类似汇编
- 每个指令最多三个操作数
- 语法结构树/语法树(Syntax Trees)
- 三地址码
目标代码生成器
- 以源程序的中间表示形式作为输入并映射到目标语言
- 重要任务:分配合理的寄存器
代码优化
- 等价程序变换以优化时空效率