针对循环优化:强度削弱 删除归纳变量 代码外提
终结符具有综合属性
词法分析阶段不能识别四元式
词法分析器的输入是源程序
DFA构成:有穷字母表 终止状态集合 有限状态集合
编译过程包括词法分析 语法分析 语义分析和中间代码产生 中间代码优化 目标代码生成 符号表 和出错处理七个阶段
符号表和出错处理贯穿整个编译过程
词法分析:lex和flex 语法分析:yacc
采用中间代码有什么好处?
方便进行与及机器无关的代码优化
改变目标机更容易
使编译程序的逻辑结构更明确
三地址代码的形式:三元式 四元式 和间接三元式
三元式:占用空间小,调整顺序或优化困难
四元式:优化方便,占用空间大
间接三元式:占用空间相对较小,调整顺序或优化时相对容易
第一章
翻译程序:把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语言程序)的程序
编译程序:把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序
解释程序:把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身
编译程序的工作一般分为五个阶段:
词法分析:
o任务: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。
o依循的原则:构词规则
o描述工具:正规式和有限自动机
语法分析:
o任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。
o依循的原则:语法规则
o描述工具:上下文无关文法
语义分析与中间代码产生
o任务:对各类不同语法范畴按语言的语义进行初步翻译。
o依循的原则:语义规则
o中间代码:三元式,四元式,树形结构等
优化
o任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。
o依循的原则:程序的等价变换规则
目标代码产生:
o任务: 把中间代码变换成特定机器上的目标代码。
o依赖于硬件系统结构和机器指令的含义
遍
o所谓"遍", 就是对源程序或源程序的中间表示从头到尾扫描一次。
o阶段与遍是不同的概念。一遍可以由若干段组成,一个阶段也可以分若干遍来完成。
编译前端和后端
o编译前端:与源语言有关,如词法分析,语法分析,语义分析与中间代码产生,与机器无关的优化
o编译后端:与目标机有关,与目标机有关的优化,目标代码产生
第二章:
n语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序。
n语义:一组规则,用它可以定义一个程序的意义。
上下文无关文法:
语法树和二义性
n语言的二义性:如果产生上下文无关语言的每一个文法都是二义的,则说此语言是二义的。
第三章
词法分析的任务:从左至右逐个字符的对源程序进行扫描,产生一个个单词符号
功能:输入源程序,输出单词符号
单词符号种类:基本字、标识符、常数、运算符、界符
词法分析器作为一个独立子程序:
词法分析作为一个独立的阶段,是否应当将其处理为一遍呢?
作为独立阶段的优点:结构简洁、清晰和条理化、有利于集中考虑词法分析一些枝节问题
不作为一遍:将其处理为一个子程序
第五章 自下而上分析
项目:移进,规约,接受,报错
规约:是指根据文法的产生式规则,把产生式的右部替换成左部符号
最左规约称为规范规约
一个句型的最左直接短语称为该句型的句柄
第六章 属性文法和语法制导翻译
属性的分类:综合属性(自下而上)和继承属性(自上而下)
属性文法分类:S-属性文法,L-属性文法
什么是S-属性文法?什么是L-属性文法?它们之间什么关系?
S-属性文法是只含有综合属性的属性文法
L-属性文法要求对于每个产生式A->X1X2...Xn,其每个语义规则中的每个属性或者是综合属性,或是Xj的一个继承属性,且该属性仅依赖于:
(1)产生式Xj的左边符号X1,X2...Xj-1的属性;
(2)A的继承属性
S-属性文法是L-属性文法的特例
终结符只有综合属性,非终结符既可以有综合属性也可以有继承属性
第七章 语义分析和中间代码产生
中间语言:后缀式(逆波兰表示法) DAG 三地址代码(四元式,三元式,间接三元式)
第十章 优化
优化原则:等价 有效 合算
根据优化对象所涉及的程序范围分为:局部优化 循环优化 全局优化
局部优化:局限于程序基本快范围内的一种优化
局部优化包括:合并已知量 删除公共子表达式 删除无用赋值
循环优化:指对循环中的代码进行优化
循环优化包括:代码外提 删除归纳变量 强度削弱
全局优化是在整个程序范围内进行的优化,需进行数据流分析,花费代价很高
第十一章 目标代码生成
目标代码有三种形式:机器语言代码 机器语言模块 汇编语言代码