LR分析法的归约过程是规范推导的逆过程,所以LR分析过程是一种规范归约过程
LR分析过程:第一步 分析开始时,首先将初始状态SO及句子左界符,推入分析栈中
第二步 设在分析的某一步,分析栈及余留的输入符号串处于如下的格局
第三步 重复上述第二步的工作,直到在分析的某一步,栈顶出现“接受状态”或“出错状态”为止。
非LR文法结构:非LR结构
LR文法不是二义的,二义文法肯定不会是LR的。
结论:LR文法肯定是无二义的,即二义文法都不是LR文法
活前缀与句柄间的关系:
(1)活前缀中已含有句柄的全部符号(句柄的符号即为其最右符号)。
(2)活前缀中含句柄的一部分符号(句柄开头的 若干符号与活前缀最右的若干个符号一致)。
(3)活前缀中全然不包含句柄的任何符号 。
构造识别活前缀的NFA:1、构造文法的所有产生式的项目,每个项目都为NFA的一个状态。
2、确定初态、句柄识别态、句子识别态。
由于S′(起始符)仅在第一产生式的左部出现 ,因此规定起始符相关的项目1为初态
其余每个状态都为活前缀的识别态(终态)
圆点在最后的项目为句柄识别态
第一个产生式的句柄识别态为句子识别态
构造识别文法活前缀DFA的两种方法:1、求出文法的所有项目,按一定规则构造识别活前缀的NFA再确定化为DFA。
2、把拓广文法的第一个项目{S′→·S}作为初态集的核,通过求核的闭包和转换函数, 求出LR(0)项目集规范族,再由转换函数建立状态之间的连接关系得到识别活前缀的DFA。
LR(0)文法:LR(0)项目集规范族不存在移进-归约,或归约-归约冲突,称为LR(0)文法。
只有是LR(0)文法,才能构造相应的LR(0)分析表,才能用LR(0)分析法对句子进行分析。