<!doctype html>
编译原理
编译原理概述
1、编译概念:
- 从高级语言->目标代码的过程(汇编语言or机器码)
2、编译器的结构:
-
分析部分/前端(front end)->与源语言相关
- 词法分析>>词法单元流
- 语法分析>>语法分析树parse tree
- 语义分析>>语法树
- 中间代码生成>>中间表示形式
- 机器无关的代码优化
-
综合部分/后端(back end)->与目标语言相关
- 目标代码生成>>目标机器语言
- 机器相关代码优化>>目标机器语言
3、词法分析
-
主要任务:
-
扫描源程序->识别每个单词->确定单词类型->将识别的单词换成机内表示(即:词法单元token)
-
token:<种别码:属性值>
-
单词类型 种别 种别码 关键字 if 等 一词一码 标识符 变量、数组名、过程名…… 多词一码 常量 多词一码 运算符 算术运算符:+-
关系运算符:> < ==
逻辑运算符:& ! ||一词一码
一型一码界限符 ;{}()=…… 一词一码
-
-
4、语法分析
- 概念:语法分析器Parser从词法分析器输出的token中,识别各类短语,构造语法分析树parse tree
5、语义分析
-
主要任务:
-
收集标识符的属性信息->>>存放在符号表Symbol Table中
- 种属kind
- 类型type
- 存储位置、长度
- 值
- 作用域
- 参数和返回值信息
-
语义检查:
- 变量or过程未经声明便使用
- ……重复声明
- 运算分量类型不匹配(强制类型转换or报错)
-
6、中间代码生成
-
中间表示形式:
-
三地址码Three-address Code
-
三地址指令的表示形式:
-
三元式
-
间接三元式
-
四元式
-
-
语法结构树/语法树Syntax Tree
-
7、目标代码生成:
-
中间表示形式作为输入,映射到目标语言
- 重要作用:为程序变量使用分配寄存器
8、代码优化
- 等价程序变换,使其运行快,占内存少。