无上下文语法 - 这些是一样的吗?

时间:2013-08-05 18:29:51

标签: context-free-grammar

我只是想知道这些语法是否产生相同的语言。前者是我对作业的回答,后者是教授给出的结果。据我所知,他们生成相同的语言。

Language: L1 = {a^i b^j | i<j and i,j greater or = 0}

我的解决方案:

S::= Ub
U::= Ub | aUb | end

教授的回答:

S::= XY
X::= aXb | end
Y::= bY | b

这些语法是否生成相同的语言?

1 个答案:

答案 0 :(得分:2)

注意:原作者的帖子有一个错字,他已经修复了原文。因此,这个答案对编辑的帖子没有意义。有关拼写错误的更多信息,请在此答案的评论中进行编辑。我已经在下面列出了原帖和答案,以防任何人阅读时都有关于这种无上下文语法问题的类似问题。

Language: L1 = {a^i b^j | i<j and i,j greater or = 0}

我的解决方案:


S::= aU 
U::= aU | aUb | end

教授回答:


S::= XY
X::= aXb | end
Y::= bY | b

<强>答案:

看起来你的答案是从教授那里倒退的。使用您的,您可以反复使用U::= aU获取字符串“aaaaa”,然后U::= end。使用教授的语法,你不能得到“aaaa”(或任何比b更多的字符串)。如果你看一下教授的语法,你会注意到添加'a'的唯一方法是添加一个'b'。这可以确保永远不会比b更多。你还会注意到要摆脱S中的Y,你必须输入'b'。结合这两个规则,我们总是至少有一个'b'而不是'a',因为我们在最后添加一个以消除Y.

我认为教授的答案在这种情况下是正确的。 i<j条件导致b必须多于a的条件,这对于教授的语法是正确的,但对你的语法不是这样。