我只是想知道这些语法是否产生相同的语言。前者是我对作业的回答,后者是教授给出的结果。据我所知,他们生成相同的语言。
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
这些语法是否生成相同的语言?
答案 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的条件,这对于教授的语法是正确的,但对你的语法不是这样。