Compiler construction 每个LR(0)语法都是SLR(1),但反之亦然,不一定是真的,为什么?
每个LR(0)语法都是SLR(1),但反之亦然,不一定是真的,为什么?基本上,SLR(1)语法可以解决相应LR(0)语法中存在的移位-减少冲突。以维基百科页面上的语法为例(从一个较低、更严格的层面解释了这一点):Compiler construction 每个LR(0)语法都是SLR(1),但反之亦然,不一定是真的,为什么?,compiler-construction,lr,Compiler Construction,Lr,每个LR(0)语法都是SLR(1),但反之亦然,不一定是真的,为什么?基本上,SLR(1)语法可以解决相应LR(0)语法中存在的移位-减少冲突。以维基百科页面上的语法为例(从一个较低、更严格的层面解释了这一点): → E E→ 1 E E→ 一, 当LR(0)解析器解析E且“1”是下一个输入符号时,它可以识别E并减少(规则3),或者它可以移动以解析后面的E(规则2)。因为它不能向前看,所以LR(0)不能决定该做什么。如果我们看一下LR(0)遇到“1”(已添加字符串结尾符号)时可能正在处理的情况,
- E→ 1•E$
- E→ 1•$
另一个语法,即SLR(1)而不是LR(0),参见德克萨斯大学的Fegaras。