编译原理学习
- 名词解释
- 翻译器 translator
- 编译器 compiler 高级语言—>低级语言
- 词法分析 输入的字符流通过词法分析器转换为记号流
position = initial + rate* 60
// 在符号表中根据索引找到对应的元素
<id,1> = <id,2> <+><id,3><*><60>
- 词法分析 输入的字符流通过词法分析器转换为记号流
语法分析
任何一个标识符都是表达式
任何一个数都是表达式
通过构造语法分析树。来判断某个式子是否是表达式
一般都会把分析树进行简化为语法🌲语义分析
输入的是语法树,类型检查后,如果有类型转换的话会插入一些类型转换相关的内容,生成一棵语法树中间代码生成器
从语法树自下而上生成一些列的临时变量。得到三地址中间代码(对2个对象进行操作,保存到另外一个临时变量中)独立于机器的代码优化器
t1 = inttoreal(60) 能在编译期做的事情不要放在运行期,否则像这样的转换语句,如果放在循环当中的话,会执行N此,但是如果编译期间优化完成的话,只会转换一次
对三地址语句的优化
t1 = inttoreal(60)
t2 = id3* t1
t3 =id2 +t2
id1 = t3进行代码优化器优化 t2 = id3 * 60.0 //常量传播 id1 = id2 + t2
代码生成器
三地址中间代码 通过代码生成器 生成汇编代码。依赖机器的代码优化器
目标机器代码
符号表会把各个阶段存储进去
解释器 interpreter
- 解释器也要进行词法分析、语法分析、语义分析中间代码生成。
- 解释器不生成目标代码,而是直接执行源程序所指定的运算。
编译器分为前端和后端
中间代码生成
后面生成特定的机器代码
高级语言的实现
- 高级语言更易于编程,但是程序运行较慢
- 低级语言编程可以实施更有效的控制,得到更有效的代码,但是难于编写容易出错
- 流行的编程语言大多向着提高抽象层级的方向发展
针对计算机体系结构的优化
- 计算机体系结构的优化迅速演化引起对新的编译器技术的一种不知足的需求。计算机体系有某种新特性,编译器必须给支持,否则只能编写汇编代码,来达到想要的目的。
- 编译器重新整理指令,使得指令级并行更有效
- 编译器从传统的串行程序自动生成并行程序,使之运行与多处理器上。
提高软件开发效率的工具
- 类型检查 是一种检查程序前后不一致的成熟而有效的技术
- 边界检查。检查出一部分缓存区移除,
- 自动的内存管理删除内存泄露的相关错误。