[TOC]
编译原理
语义分析
- 静态语义分析,审查每个语法结构的静态语义
- 翻译,静态语义正确,就执行真正的翻译,将源程序翻译成中间代码,或者目标代码
静态语义分析包含1)类型检查;2)控制流检查控制语句必须能转移到合法位置;3)一致性检查,对象只能定义一次,case不能重复等;4)相关名字检查;5)命名作用域;
中间代码:又称中间语言,为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可以将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作使代码优化比较容易实现.
属性文法
- 文法属性:指与文法符号的类型和值等相关的一些信息,在编译中用属性描述处理对象的特征
- 属性文法:在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)引入若干属性值,为三元组 A=(G,V,F) V表示有穷集,F表示属性的断言的有穷集
语法制导翻译
不是一种形式系统,接近形式化的,以属性文法为工具来说明程序设计语言的语义
中间代码
- 逆波兰记号(后缀式):日你个鸡儿哟,妈的直接后缀不就行了吗?
- 三元式:(操作符,参数1,参数2);变量是算法行号
- 四元式:(op,arg1,arg2,result);result可以是变量Ti;
- 树形:
- 三地址码:(a=bc+de);(1)T1=bc,(2)T2=cd,(3)T3=T1+T2;
代码优化
常用的优化技术有:1)删除多余运算;2)循环不变代码外提;3)强度削弱;4)变换循环控制条件;5)合并已知量与复写传播;6)删除无用赋值
局限于基本块范围内的优化称为基本块内的优化,也称为局部优化:删除公共子表达式和删除无用代码,重新命名临时变量,交换语句次序;
代码生成
目标代码的三种形式:
能够立即执行的机器语言代码,所有地址均已定位;
待装配的机器代码模块,当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码;
汇编语言代码,需经过汇编程序汇编,转换成可立即执行的机器语言代码
解释性代码生成法
模式匹配代码生成法
表驱动代码生成法
发表回复