[英]Reducing grammar to LL1
我有以下语法:
A-> AB|CA
B-> Bd | ef
C-> e|f
我按如下所示删除了左递归,语法如下:
A->CAA'
A'-> BA'
A'-> epsilon
B-> efB'
B'->dB'
B'-> epsilon
C->e
C->f
为此,我遇到的问题是为此构造解析表时存在歧义。 有人可以为此指出正确的方向吗? 或者,我认为我在计算“解析表”的“第一和第二”集时出错。
编辑
Woops。 原始语法不会派生任何终端字符串,因此尝试使其为LL(1)是没有意义的。 第一次生产总是产生其中带有A
的形式,并且没有其他衍生自A
您是否跳过了某些内容或帖子中有错字?
等待修复:
您的左递归移除效果很好。 现在,您需要每个产品的预测集:
A->CAA' first(CAA') = { e, f }
A'-> BA' first(BA') = { e }
A'-> epsilon follow(A') = follow(A) = { end of input }
B-> efB' first(efB') = { e }
B'->dB' first(dB') = { d }
B'-> epsilon follow(B') = { end of input }
C->e first(e) = { e }
C->f first(f) = { f }
这里没有歧义,因为对应于任何给定左侧的每个右侧的预测集具有空的成对相交。
您看到了什么歧义?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.