ch1编译概述
1.什么是编译程序
2.翻译程序的类别
汇编程序:用于特定九三级上的汇编语言的翻译程序
编译程序(一次翻译多次执行):将高级语言翻译成低级语言的翻译程序,
高级语言(源程序)->机器语言程序->执行机器语言程序
解释程序(翻译一次执行一次):将会话式语言翻译成目标指令的翻译程序,
高级语言(源程序)->机器语言程序->再翻译源程序的下一条语句并执行。
3.编译程序的步骤
源程序->词法分析->语法分析->语义分析->中间代码生成->代码优化->目标代码生成->目标代码
具体每个步骤的解释
词法分析(Lexical Analysis):读取字符序列(源程序),把这些字符序列切分为有意义的单词,而且对每个单词,给出其类型,生成单词符号(token),表示为<单词词类,单词值>,识别关键词(keyword)、标识符(identifier)、数字(number)等,空格作为分隔符,忽略掉,而且过滤注释部分代码。
语法分析(Syntax Analysis/Parsing):把词法分析器输出的单词符号为基本单位,根据语言的语法规则,构造分析树或语法树,语法树体现了单词符号序列的语法结构,分析树的节点是单词符号或语法单元,语法树的节点是单词符号或语法单元,语法树的节点通常是操作符,而其子节点则是操作数,单词符号序列->分析树(语法树)。
语义分析(Semantic Analysis):利用语法树和符号表,收集语义信息,类型检查和类型转换,验证语法结构合法的程序是否存在语义错误,语法树->带语义信息的语法树。
中间代码生成(Intermediate code generation):生成戴梦得中间表示,中间代码可以认为是一种面向抽象机器的代码结构,需满足两个属性(易于产生,易于翻译成目标语言);带语义(注释)的树->中间代码。
中间代码优化(Intermediate code optimization),对中间代码进行优化(提高时间和空间效率)
代码生成(Code generation):生成目标代码,输入:源程序的中间表示,输出:目标语言,与机器相关。
4.符号表管理:管理分析过程中得到的源程序中的标识符的各种信息,记录源程序中使用的标识符,收集每个标识符的各种属性信息,包括类型、作用域、存储分配信息。
5.出错处理:检查错误的位置、性质(词法、语法、语义。。。),错误恢复。
6.编译器的组织--------前端与后端(提高开发编译器的效率和可移植性)
前端:包括词法分析、语法分析、语义分析、中间代码产生,以及部分代码优化工作,相关的错误处理和符号表的建立;前端依赖于源程序并在很大程度上独立于目标机器。
后端:包括代码优化、代码生成和相关错误处理;并依赖于目标机器。
7.编译程序的生成
正则表达式(词法分析)、上下文无关文法(语法分析)、属性文法(语义分析)。
ch2程序语言的基本知识
1.符号串和语言
符号串:字母表上的符号的有穷序列,也称为句子;例如:0110,great;符号串的运算:连接(Concatenation)、幂;特殊的子串(前缀和后缀和真子串w=uv);
2.文法和语言
生成方式(文法):语言中的每个句子可以用严格定义的规则来构造。识别方式(自动机):用一个过程,当输入的一任意串属于语言时,该过程经有限次计算后就会停止并回答”是“,若不属于,要么能停止并回答”不是“,要么永远继续下去。主要用的是上下文无关文法和正规文法(正则文法)。以有限的规则描述无限的语言现象(语言的有穷描述)。
特殊形式的推导:最左推导和最右推导(规范推导);归约:用产生式的左部来代替右部的过程(最左归约和最右归约)
3.分析树和二义性
如果一个文法的句子有两棵或两棵以上的分析树,称此句子是二义的。最左(右)推导与分析树一一对应,句子二义说明它有两个或以上最左(右)推导。
ch3词法分析
1.词法分析程序的设计
主要功能:
读入源程序字符序列;
对源程序进行预处理,如删除注释和回车换行符,宏展开等;
识别源程序中的单词,创建符号表并在相应的符号表中登录信息;
将单词与行号关联起来,以便编译器能将错误信息与源程序位置联系起来;
输出单词序列。
2.单词的描述
单词是具有独立含义的最小语法单位,程序设计语言(标识符、关键字、常数、运算符、分界符、字符串)二元式<类别,单词的属性值>来表示单词符号
3.有限自动机,正规式与有限自动机的等价性
DFA(确定性有限自动机):最小化(求异法)
NFA(非确定性有限自动机)
4总结
ch4语法分析
1.语法分析概述
2.自顶向下分析
不确定的自顶向下分析(递归下降分析法);LL(1)
自顶向下方法:分析树是从根到叶子节点的顺序构建的,实际上,是寻找从开始符号出发到句子的推导序列,分析器的输入由左到右一个符号一个符号的扫描。
预测分析方法总结:左递归消除,提取左因子,FIRST,FOLLOW,SELECT,LL(1),预测分析表的构建,预测分析器(表驱动的分析方法)
3.自底向上分析
算符优先方法;SLR(1),LALR(1),LR(1)
自底向上分析:分析树是从叶子节点到根节点的顺程序构建的;实际上,是寻找从句子出发到开始符号的规约序列,分析器的输入从左到右一个符号一个符号的扫描。