Parsing
LR(0)/SLR 状态机问题 : 所以说 如果 两个式子 属于同一个 LR(0) 状态机 的 同一个 I 中的时候,只有以下两种情况:1. 注意到I中的第一项,如果第一项关系式中的点后面是个非终止符的话,那么这个终止符可以推出一系列表达式,如果推出的表达式第一项也是非终止符,那么可以递归下去;最终 生成出来的表达式,-> 左侧是那个非终止符,右侧的点永远在最前面; 2. 由于LR(0)只能根据 当前吞入的字符判断状态,那么 假设I0 中有两个这样的状态关系式 : S -> .V=E , E -> .V , 那么当我们仅吞入一个 V 的时候,我们不知道这属于 I0 的哪个,所以需要在 I1中写出两个 : S -> V.=E , E -> V. ,可以观察到这种情况下会导致 I 中有超过一项 关系式的 -> 右侧 的 . 不在最前面 。 我的理解正确吗?
https://gemini.google.com/app/9bd92601bd74a8df?hl=zh
Yes



对于可能出现左递归的语法,其LL(1)预测表中会产生conflict,据此可判断它不是LL(1); 但对于右递归算法,LL(1)没有conflict的情况,为什么还算LL(1)?

LL(1)是自顶向下的,也就是说,对于一个字符串,我们拿到他的一个字母w, 之后,需要从当前非终止符S推出这个w;如果有conflict的话,那么在这里就会有两条规则 使得 S 的第一个字母可以推出w,就难以选择了
SLR 相对于 LR(0)


举例一个 SLR能解决 但 LR(0)不能解决的情况



T1

第一步:LR(0) 状态机 (Automaton)


这里 I2 的 冲突 LR(0) 和 SLR 都无法解决
可以看到,除了I0, 其他 (例如I5) 只有在 ->右侧 . 后面是非终止符时,才会继续递归下去
第二步:计算 FOLLOW 集合(在通过 LR(0)状态机制作 SLR表的时候,我们该如何知道哪个地方应该填reduce呢?当LR表的一个箭头表达式的 . 在最后,并且->前面的状态的FOLLOW中包含下一个输入的内容,则可以进行填写reduce,reduce里的数字 参考算FOLLOW时的顺序 )

第三步:SLR 预测分析表


模拟
