Grammar 形式语言-语法
我正在上一门正式语言和可计算性课程,在理解语法概念方面有点困难。我的作业问题之一是: 接受∑ = {a,b},让na(w)和nb(w)分别表示字符串w中a和b的个数。然后是语法G和结果:Grammar 形式语言-语法,grammar,formal-languages,Grammar,Formal Languages,我正在上一门正式语言和可计算性课程,在理解语法概念方面有点困难。我的作业问题之一是: 接受∑ = {a,b},让na(w)和nb(w)分别表示字符串w中a和b的个数。然后是语法G和结果: S -> SS S -> λ S -> aSb S -> bSa S -> ab S -> ba 生成语言L={w:na(w)=nb(w)} 1) 示例中的语言包含一个空字符串。修改给定语法,使其生成L-{λ} 我想我应该修改L的条件,比如: L={w:na(w)=nb
S -> SS
S -> λ
S -> aSb
S -> bSa
S -> ab
S -> ba
生成语言L={w:na(w)=nb(w)}
1) 示例中的语言包含一个空字符串。修改给定语法,使其生成L-{λ}
- 我想我应该修改L的条件,比如: L={w:na(w)=nb(w),na,nb>0} 这样,我们表示字符串永远不会为空
- 我不知道该怎么做。这是否意味着我在语法中增加了一个条件,比如S->aSbb
S -> λ
因此,您可以考虑将此产品全部删除。这将产生以下语法:
S -> SS
S -> aSb
S -> bSa
不幸的是,这种语法并没有生成一种语言(有点像归纳法,它遗漏了一个首字母:没有只包含终端的产品)。要解决此问题,请添加以下产品:
S -> SS
S -> λ
S -> aSb
S -> bSa
S -> ab
S -> ba
2) 不要随意尝试添加生产规则,希望它能起作用。这里需要a
,后面跟着b
。那么生产规则呢
S -> bSa
肯定会消失。还有,规则
S -> SS
将产生,例如,abab
(试着看看这是如何获得的)。所以我们也得把它移走。我们只剩下:
S -> λ
S -> aSb
现在,该语法生成:
λ
ab
aabb
aaabbb
等等,这一点都不坏!为了获得一个额外的尾随b
,我们可以创建一个新的非终端,比如T
,用T
替换当前的S
,并在S
中添加尾随b
:
T -> λ
T -> aTb
S -> Tb
我知道这是家庭作业;我给了你家庭作业的答案:那是因为,从你提问的方式来看,你似乎完全迷路了。我希望这个答案能帮助你走上正确的道路 1)问题是修改语法以获得新的语言;所以不要直接修改语言 您的语法由于生成而生成空单词:
S -> λ
因此,您可以考虑将此产品全部删除。这将产生以下语法:
S -> SS
S -> aSb
S -> bSa
不幸的是,这种语法并没有生成一种语言(有点像归纳法,它遗漏了一个首字母:没有只包含终端的产品)。要解决此问题,请添加以下产品:
S -> SS
S -> λ
S -> aSb
S -> bSa
S -> ab
S -> ba
2) 不要随意尝试添加生产规则,希望它能起作用。这里需要a
,后面跟着b
。那么生产规则呢
S -> bSa
肯定会消失。还有,规则
S -> SS
将产生,例如,abab
(试着看看这是如何获得的)。所以我们也得把它移走。我们只剩下:
S -> λ
S -> aSb
现在,该语法生成:
λ
ab
aabb
aaabbb
等等,这一点都不坏!为了获得一个额外的尾随b
,我们可以创建一个新的非终端,比如T
,用T
替换当前的S
,并在S
中添加尾随b
:
T -> λ
T -> aTb
S -> Tb
我知道这是家庭作业;我给了你家庭作业的答案:那是因为,从你提问的方式来看,你似乎完全迷路了。我希望这个答案能帮助你走上正确的道路 语言是一组“可接受”或“有效”或“真实”的单词/短语/字符串。语法是可以生成单词/短语/字符串的东西。在问题1中,您正在修改语言
L
,但这不会改变G
生成空字符串的情况(这是要求您更改的内容)。在你对问题2的解答中,你的新语法将生成{w:n_a(w),这可能更适合。一种语言是一组“可接受的”或“有效的”或“真的”单词/短语/字符串。语法可以生成单词/短语/字符串。在问题1中,您正在修改语言L
,但这不会改变G
生成空字符串的情况(这是要求您更改的)。在问题2的解决方案中,您的新语法将生成{w:n\u A(w)这可能更适合你。