编译原理–语法制导,代码生成及tips

[TOC]

编译原理

语义分析

  1. 静态语义分析,审查每个语法结构的静态语义
  2. 翻译,静态语义正确,就执行真正的翻译,将源程序翻译成中间代码,或者目标代码

静态语义分析包含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)删除无用赋值
局限于基本块范围内的优化称为基本块内的优化,也称为局部优化:删除公共子表达式和删除无用代码,重新命名临时变量,交换语句次序;

代码生成

目标代码的三种形式:
能够立即执行的机器语言代码,所有地址均已定位;
待装配的机器代码模块,当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码;
汇编语言代码,需经过汇编程序汇编,转换成可立即执行的机器语言代码
解释性代码生成法
模式匹配代码生成法
表驱动代码生成法


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注