写在前面,本文由本人在学习完B站视频:原视频链接后进行整理
本文配合基础笔记食用更佳
第二章
文法
最左右推导、最左右规约、语法树
二义性
短语、直接短语、句柄
化简文法
第三章 词法分析及词法分析程序
状态转换图
NFA确定化和最小化步骤
构造正规语言的DFA
第四章 语法分析和语法分析程序
消除左递归性
对开始符号A开始推导,如果用若干次A→Aα替换句型中的A,最终开始符号可以推导出一个句型Aααα…,如果想推导出一个句子,就一定会使用A→β这个产生式,所以,最终推导出的句子为β或βα…[1,∞)多个阿尔法
既然知道了语言,既可以重写它的文法:
经过分析,文法推导出的句子必然以β开头,后面跟0到多个α。
使用产生式A→βA’产生以β开头的句子,使用A’→αA’|ε产生[0,∞)个α。
所以文法被改写为
A→βA’ A’→αA’|ε
消除回溯,提左公因子
求FIRST集和FOLLOW集
判断LL(1)文法
构造分析表
预测分析程序
第五章 自下而上分析
规约
短语:以非终结符为根子树中所有从左到右的叶子;
直接短语:只有父子关系的树中所有从左到右排列的叶子(树高为2);
句柄:直接短语中最左边父子关系树中所有从左到右排列的叶子(句柄是唯一的)。
链接
算符优先分析
(1)Firstvt集合
找Firstvt的三条规则:如果要找A的Firstvt,A的候选式中出现:
A->a…,即以终结符开头,该终结符入Firstvt
A->B…,即以非终结符开头,该非终结符的Firstvt入A的Firstvt
A->Ba…,即先以非终结符开头,紧跟终结符,则终结符入Firstvt
(2)Lastvt集合
找Lastvt的三条规则:如果要找A的Lastvt,A的候选式中出现:
A->…a,即以终结符结尾,该终结符入Lastvt
A->…B,即以非终结符结尾,该非终结符的Lastvt入A的Lastvt
A->…aB,即先以非终结符结尾,前面是终结符,则终结符入Lastvt
步骤二:逐条扫描文法规则
(1)因存在 E → (E)的规则,则有=
(2)寻找终结符在左边,非终结符在右边的符号对
+T 则 +< FIRSTVT(T)
*F 则 *< FIRSTVT(F)
(E 则 (< FIRSTVT(E)
(3)寻找非终结符在左边,终结符在右边的符号对
E+ 则 LASTVT(E)>+
T* 则 LASTVT(T)>*
E) 则 LASTVT(E)>)
步骤三:寻找$与开始符号E的关系
(1) = = =
(2) < F I R S T V T ( E ) 且 L A S T V T ( E ) > <FIRSTVT(E)且LASTVT(E)> <FIRSTVT(E)且LASTVT(E)>
素短语:至少含有一个终结符,并且,除它之外不含有任何更小的素短语
算符优先方法的分析过程
LR分析法
拓广文法
分析表ACTION和GOTO子表的构造方法
SLR分析表的构造 (考试重点内容)
移进——规约冲突怎么处理
如何判断是否为SLR(1)文法?
例题1
与LR分析表进行对比
例题2
第五章习题课
第一题
第二题
第三题
第四题
第五题
第六章 属性文法和语法制导翻译
综合属性、继承属性
S-属性文法的自下而上计算
L属性文法和自顶向下翻译
翻译模式
逆波兰表示方式翻译模式
建立翻译模式
改写例题:
盒子文法
自顶向下翻译
一般方法
要求掌握程度
第七章
逆波兰表达式
重点布尔表达式的翻译
第九章
第十一章