目录
1.引入背景
上一讲我们讲了LR分析法和LR分析器的性质,我们知道了在规范规约过程中,栈内的符号串需要满足一定的条件,见下图:
LR分析器的工作过程实际上就是逐步产生规范句型的活前缀 。
如何保证栈内的符号串永远不会出现在句柄之后呢,于是我们引入了字的活前缀。
2.基本定义
(1)字的前缀
是指字的任意首部,如字ab的前缀有ε(ε是任何字的前缀),a , ab ,abc。
(2)活前缀
可能大家看的有点懵,还是不理解什么叫做活前缀。其实通俗一点来讲,活前缀就是句柄的子集。
3.识别活前缀
DFA状态机一直在分析活前缀,分析出一个句柄之后就分析到头了,然后立马规约这个句柄,就一直在规约句柄。活前缀之所以称为活前缀就是这么来的。为了防止歧义,就不能用NFA。
4.构造识别活前缀的DFA
(1)文法的拓广
(2)LR(0)项目
大家可能看了还有点懵,我来举个例子供大家理解一下。
(3)相关例题
根据上面的概念,我们可以列出该文法的所有项目
按照这个思路我们就能构造出识别所有文法的活前缀,我们下一讲将介绍把识别文法所有活前缀的NFA确定化。