转换为 LL(k) 文法

convert to LL(k) grammar

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

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'。我现在对此感到困惑,也许我只是不明白这种方法。任何人都可以给我任何提示吗?还有你能告诉我这里的星号 * 是什么意思吗?非常感谢!

你的回答没有问题。范例答案只是对语法进行了改造后的简化。

E -> S*
S -> DS'

给定 S'D 的规则,并假设 SE 不会出现在其他产生式中,这部分语法等同于

E -> DS'*

第一个产品中的 S 被简单地替换为 DS',正如第二个产品中定义的那样,已被剥离。

* 符号可能是 Kleene star。这意味着 S 可以出现任意次数(包括零次)。但是没有上下文就不好说了,也可能有别的意思。