如何离开因素并消除左递归?

时间:2019-01-13 23:03:54

标签: parsing compiler-construction ll left-recursion

我的生产规则如下:

S → id = Exp
S → id (Arglist)
Arglist → Arglist , Exp
Arglist → Exp
Exp → id (Arglist)
Exp → id

这是我的第一次尝试:

S -> id S'
S' -> ϵ | = EXP | (Arglist)
Arglist -> Arglist'
Arglist' -> ϵ | ,Exp Arglist'
Exp -> id Exp'
Exp' -> ϵ | (Arglist)

我的问题是关于Arglist生产规则,我错了。

1 个答案:

答案 0 :(得分:2)

您只需要将Arglist更改为右递归,即可识别相同的语言(语法树稍有不同):

Arglist → Exp , Arglist
Arglist → Exp

然后左因素:

Arglist → Exp Arglist'
Arglist' → ε | , Exp Arglist'