自下而上分析法
1.知识点:
项目、项目集、项目集规范族
项目集的闭包(closure)
有效项目 有效项目 同心集
2.LR分析法:
LR分析方法是一种自下而上的分析方法
LR分析法的归约过程是规范推导的逆过程,所以LR分析过程是一种规范归约过程
LR分析方法是一种适用于一大类上下文无关文法的分析方法
比较复杂,不适于用手工实现,可借助于YACC/bison实现
根据归约过程中向前看输入符号串中字符的个数,定义不同的LR(k)分析方法,通常,k=0
(1)动作表
<1>. 移进
<2>. 归约
<3>. 接受
<4>. 报错
3.LR文法
一个文法,如果能构造出一个所有条目都唯一的分析表。
LR(k)文法
最多向前看K个的符号就可以决定动作的LR分析器所分析的文法成为LR(k)文法。
我们最感兴趣的是k=0,1
存在移进、归约冲突的文法
4.活前缀:文法G的活前缀是他的规范句型的前缀,该前缀不超过句柄的右端。
活前缀特点:
该前缀加上被分析串中未被分析的终结符,就可以构成一个规范句型
只要输入串的已扫描部分可归约成一个活前缀,意味着扫描过的部分没有错误。
(1)活前缀中已含有句柄的全部符号(句柄的符号即为其最右符号)。
(2)活前缀中含句柄的一部分符号(句柄开头的 若干符号与活前缀最右的若干个符号一致)。
(3)活前缀中全然不包含句柄的任何符号
LR分析表的构造需要构造识别活前缀的有限自动机,
用有限自动机中的状态表示分析表中的状态,
用状态图中的状态之间的转换关系对分析表中的action goto函数等进行定义。
LR(0)项目集规范族不存在移进-归约,或归约-归约冲突,称为LR(0)文法。
只有是LR(0)文法,才能构造相应的LR(0)分析表,才能用LR(0)分析法对句子进行分析。
5.同心集合并后心仍相同,只是超前搜索符集合为各同心集超前搜索符的和集合并同心集后转换函数自动合并。
LR(1)文法合并同心集后也只可能出现归约-归约冲突,而没有移进-归约冲突。