江苏大学编译原理复习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章引论(编译程序概述)
1.编译程序的功能
将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序
2.编译程序的工作过程、结构图
工作过程:词法分析、语法分析、语义分析与中间代码生成、优化、目标代码生成
第二章词法分析
1.单词符号的分类、词法分析的输出形式
分为五种:保留字、标识符、常数、运算符、界符
输出的单词符号通常表示成如下的二元式:(单词种别,单词自身的值)
2.利用状态转换图构造词法分析器
3.正规式与有限自动机的概念
正规表达式就是一种形式化的表示法,它可以表示单词符号的结构,从而精确地定义单词符号集。
有限自动机(FA)是更一般化的状态转换图,它分为确定有限自动机DFA和非确定有限自动机NFA两种
4.由正规式构造NFA,NFA的确定化及化简的方法
选择题、P23-P26例题
第三章语法分析
1.文法的概念
文法通常表示成四元组G[S]=(V T,V N,S,ξ),其中:
(1) V T为终结符号集,这是一个非空有限集,它的每个元素称为终结符号(输入字母表)
(2) V N为非终结符集,它也是一个非空有限集,其每个元素称为非终结符号,且有V T∩V N=Φ;(状态)
(3) S为一文法开始符,是一个特殊的非终结符号,即S∈V N(起始状态)
(4) ξ是产生式的非空有限集,其中每个产生式(或称规则)是一序偶(α,β),通常写作
α→β。
读作“α是β”或“α定义为β”。
文法产生的语言:设文法G[S]=(V T,V N,S,ξ)且α、β∈(V T∪V N)*,如果存在产生式A→δ(δ∈(V T∪V N)*),则称αAβ可直接推出αδβ,即
αAβ⇒αδβ
注意:
假定G[S]是一个文法,S是它的开始符号,如果S⇒*α,α∈(V T∪V N)* ,则称α是文法G[S]的一个句型;
如果α∈V T*,则称α是文法G[S]的一个句子。
仅含终结符的句型是一个句子。
2.规范推导、短语、直接短语、句柄、语法树
(规范推导)推导序列中的每一步推导都是对句型中的最右非终结符用相应产生式的右部进行替换,这样的推导称为最右推导,称最右推导为规范推导。
规范推导的逆过程便是规范归约
(直接短语)设αβδ是文法G[S]的一个句型,如果有:
S⇒*αAδ且A⇒+ β(短语的两个条件缺一不可)
则称β是句型αβδ关于非终结符A的一个短语,或称β是αβδ的一个短语。
(直接短语)特别是有A→β(S⇒*αAδ⇒αβδ)产生式时,β为句型αβδ的一个直接短语或简单短语。
(句柄)一个句型的最左直接短语称为该句型的句柄。
注意,一个句型的直接短语可能不只一个,但最左直接短语则是惟一的。
(语法树)对文法G[S]=(V T,V N,S,ξ) ,满足下列条件的树称为G[S]的语法树:
(1) 每个结点用G[S]的一个终结符或非终结符标记;
(2) 根结点用文法开始符S标记;
(3) 内部结点(指非树叶结点)一定是非终结符,如果某内部结点A有n个分支,它的所有子结点从左至右依次标记为x1、x2、…、x n,则A→x1x2…x n一定是文法G[S]的一条产生式;
(4) 如果某结点标记为ε,则它必为叶结点且是其父结点的惟一子结点。
3.文法二义性的含义、证明
(含义)文法G[S]的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的。
如何消除二义性见3.6
4.递归下降分析法
(消除左递归、消除回溯、递归分析程序的构造)
5.LL(1)分析法(FIRST和FOLLOW集、分析表的构造)
6.LR分析法(LR(0)分析表的构造)
7.SLR(1)分析法(SLR(1)文法的判定、SLR(1)分析表的构造、与LR(0)分析法的区别)
参考P87 3.3 3.4 3.6 3.7 3.9 3.10 3.19 3.22
第四章语义分析与中间代码生成
1.语法制导翻译法
语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序
2.四元式(三地址代码语言的具体实现通常有三种表示方法:四元式、三元式和间接三元式)
四元式是具有四个域的记录结构,这四个域为
(op,arg1,arg2,result)
其中,op为运算符;arg1、arg2及result为指针,它们可指向有关名字在符号表中的登记项或一临时变量(也可空缺)。
3.赋值语句的翻译
4.布尔表达式的翻译
5.书后习题(选择题、类例4.5 4.6)
第五章优化
1.优化的目的
代码优化的目的是提高目标程序的质量。
2.基本块DAG优化的方法
3.书后习题(选择题、P155 5.6)。