LR
分析法是一种规范归约分析法,大多数上下文无关
文法都可以用相应
LR
分析器识别
LR
分析器的
关键部分
是
LR
分析表
从给定的上下文无关文法构造
LR
分析表的方法是
对
LR(0)或
SLR(1)
分析表,构造
LR(0)
项目集规范
族,而对
LR(1)或
LALR(1)
分析表,则构造
LR(1)
项
目集族
构造识别文法规范句型活前缀的
DFA
将
DFA
转换成相应的
LR
分析表
四种分析表的构造基本相同,仅对
含归约项目
的项目集构造
分析表元素有所不同。
注意文法要拓广。
四种
LR
文法的定义
LR(0)
文法是所有
LR(0)
项目集中
没有“移进-归
约”或“归约-归约”冲突(或
LR(0)
分析表中不
含多重定义)
SLR(0)
文法是
LR(0)
项目集中含有冲突的项目都能
用
SLR
规则解决(或
SLR(0)
分析表中不含多重定
义)
LR(1)
文法是所有
LR(1)
项目集中
没有“移进-归
约”或“归约-归约”冲突(或
LR(1)
分析表中不
含多重定义)
LALR(1)
项目集中无“归约-归约”冲突(或
LALR(1)
分析表中不含多重定义)。注意
搜索符叧
对归约项目起作用
四种
LR
文法的判别方法
首先构造
LR(0)
项目集规范族,若无冲突,则为
LR(0)
文法,同时也为
SLR(1), LR(1)
和
LALR(1)
若不是
LR(0)
文法,则看是否能用
SLR(1)
方法解决
冲突,若能则为
SLR(1), LR(1)
和
LALR(1)
文法
若不是
SLR(1)
文法,则构造
LR(1)
项目集族,若无
冲突则为
LR(1)
文法,合并同心集后若仍无冲突,
则也为
LALR(1)
文法。
四种文法之间的关系
LR(0) ⊂
SLR(1) ⊂
LALR(1) =
LR(1)