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