编译原理2019年期末复习提纲
制作:纪元 - 刘李明
本提纲遵循CC-BY-NC-SA协议
(署名-非商业性-相同方式共享)参考PPT:中国大学MOOC-武汉理工大学-编译原理(SPOC课程)
第一章
知识回顾
编译程序与解释程序
编译程序会生成目标代码,解释程序不会生成目标代码(边解释边分析,解释一句执行一句)
五个阶段:(注重功能+输入输出)
- 词法分析
- 语法分析
- 语义分析+中间代码生成
- 代码优化
- 目标代码生成
前三个阶段属于前段,不依赖目标机
后三个阶段属于后端,依赖目标机
重点学习中间代码优化,一部分属于前段,一部分属于后端
第二章 - 文法与语言
知识回顾
文法的形式化定义
- 第二章 知识点3 PPT24
遵循体系:乔姆斯基形式化定义体系
四元组:(vn-非终结符集,vt-终结符集,p-产生式集,s-文法开始符号)
文法的分类
具体分类:0,1,2,3型文法
-
2型文法:上下文无关文法,主要用于程序设计中的语法分析
-
型文法:正规文法,主要用于单词的分析(用于识别单词)
文法等价
如果两个文法定义、描述的语言相同,那么认为文法等价。
-
给语言写文法,得到的结果不一定唯一(角度不同结果不同)
-
文法写出的语言相同,那么一定等价
建立在文法形式化上的推导
- 第二章 知识点4 PPT2-3
主要用于语法分析阶段,特别是自顶向下语法分析中,指用产生式右部替换右部。
最左推导,最右,一般
- 第二章 知识点4 PPT5
最左推导:坚持在当前推导步骤中,替换最左边那个非终结符。
最右推导:坚持在当前推导步骤中,替换最右边那个非终结符。
一般推导:在推导过程中无特定要求
推导符号表示
直接推导:双箭头
一步或多步推导:箭头上包括正闭包符号(加号)
零步或多步推导:箭头上包括闭包符号(星号)
句型、句子、语言
- 第二章 知识点4 PPT2-4,7
给定一个文法机,如果从文法开始符号s出发,经过0步或多步推导得到一个串a
- 如果a属于Vn、Vt的闭包,那么这个a就是句型。
- 如果a属于Vt的闭包,那么这个a就是句子。(句子是仅包含终结符的句型)
- 给定一个文法机,其所描述的语言就是句子的集合。(语言是属于句子的a的集合)
语法树(推导树)与二义性
- 第二章 知识点4 PPT10、16
文法二义性:对于一个文法机,如果一个句子/型,能找到两个不同的最左/右推导(推导树),那么就有二义性
没有程序能判断一个文法机的二义性
习题
- 文法-语言(给语言写文法必考):P34:2,3,8,12,13,16
- 推导、语法树、文法的二义性:P34:4,6,7,8,9,11
短语、直接短语:P34:10,11
第三章-词法分析
知识回顾
词法分析任务、单词的输出
- 第三章 知识点5 PPT22、17
编译的第一个阶段,对源代码程序进行扫描(自左向右自上而下)依据相应的规则识别出单词,并把单词转化为机内的统一形式token(二元组)
单词的分类
- 第三章 知识点5 PPT1 6
单词的描述工具
- 第三章 知识点5 PPT2 3-43
- 正规文法
- 正规式
- 有穷自动机
- 确定有穷自动机(DFA)
- 不确定有穷自动机(NFA)
NFA画法
- 第三章 知识点6 PPT1 3-6
初态:双箭头
终态:双圈
词法分析程序的构造过程
- 第三章 知识点8 PPT 3-25
由正规式,正规文法转化成NFA,然后确定化为DFA,最后化简DFA
习题
P64 1、2、3、4、7
正规文法转化为NFA
第四章-自顶向下语法分析
知识回顾
自顶向下语法分析思路
- 第四章(1) 知识点10 PPT1 3
(必须是LL(1)型文法)以文法开始符号为树根,采用自左推导的方法,自上而下为待识别符号串构建一棵语法树
LL(1)文法的定义及判别方法(FIRST、FOLLOW)
- 第四章(1) 知识点10 PPT2 19,21-39
当且仅当同一终结符不同可选集两两不相交。
确定的自顶向下分析方法
- 第四章(2) 知识点12 PPT 3-12 知识点13 PPT 1-18
递归下降法
预测分析法
预测分析表(LL(1)分析表)的构造
- 第四章(2) 知识点13 PPT 2-4
对文法G的每个产生式A->a执行如下:
- 对每个a属于Select(A->a),将A->a加入M[A,a]
- 把所有无定义的M[A,a]标上“出错标志"
第五章-自底向上分析法
知识回顾
自底向上语法的基本思想
- 第五章(1) 知识点15 PPT 2
实现自底向上分析最常用的技术是:移进-归约(shift-reduce)分析技术。
- 从所要分析的输入串开始进行分析
- 从左向右扫描输入串,一边将输入符移进分析栈内,一边检查位于栈顶的一串符号是否与某个产生式的右部相同,若发现相同,就替换为相应产生式的左部的非终结符(归约);若不相同,则继续移进输入符。
- 重复上一步骤,直到归约至文法开始符号。
其关键性问题是:如何识别句柄。
第六章语法制导翻译与中间代码的生成
知识回顾
属性文法
- 第六章(1) 知识点26 属性文法PPT 2-4
在上下文无关文法基础上对文法增加了属性和规则,形成了属性文法。
语法制导翻译技术
在语法制导的同时进行翻译。
中间代码形式
- 第六章(2) 知识点28 中间代码形式的PPT 4-12
常用:三地址码(TAC)、四元式、逆波兰式、数代法(?)