形式语言 - 语法

Formal Languages - Grammar

我正在学习形式语言和可计算性 class,但在理解语法概念时遇到了一些困难。我的作业问题之一是:

取∑={a,b},设na(w)和nb(w)表示数分别是字符串 w 中的 a 和 b。然后语法 G 产生式:

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

生成语言 L = {w: na(w) = nb(w)}.

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

2) 修改例子中的文法,使其生成L ∪ {anbn+1: n > = 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

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