Parsing 左递归消元法的ε产生式消元
我在遵循语法中的左递归消除算法。它说,如果有,移除epsilon产生式 我有下列语法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这给
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
好的,我不知道这是什么写在这里可能是一个错误。