2016-02-05 39 views
1

我正在学习形式语言和可计算性课程,并且在理解语法概念时遇到了一些麻烦。我的一个分配的问题是这样的:Formal Languages - Grammar

取Σ= {A,B},并且设N 一个(W)和正 b(W)表示字符串u在A和B的数量,分别。然后文法G与制作:

S -> SS 
S -> λ 
S -> aSb 
S -> bSa 

生成语言L = {瓦特:N 一个(W)= N b(W)}。

1)示例中的语言包含空字符串。修改给定的语法,使其生成L - {λ}。

  • 我在想,我应该修改L的条件下,是这样的:

    L = {黑白:ñ一个(W)= N b(W),N ,n b> 0}

    这样,我们指出该字符串永远不会为空。

2)修改语法的例子中,这样它会生成L个∪{一个Ñ b n + 1个:N> = 0}。

  • 我不确定如何做到这一点。这是否意味着我在语法中增加了一个条件,如S - > aSbb?

任何关于这两个问题的解释将不胜感激。我仍然试图找出这些语法问题,所以我不确定我的答案。

+0

语言是一组“可接受”或“有效”或“真实”的单词/短语/字符串。语法是可以产生单词/短语/字符串的东西。在问题1中,您正在修改语言'L',但这并不会改变'G'生成空字符串(这是您要求更改的内容)。在你对问题2的解决方案中,你的新语法会产生{w:n_a(w)<= n_b(w)},这是一个比问题更大的方法。因为问题很模糊(“修改语法”并不以任何方式限制你),所以你可以对语法做任何你喜欢的事情。包括完全重写它。 – 2016-02-05 17:25:37

+1

这可能更适合[cs.stackexchange.com](http://cs.stackexchange.com/)。 –

回答

0

1)问题在于修改语法以获得新语言;所以不要直接修改语言...

你的语法生成一句空话,因为生产:

S -> λ 

所以,你能想到完全消除这种生产的。这产生以下语法:

S -> SS 
S -> aSb 
S -> bSa 

不幸的是,此语法不生成语言(有点像在感应,会忽略初始:没有制作仅由终端)。要解决此问题,请添加以下产品:

S -> ab 
S -> ba 

2)不要随机尝试添加生产规则,希望它能够正常工作。在这里你需要a的跟着b的。所以生产规则

S -> bSa 

肯定会消失。此外,规则

S -> SS 

会产生,例如abab(试图看看如何获​​得)。所以我们也必须删除它。我们只剩下:

S -> λ 
S -> aSb 

现在这个语法生成:

λ 
ab 
aabb 
aaabbb 

等等。这是不差!为了获得额外的尾随b,我们可以创建一个新的非终端,说T,取代我们目前S通过T,并补充说,尾随bS

T -> λ 
T -> aTb 
S -> Tb 

我知道,这是家庭作业;我给了你作业的解决方案:那是因为,从你提出问题的方式来看,你似乎完全失去了。我希望这个答案能帮助你走上正确的道路!

相关问题