转换为 LL(k) 文法
convert to LL(k) grammar
我试图解决一道练习题,但是当我试图将样本答案与我的进行比较时遇到了问题。这是转换前的语法:
E-> S*
S-> SD
S-> D
D-> [D]
D-> x
起始符号是E
,其他非终结符号是S
和D
。
我的回答是:
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
的规则,并假设 S
和 E
不会出现在其他产生式中,这部分语法等同于
E -> DS'*
第一个产品中的 S
被简单地替换为 DS'
,正如第二个产品中定义的那样,已被剥离。
*
符号可能是 Kleene star。这意味着 S
可以出现任意次数(包括零次)。但是没有上下文就不好说了,也可能有别的意思。
我试图解决一道练习题,但是当我试图将样本答案与我的进行比较时遇到了问题。这是转换前的语法:
E-> S*
S-> SD
S-> D
D-> [D]
D-> x
起始符号是E
,其他非终结符号是S
和D
。
我的回答是:
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
的规则,并假设 S
和 E
不会出现在其他产生式中,这部分语法等同于
E -> DS'*
第一个产品中的 S
被简单地替换为 DS'
,正如第二个产品中定义的那样,已被剥离。
*
符号可能是 Kleene star。这意味着 S
可以出现任意次数(包括零次)。但是没有上下文就不好说了,也可能有别的意思。