我遵循从语法中消除左递归的算法。它说如果有任何
删除epsilon产生我有以下语法
S-->Aa/b
A-->Ac/Sd/∈
在删除epsilon产品后,我可以看到语法变为
1) S-->Aa/a/b
2)A-->Ac/Sd/c/d
我很困惑a / b进来1)和c / d进来2) 有人可以解释一下吗?
答案 0 :(得分:2)
让我们查看规则S->Aa
,如果A->∈
然后S->∈a
只提供S->a
,那么我们将获得先前的规则S->Aa|a|b
现在让我们查看给我们A->Ac
的规则A->∈c
和A->c
。
A->Sd
怎么样?我不知道你是如何得到A->d
的。如果这是一个规则,那么这个语法(S->Aa & A->d --> "da"
)接受字符串“da”,但是尝试用原始语法构造这个字符串 - 如果你从S
开始并且字符串结束于a
,这意味着您必须使用S->Aa
,但为了获得"d"
,您必须使用A->Sd
,这会迫使我们拥有另一个"a"
或"b"
,意味着我们无法构造此字符串,并且规则A->d
不正确。