我有语法:
S -> aSb | bSa | SS | epsilon
我希望生成一个明确的版本。
我尝试过分层但只能达到这个,这不是我不相信的明确,因为规则A - > aC和A - >对于某些输入,AA都是可能的:
S -> A | epsilon
A -> aC | bD | AA
C -> Cb | b
D -> Da | a
答案 0 :(得分:2)
S -> aSb | bSa | SS | ϵ
如果我在这里没有完全错,那么这里唯一的问题是S的左递归,所以如果你删除它,你应该没问题:
S -> S' S'
S' -> aSb | bSa | ϵ
这也应该消除歧义。
另一种解决方案可能是:
S -> aSbS | bSaS | ϵ