消除 E := EE+|EE-|id 的左递归
如何消除以下语法的左递归?
E := EE+|EE-|id
使用通用过程:
A := Aa|b
翻译为:
A := b|A'
A' := ϵ| Aa
将其应用到我们得到的原始语法:
A = E, a = (E+|E-) and b = id
因此:
E := id|E'
E' := ϵ|E(E+|E-)
但是这个语法似乎不正确,因为
ϵE+ -> ϵ id +
它是有效的 但这是一个不正确的后缀表达式。
How to eliminate left recursion for the following grammar?
E := EE+|EE-|id
Using the common procedure:
A := Aa|b
translates to:
A := b|A'
A' := ϵ| Aa
Applying this to the original grammar we get:
A = E, a = (E+|E-) and b = id
Therefore:
E := id|E'
E' := ϵ|E(E+|E-)
But this grammar seems incorrect because
ϵE+ -> ϵ id +
would be valid
but that is an incorrect postfix expression.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您引用的“通用程序”是错误的。从《龙之书》中取出它:
变成
……从而产生:
Your “common procedure” is cited wrong. Taking it from the Dragon Book:
becomes
… which yields: