Parsing 左递归消元法的ε产生式消元

Parsing 左递归消元法的ε产生式消元,parsing,recursion,compiler-construction,context-free-grammar,Parsing,Recursion,Compiler Construction,Context Free Grammar,我在遵循语法中的左递归消除算法。它说,如果有,移除epsilon产生式 我有下列语法 S-->Aa/b A-->Ac/Sd/∈ 我可以看到去掉ε乘积后,语法就变成了 1) S-->Aa/a/b 2)A-->Ac/Sd/c/d 我搞不清楚a/b在哪里1)和c/d在哪里2) 有人能解释一下吗?让我们看看规则S->Aa,如果A->∈然后S->∈a只给出S->a,因此与前面的规则一起,我们得到S->Aa | a | b 现在让我们检查规则A->Ac和A->∈c这给

我在遵循语法中的左递归消除算法。它说,如果有,移除epsilon产生式

我有下列语法

S-->Aa/b

A-->Ac/Sd/∈
我可以看到去掉ε乘积后,语法就变成了

  1) S-->Aa/a/b

  2)A-->Ac/Sd/c/d
我搞不清楚a/b在哪里1)和c/d在哪里2)
有人能解释一下吗?

让我们看看规则
S->Aa
,如果
A->∈然后
S->∈a
只给出
S->a
,因此与前面的规则一起,我们得到
S->Aa | a | b

现在让我们检查规则
A->Ac
A->∈c
这给了我们
A->c


那么
A->Sd
呢?我不明白你通常是怎么得到
A->d
的。如果这是一条规则,那么字符串“da”被该语法接受(
S->Aa&a->d-->“da”
),但是试着用原始语法构造这个字符串-如果你从
S
开始,字符串以
a
结束,这意味着你必须使用
S->Aa
,但是为了得到
“d”
你必须使用
A->Sd
,这迫使我们有另一个
“A”
“b”
,这意味着我们不能构造这个字符串,规则
A->d
是不正确的。

第(2)项末尾的
|d
是一个错误——应该是
A->Ac | c | Sd
好的,我不知道这是什么写在这里可能是一个错误。