转换为LL(k)语法

时间:2016-05-11 12:38:51

标签: grammar left-recursion

我试图解决一个实践问题,但当我试图将样本答案与我的比较时,我遇到了一个问题。这是转换前的语法:

E-> S*
S-> SD
S-> D
D-> [D]
D-> x

起始符号为E,其他非终结符号为SD

我的回答是:

E-> S*
S-> DS'
S'-> DS'
S'->
D-> [D]
D-> x

在示例答案中,他们没有S-> DS',而E变为E-> DS'*。由于本书中用于删除左递归的方法,

A -> Aa
A -> b

=>  A -> bA'
    A' -> aA'
    A' ->

应该有一个S-> DS'。我现在对此感到困惑,也许我只是不明白这种方法。谁能给我任何关于此的提示?还有,请你告诉我这里的星座符号*的含义吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

你的回答没有错。样本答案只是简化了转换后的语法。

E -> S*
S -> DS'

给定S'D的规则,并假设SE在其他制作中没有出现,这部分语法相当于

E -> DS'*

第一个作品中的S只是被DS'取代,正如第二个作品中所定义的那样被剥夺了。

*符号可能是Kleene star。这意味着S可以发生任意次数(包括零)。但是没有背景,很难说,而且它也可能意味着别的东西。