形式语言 - 语法

时间:2016-02-05 17:16:34

标签: grammar formal-languages

我正在参加正式语言和可计算性课程,并且在理解语法概念方面遇到了一些麻烦。我的任务之一就是:

取Σ= {a,b},让n a (w)和n b (w)表示字符串w中的a和b的数量, 分别。然后语法G与制作:

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

生成语言L = {w:n a (w)= n b (w)}。

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

  • 我在想我应该修改L的条件,比如:

    L = {w:n a (w)= n b (w),n a ,n b < / sub>&gt; 0}

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

2)修改示例中的语法,使其生成L∪{a n b n + 1 :n&gt; = 0}。

  • 我不知道怎么做这个。这是否意味着我在语法中再增加一个条件,添加类似S - &gt;的东西。 ASBB?

非常感谢对这两个问题的任何解释。我还在努力想出这些语法,所以我不确定我的答案。

1 个答案:

答案 0 :(得分: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,并添加该结尾b } S

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

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