将模糊的CFG转换为非模糊的CFG

时间:2014-03-23 15:00:39

标签: grammar

我有语法:

S -> aSb | bSa | SS | epsilon

我希望生成一个明确的版本。

我尝试过分层但只能达到这个,这不是我不相信的明确,因为规则A - > aC和A - >对于某些输入,AA都是可能的:

S -> A | epsilon

A -> aC | bD | AA

C -> Cb | b

D -> Da | a

1 个答案:

答案 0 :(得分:2)

S  -> aSb | bSa | SS | ϵ

如果我在这里没有完全错,那么这里唯一的问题是S的左递归,所以如果你删除它,你应该没问题:

S  -> S' S'
S' -> aSb | bSa | ϵ

这也应该消除歧义。

另一种解决方案可能是:

S  -> aSbS | bSaS | ϵ