[英]SLR(1) parser with epsilon transitions in the grammar
我正在根据以下语法编写 SLR(1) 解析器:
1) S -> aSb
2) S -> cB
3) B -> cB
4) B -> ε
首先,我开始通过增加S' -> S
产生式的增强语法找到关联的 LR(0) 自动机并开始计算各种状态。 我发现的状态是:
I0 = {S'->•S, S->•aSb, S->•cB}
𝛿(I0, S) = I1; 𝛿(I0, a) = I2; 𝛿(I0, c) = I3;
I1 = {S'->S•}
I2 = {S->a•Sb, S->•aSb, S->•cB}
𝛿(I2, S) = I4; 𝛿(I2, a) = I2; 𝛿(I2, c) = I3
I3 = {S->c•B, B->•cB, B->•ε}
𝛿(I3, B) = I5; 𝛿(I3, ε) = I6; 𝛿(I3, c) = I7;
I4 = {S->aS•b}
𝛿(I4, b) = I8;
I5 = {S->cB•}
I6 = {B->ε•}
I7 = {B->c•B, B->•cB, B->•ε}
𝛿(I7, B) = I9; 𝛿(I7, ε) = I6; 𝛿(I7, c) = I7;
I8 = {S->aSb•}
I9 = {B->cB•}
这里有 LR(0) 自动机:
在那之后,我做了解析器表(但我认为不需要它来回答我的问题)所以我有一个疑问:epsilon 转换是否以正确的方式处理? 我的意思是,我将其视为正常字符,因为我们必须在某些时候减少规则编号 4。 如果我错了,我应该如何对待这种转变? 提前致谢,希望这对其他人也有帮助。
不需要......即使我在删除以下语法的左递归时也遇到了同样的问题
E->E+T|ET|T
转换后的规则看起来像E->TX X->+TX|-TX|*e*
没关系
x->。 e和 x-> e 。 没有意义。因为移动厄普西隆前后的时期是疯子的工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.