我正在参加正式语言和可计算性课程,并且在理解语法概念方面遇到了一些麻烦。我的任务之一就是:
取Σ= {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}。
非常感谢对这两个问题的任何解释。我还在努力想出这些语法,所以我不确定我的答案。
答案 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
我知道这是作业;我给了你作业的解决方案:那是因为,从你问你的问题的方式来看,你似乎完全失去了。我希望这个答案能帮助你走上正确的道路!