如何消除具有 epsilon 产生式的左递归?
How to Eliminate Left Recursion having epsilon Production?
我看过这个link。但是我有点困惑如何在这里消除∈产生式。
我有以下语法
S-->Sz|Sxw|xw|yw|∈
我可以看到删除 epsilon 产生式后语法变成了
S-->Sz|Sxw|xw|yw|z
现在,如果我解决了这个问题,我会得到如下结果
S-->xwS`|zS`|ywS`
S`-->zS`|xwS`|∈
现在我可以看到 S-->xwS`|zS` 和 S`-->zS` |xwS`。这变成了 same.Is 是对的还是我做错了什么??
重复规则没有错。
在尝试理解语法时,我经常发现有用的一种方法是将其转换为正则表达式
S := (xw + yw + z)(z + xw)*
因为它让我很好地了解了整个语法并有助于发现错误。所以如果我把它分成这样:
S := (xw + yw + z)S'
S' := (z + xw)*
它让我更容易看到我是否犯了任何错误。
我看过这个link。但是我有点困惑如何在这里消除∈产生式。
我有以下语法
S-->Sz|Sxw|xw|yw|∈
我可以看到删除 epsilon 产生式后语法变成了
S-->Sz|Sxw|xw|yw|z
现在,如果我解决了这个问题,我会得到如下结果
S-->xwS`|zS`|ywS`
S`-->zS`|xwS`|∈
现在我可以看到 S-->xwS`|zS` 和 S`-->zS` |xwS`。这变成了 same.Is 是对的还是我做错了什么??
重复规则没有错。
在尝试理解语法时,我经常发现有用的一种方法是将其转换为正则表达式
S := (xw + yw + z)(z + xw)*
因为它让我很好地了解了整个语法并有助于发现错误。所以如果我把它分成这样:
S := (xw + yw + z)S'
S' := (z + xw)*
它让我更容易看到我是否犯了任何错误。